一.整体结构
二.具体
1.场景模拟
2.springcloud问题解析
Eureka +OpenFeign (Ribbon+RestTemplate)+ Hystrix + Gateway + config + Bus
- 订单服务只知道库存服务的名称,如何获得地址?
Eureka:服务注册与发现(名字+地址) - 此时订单服务获取了库存服务的地址,但是每次都需要建立连接,发送请求,释放连接,需要高效的通过地址调用服务?
OpenFeign:服务调用(被调用服务映射为一个service) - 此时库存服务是一个集群,在服务注册中心同一个名称注册了多个地址,订单服务如何找到具体的哪一个服务?
Ribbon:负载均衡(可以采用轮询方法) - 如果订单服务此时访问了库存服务,订单服务本身业务逻辑出问题,用户无法知晓,怎么办?
Hystrix:服务降级(如果当前方法挂掉,有兜底方法来提示用户) - 前端兄弟要调用订单服务,他必须要知道订单服务在注册中心的名字?
Gateway:服务网关(通过参数解析地址) - 其他问题
库存服务每个都有一个配置数据库的,更改数据库需要更改很多?
Config + Bus :服务配置和服务总线(全体动态刷新和全部从github上获取配置)
3.spring cloud alibaba 解析
Nacos + OpenFeign (Ribbon+RestTemplate)+ sentinel + Gateway + Seata
- 订单发现库存服务,库存服务统一配置管理(解决上述1+6)
Nacos=Eureka+config+bus:服务注册中心和配置中心 - 此时订单服务获取了库存服务的地址,但是每次都需要建立连接,发送请求,释放连接,需要高效的通过地址调用服务?
OpenFeign:服务调用(被调用服务映射为一个service) - 此时库存服务是一个集群,在服务注册中心同一个名称注册了多个地址,订单服务如何找到具体的哪一个服务?
Ribbon:负载均衡(可以采用轮询方法) - 如果订单服务此时访问了库存服务,订单服务本身业务逻辑出问题,用户无法知晓,怎么办?
Sentinel:服务降级 - 分布式的事务管理
seata:分布式事务管理
4.springcloud alibaba的组件
- Nacos = Eureka+config+bus
- Sentinel = Hystrix
- Seata 解决分布式事务问题