-
SpringBoot、SpringCloud、SpringCloudAlibaba版本
这三个东西就是一环套一环,版本一定要做到统一才能不出现各种奇奇怪怪的BUG。最底层肯定都是Spring的版本,当然都是依赖SpringBoot,所以SpringBoot版本统一就基本上没啥冲突了。[https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies](https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies)[https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies](https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies)由于都是后面依赖前面的,所以我们统一版本的时候需要倒着往前推。最新SpringCloudAlibaba是`2021.1`,然...
SpringBoot SpringCloud SpringCloudAlibaba -
使用Prometheus和Grafana监控JVM
我是在windows上面安装,比较简单:##下载[https://prometheus.io/download/](https://prometheus.io/download/)[https://grafana.com/grafana/download](https://grafana.com/grafana/download)##配置Prometheus```-job_name:"asc-gateway"scrape_interval:5smetrics_path:'/actuator/prometheus'static_configs:-targets:["localhost:8888"]```##配置SpringBoot####依赖```org.springframework.bootspring-boot-starter-actuatorio.micrometermicrometer-registry-prometheus```####端点配置```server:port:8888management:endpoints:web:exposure:include:-prometheus```##启动...
Prometheus Grafana -
SpringCloudAlibaba整合SpringCloudGateway问题
其实我以前一直没有理解为什么需要网关,我觉得使用nginx就可以了,后来我发现很多服务后台的权限管理比较弱,例如flink、nacos这些,所以需要网关鉴权。不多说开始的时候用的版本:```2020.0.42.2.6.RELEASE```##问题一:负载均衡```Description:Parameter0ofmethodloadBalancerWebClientBuilderBeanPostProcessorinorg.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfigurationrequiredabeanoftype'org.springframework.cloud.client.loadbalancer.reactive.DeferringLoadBalancerExchangeFilterFunction'thatcouldnotbefound.Action:Considerdefiningabeanoftype'org.springframework.cloud.cl...
SpringCloudAlibaba SpringCloudGateway -
Kafka
Windows安装Kafka真是问题多多##AccessDeniedException```[2021-11-1817:15:09,038]ERRORErrorwhilewritingtocheckpointfileE:\develop\kafka_2.12-3.0.0\tmp\kafka-logs\log-start-offset-checkpoint(kafka.server.LogDirFailureChannel)java.nio.file.AccessDeniedException:E:\develop\kafka_2.12-3.0.0\tmp\kafka-logsatsun.nio.fs.WindowsException.translateToIOException(WindowsException.java:83)atsun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)atsun.nio.fs.WindowsException.rethrowAsIOException(WindowsException...
Kafka -
分布式锁和分布式定时任务
以前微服务里面使用定时任务,都是只启动一个定时任务,但是这个服务挂了就GG。我的解决思路就是用分布式锁来实现,每次只有获得锁的服务才可以执行定时任务。分布式锁可以使用redis、zookeeper或者数据库表。##redis为了防止服务挂掉,需要设置一个锁的过期时间,然后每次获得锁进行续期。##zookeeperzookeeper可以设置临时节点服务挂了会自动释放。##数据库表和redis类似>全是理论没有实践##实践项目有兴趣的同学可以看下:[https://gitee.com/acgist/distributed](https://gitee.com/acgist/distributed)
分布式 定时任务 分布式锁 -
Sentinel限流熔断降级
我们需要区分这几个词:限流、熔断、降级限流:某个服务资源的QPS熔断:服务出现问题被禁用(超时、异常、调用时间过长)降级:限流或者熔断后服务返回一个临时结果(活动火爆稍后重试)限流和熔断都可以出现降级主要区别`fallback`和`blockHandler`参数,如果没有配置`blockHandler`,都会进入到`fallback`,因为限流异常也属于异常。还有就是两个方法的异常类型是不能修改的,如果需要全局处理可以定义异常处理`ControllerAdvice`。感觉对于微服务内部限流没啥太大必要,主要还是控制外部请求就可以了。所以sentinel的dubbo适配和dashboard也没啥用,感觉只会增加系统负担。当然个人理解,没有大型系统的经验,可能有点浅薄。有时候人总是想把握住太多,导致失去的更多。```@PostConstructpublicvoidinit(){Listrules=newArrayList<>();FlowRulerule=newFlowRule();rule.setResource("name");rule.setGrade(RuleConstant.FLOW_GRA...
Sentinel 限流 熔断 降级 -
Flink
下载地址:[https://flink.apache.org/downloads.html](https://flink.apache.org/downloads.html)文档地址:[https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/](https://ci.apache.org/projects/flink/flink-docs-release-1.10/zh/)>最新文档可能没有汉化生产环境使用:FlinkonYarn,不过学习直接使用单机就可以了。下载一个版本`ApacheFlink1.14.0forScala2.12`,解压然后使用命令`./start-cluster.sh`即可启动。##简单理解Flink编程流程就是先把数据进行分析处理映射成一张虚拟表,然后再对这个表进行聚合操作。##Windows启动提示```错误:找不到或无法加载主类org.apache.flink.runtime.taskexecutor.TaskManagerRunner错误:找不到或无法加载主类org.apache.flink.runti...
Flink -
Spring重写配置
SpringBoot自动配置很好用,但是有时候会出现一些情况就是自动配置里面有些配置并不能通过配置文件修改,这时候就可以使用`@Bean`和`@Configuration`或者`@Configuration`和`@PostConstruct`轻松实现。例如`activiti`的字体配置和`IdGenerator`配置可以使用下面方法:```importorg.activiti.engine.ProcessEngineConfiguration;importorg.activiti.engine.impl.cfg.IdGenerator;importorg.activiti.spring.SpringProcessEngineConfiguration;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassConfig{//@Autowired//privateProcessEngineConfigu...
Spring @Bean @Configuration -
activiti工作流
DEMO地址:[https://gitee.com/acgist/demo/tree/master/activiti](https://gitee.com/acgist/demo/tree/master/activiti)##添加依赖```org.activitiactiviti-spring-boot-starter-basic6.0.0```出现异常:```Causedby:java.lang.ClassNotFoundException:org.springframework.boot.autoconfigure.security.SecurityAutoConfigurationatjava.net.URLClassLoader.findClass(URLClassLoader.java:382)~[na:1.8.0_191]atjava.lang.ClassLoader.loadClass(ClassLoader.java:424)~[na:1.8.0_191]atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)~[na:1....
activiti 工作流 -
sharding-jdbc学习
项目地址:[https://gitee.com/acgist/demo/tree/master/sharding](https://gitee.com/acgist/demo/tree/master/sharding)官方配置:[https://shardingsphere.apache.org/document/legacy/4.x/document/cn/manual/sharding-jdbc/configuration/config-spring-boot](https://shardingsphere.apache.org/document/legacy/4.x/document/cn/manual/sharding-jdbc/configuration/config-spring-boot)##主要功能*读写分离*分库分表`dsmaster,dsslave`-`tb_user`:读写分离`ds0master,ds0slave,ds1master,ds1slave`-`tb_order`:分库分表、读写分离##配置```spring:shardingsphere:datasource:names:d...
sharding-jdbc 主从 读写分离 分库分表 -
算法
其实大部分时候都可以使用别人写好的数据结构和算法,但是还是需要多看看,主要是可以拓宽我们的思维的。##共识算法RaftPaxos
算法 -
SpringCloud微服务配置优化
>注意:不同注册中心或者实现可能配置不相同,具体可以百度或者官网。####不提供服务的可以配置不注册服务:`spring.cloud.zookeeper.discovery.register`####指定需要订阅的服务:`dubbo.cloud.subscribed-services`####Feign配置HTTP连接池`feign.client`默认使用的是`HttpURLConnection`,可以使用ApacheHttpClient、OKHttp替换。一般来说HTTP如果用来下载是可以不使用长连接和连接池的,但是作为微服务存在大量请求的情况下,长连接和连接池是可以提升性能的。长连接是默认支持的,比较不可能每次都去创建连接,连接池就需要自己配置。
SpringCloud -
库存分布式锁优化设想
本文只是设想并没有实际测试。其实分布式锁就像多线程加锁是一样的,只不过需要借用外部带点来控制。但是如果出现大量的请求,分布式锁应该会出现性能问题。所以我们可以提前提取库存到每个服务,比如每个服务预先扣除1000库存,这样只用通过加锁就可以实现库存安全。如果出现没有售完需要恢复库存。这里就有另外一个问题,如果出现宕机,就不能正确的恢复库存,就需要额外的服务去统计维护。
库存 分布式锁 -
架构选型
用久了阿里云发现是真的好用,很多服务都不用自己搭建,而且非常便宜。想起最开始没有阿里云的时候,用万网的服务器,那简直贵的要命,租一年够现在阿里云租五年了。如果让我搭建一个中型网站,我应该会这样选择。##阿里云服务阿里云CDN:如果存在大量静态资源可以考虑阿里云数据库阿里云负载均衡阿里云对象存储:如果需要保存大量用户图片、视频这些可以考虑阿里云ECS服务器XN##自己搭建服务>当然MQ、ELK、Redis、监控等都可以上云服务MQELK:搜索可以使用相同ES集群Redis监控:Prometheus+Grafana微服务大数据:Flink/Hadoop####部署模式服务器集群:MQ/ELK/Redis/注册中心/Flink/Hadoop服务器:监控服务器X2:微服务应用####高可用高并发MQ缓存异步主从集群分布式读写分离分库分表负载均衡####大数据流计算监控统计预警##选购技巧*一次购买五年*如果大量流量访问并且平稳可以考虑固定宽带,如果小流量存在爆发型访问可以考虑按量付费。推荐地址:[https://www.acgist.com/collect/server](https://www.acgist....
架构 选型 阿里云 -
Spring注解和接口
列举一些比较容易混淆的注解##配置@Configurable:对象管理@Configuration:配置@PropertySource:加载配置@ConfigurationProperties:单独使用不会管理(结合`Component`/`Configuration`/`EnableConfigurationProperties`使用)@EnableConfigurationProperties:配合`ConfigurationProperties`使用##初始化销毁@PostConstruct:初始化@PreDestroy:销毁##接口BeanNameAware:获取名称BeanFactoryAware:获取BeanFactoryApplicationContextAware:获取上下文ApplicationEvent/ApplicationListener:事件和监听##生命周期FactoryBean:创建BeanInitializingBean:初始化DisposableBean:销毁BeanPostProcessor:初始化BeanFactoryPostProcessor:工厂初始化(Bean生命周...
Spring 注解 接口 -
技术选型
很多时候有些技术需要用到再引入,不要为了用而用,这样只会增加项目的复杂度和维护成本。这里整理一些当下最时髦的玩意儿吧,持续更新,没有优先级安装字符长短排序,可以使用集群尽量使用。一个项目需要很多技术累计,一个优秀的项目必须每一步都要做到极致,大到整个技术选型,小到一张图片的压缩都会至关重要。###JavaJava基础>基础东西很多:GC、IO、JVM、多线程等等###基础框架ORM:JPA/MyBatis/HibernateSpringSpringMVCSpringBoot###微服务DubboSpringCloudSpringCloudAlibaba###服务器LinuxDebianCentOSUbuntu###数据库RedisNeo4jMySQLLuceneMongoDBElasticsearch>缓存、读写分离、分库分表、分布式事务###消息队列KafkaRabbitMQRocketMQ###注册中心NacosZookeeper###监控NacosDubboAdminSpringBootAdminSentinelDashboardPrometheus+GrafanaSprintBootMic...
架构 技术 选型 -
常用监控
在系统运行的时候监控是非常重要的,可以提前预支一些问题,最近也简单了解了一下常用的可视化监控组件。###Nacos这个作为SpringCloudAlibaba的注册中心,提供了一些简单的监控,主要查看服务和配置,但是dubbo服务并不详细。###SentinelDashboard作为Sentinel的可视化组件,只能单机部署,可以查看链路信息、配置限流,还可以看到流量的曲线图。默认提供的代码不能和Nacos配置动态关联,需要自己修改,不知道以后会不会进行优化。###DubboAdmin监控dubbo服务粒度很细,但是和SpringCloudAlibaba不能结合使用。###SpringBootAdmin通过SpringBoot端点结合turbine、zipkin可以监控SpringBoot很多指标。但是需要结合Hystrix使用。###链路监控Zipkin、Cat、Pinpoint、SkyWalking###Prometheus+Grafana这个我也只是网上见过,并没有搭建,但是基本上可以监控很多东西:系统、数据库、应用服务、K8S等等。但是监控一些常用指标,不过不能对服务进行治理。一般监控Java通过JM...
监控 -
SpringSecurity学习
今天重新学习了一下SpringSecurity,发现登陆成功跳转页面提示`405`,后来看了半天才发现成功跳转我用的请求转发`successForwardUrl`,请求转发地址是`GET`,登陆请求是`POST`,所以就有这个错误了。同样的其他请求转发也需要注意这个问题。今天用这个做了两个鉴权,一个基于`session`用来页面鉴权,一个基于`token`用来接口鉴权。代码:[https://gitee.com/acgist/demo/tree/master/security](https://gitee.com/acgist/demo/tree/master/security)不过感觉如果真的用来做接口鉴权,还是自己写拦截器好一点,因为接口还有很多东西需要处理的。数据格式校验、保存报文、验证有效很多需要验证的,所以感觉还是拦截器好用一点。最近发现Tomcat请求里面很多东西都可以通过线程ID和Map去实现信息传输。
SpringSecurity -
Spring Cloud Alibaba不能获取Nacos配置
之前学习SpringCloud还是几年前,以前Eureka注册中心现在不维护了,Zuul被Gateway代替了,不过看了一下还是阿里巴巴这套不错。不过搞了半天新版本居然获取不老Nacos配置,原来需要添加依赖:```javaorg.springframework.cloudspring-cloud-starter-bootstrap```这个依赖也是才出不久。##@NacosConfigurationProperties`@NacosConfigurationProperties`这个注解在SpringCloud环境下面也不能获得配置,需要配置`ext-config`。这个可能使用`nacos-config-spring-boot-starter`这个有效果,但是使用`spring-cloud-starter-alibaba-nacos-config`就没有效果,而且使用注解是`@NacoaPropertySource`。##dubbo`spring-cloud-starter-dubbo`不能使用dubboadmin管理服务##SentinelDashboardspringcloudalibaba使用nac...
SpringCloud Alibaba Nacos -
Markdown样式测试
#H1#H1##H2###H3####H4#####H5######H6[www.acgist.com](https://www.acgist.com)*斜体***加粗*****斜体加粗***标题内容acgist>引用这是一段配置`markdown=true`这是`HTML`文本属性`target````java代码...```1.12.21.12.21.12.2*1*21.12.2|表头|表头||----|----||单元格|单元格||单元格|单元格|标题内容标题内容完成
Markdown