Spring Cloud 基础组件:
1. 注册中心 Euraka/Nacos: 作用维护服务信息,提供服务注册、服务发现、心跳检测功能
2. Feign 组件:远程服务调用
3. Ribben 组件:负载均衡功能
4. Hystrix 组件: 服务保护功能 服务熔断、服务降级
5. Gateway 组件: 网关
Spring Cloud Euraka 注册中心:
Euraka 注册中心主要提供 服务注册、服务发现、服务心跳检测等功能,
服务注册:服务提供者启动时会将自己的服务名、IP地址、端口号等信息发送给 Euraka 服务,Euraka 服务会将信息保存到服务列表中
服务发现:服务消费者根据服务名称调用远程服务时,先去 Euraka 服务中获取要调用的服务列表信息
服务心跳检测:注册信息的服务需要定期向 Euraka 服务发送请求,告诉 Euraka 当前服务没有故障,如果一定时间内 Euraka 没有接受到 心跳请求,客观认为服务故障将该服务信息从服务列表中删除
补充:Euraka 与 Nacos 注册中心在 心跳检测、服务发现有一些不同,
心跳检测: Nacos 中服务注册时可以将当前服务信息设置为永久节点,该服务不会向 Nacos 发送心跳包,而是 Nacos 定时发送请求确定 永久节点 服务是否故障,即使故障 Nacos 也不会删除该服务的列表信息
服务发现:Nacos 中的数据更新后会主动推送信息给消费者
Spring Cloud Ribben 组件:
消费者调用远程服务接口时,先获取注册中心中服务列表信息,如果是集群服务会拿到多个服务信息,可以使用 Ribben 做负载均衡,Ribben 提供了多中负载均衡方法
1. 轮询:循环调用每个服务接口,默认负载均衡算法
2. 随机:随机获取一个服务信息调用接口
3. 权重:注册服务信息时可以配置服务权重信息,在 Ribben 做负载均衡会根据权重大小,判断调那个服务,权重大的服务总体调用次数多
4. 可以自己实现 IRule 接口做一个负载均衡算法
Spring Cloud Hystrix 组件:
Hystrix 组件主要做服务保护,如果在服务的调用链路中有一个服务出现故障,可能导致调用该服务的其它服务功能不可用,如果有大量服务异常出现服务雪崩问题,可以使用 Hystrix 做服务降级或者服务熔断
服务降级:针对某个接口调用出现异常处理方案,在 Feign 组件中加上一个 fallback 属性指定服务降级处理类,在类中实现降级处理方法保证服务正常运行
服务熔断:需要在启动类加上 EnableCircuitBreaker 注解,针对整个服务如果大量请求处理失败会开启服务熔断,一段时间内不会再调用异常服务,等一段时间后再尝试调用异常服务,如果可以正常调用关闭服务熔断,不能正常服务继熔断。具体工作方式,如果10秒内检测到 50 %的请求异常开启熔断,每隔五秒重试一次观察服务是否正常
注意: 服务降级是针对接口,服务熔断是针对整个服务