spring cloud alibaba
Feign
feign注解,扫描所有的微服务模块。
举例:我们的项目 很多微服务模块,其中用了一个总行的青云文件系统的jar包,它们的jar包路径不一样,
如果想要调用它的话,就要在启动类配上 另一个jar的包路径,否则会显示服务熔断,
另外,也要加上@componentscan,扫描somponet service,否则这些接口不会被spring装到容器里
因此,也就不能使用@autwire注入到controller
nacos:
(=eureka)
英文全称 dynamic naming and cofiguratin service. 服务配置 注册 ,ps: 说是配置的动态刷新,其实有时候还是要重启DCE服务才能生效,可能时pom里没引入 spring-cloud-starter-nacos-config。
步骤:
- bootstrap.yml
在代码的bootstrap.yml项目启动文件里 写上nacos的配置:
如 微服务名称、每个环境(dev sit uat prod)的 nacos服务地址、命名空间、用户名密码,
ps:可以是动态的,后期通过JVM启动参数去动态修改;
项目启动时(在启动类上 开启@EnableDiscoveryClient注解开启nacos服务发现功能;),会根据微服务名称 去连接nacos 找到具体的配置;启动成功,该服务 会自动注册到nacos上;
配置中心:
在pom里引入 spring-cloud-starter-nacos-config,可以实现 配置的获取 和 动态刷新。
当修改nacos某个服务的配置时,会自动刷新 获取最新的;
服务配置、注册、发现
nacos
服务调用:
feign(=alibaba的dubbo)
路由:
gateway
分布式消息:
rocketMQ
分布式事务:
seata
服务限流 熔断:
sentinel
安全认证:
spring security JWT或oauth
nacos源码:
nacos默认集成了ribbon调用;
用@LoadBalance注解;
nacos支持集群;
seata:阿里的分布式事务框架
https://blog.csdn.net/yueyue763184/article/details/128044674
为了保证 数据的原子性 一致性,保证正确。
- 分库分表 的跨数据库 一致性
spring框架下的@Transactional注解 保证单一数据源增删改查的一致性,出现异常就回滚了。
但随着业务不断扩大,假如一个用户表里有1个亿的用户, 库表里塞不下数据了; 此时,分库是很常见的解决方案,塞不下的那些数据 就在另一个数据库里;
以前一个库里的事务操作,现在变成了跨数据库的事务操作。
此时@Transactional注解就失效了,这就是跨数据库分布式事务问题
- 跨微服务模块的 事件一致性
如:一件事: - report模块 增加企业
- auth模块 增加用户
这两件事 要么同时成功,否则就同时失败;不能一半成功 一半失败;
Ribbon 负载均衡
微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续我们将要介绍的Feign,它也是基于Ribbon实现的工具。
而软件负载均衡 则是 通过在服务器上安装一些 用于负载均衡功能或模块等软件 来完成请求分发工作,比如Nginx等
硬件负载均衡的设备或是软件负载均衡的软件模块都会 维护一个可用的服务端清单,通过心跳检测 来剔除故障的服务端节点 以保证清单中 都是可以正常访问的服务端节点。当客户端发送请求到负载均衡设备的时候,该设备按某种算法(比如线性轮询、按权重负载、按流量负载等)从维护的可用服务端清单中取出一台服务端端地址,然后进行转发。
hystrix 服务降级
防止由于一个微服务挂了 导致影响其他微服务不能使用;
RocketMQ 是阿里参考Kafka特点研发的一个队列模型的消息中间件
RocketMQ存储层算法优化、JVM与操作系统调优。更多的细节大家可以参考《万亿级数据洪峰下的分布式消息引擎》。
使用线程池模式,需要注意如下几点:
线程数不宜过高,避免占用过多的数据库连接池 ;
需要考虑评估线程池队列的大小,以免出现内存溢出的问题。