
SpringCloud核心组件
Eureka
用于服务注册和发现。包含服务注册中心(Eureka Server)、服务提供者(Eureka Client)、服务消费者(Eureka Client)。
服务注册中心(Eureka Server):通过服务实例列表统一管理服务实例(服务实例名称、服务提供者ip、服务提供者端口)。
服务提供者(Eureka Client):将自己提供的服务实例信息注册到服务注册中心。同时获取服务实例列表。
服务消费者(Eureka Client):通过负载均衡(Ribbon+RESTTemplate)或Feign的方式对服务实例列表中的服务实例信息进行消费。

服务提供者(Eureka Client)同时也可以作为服务消费者存在。在服务提供者启动时,向服务注册中心(Eureka Server)注册服务实例(服务提供者名称、服务提供者IP地址、服务提供者端口)。服务提供者在向服务注册中心的同时从服务注册中心拉取全量服务实例列表(通过定时任务每隔30秒获取服务实例列表更新),该列表包含所有向该服务注册中心注册的服务实例信息(包含服务实例名称、服务实例ip、服务实例端口)。
Feign
我们需要在项目里调用外部接口,通常需要借助HttpClient、HttpUrlconnection、RestTemplate进行web请求的方式进行外部接口调用。
Feign是一个声明式的REST客户端,能让REST调用更简洁。Feign提供了http请求的模板,通过编写简单的接口和启用注解,就可以定义好http请求参数、格式、请求地址等,并进行web请求。内部使用Ribbon做负载均衡。
Ribbon
一个服务实例可以注册到多个服务注册中心,为了避免服务注册中心集群中的某个服务注册中心节点被服务消费者大量访问,需要引入负载均衡组件Ribbon来实现服务注册中心集群访问的负载均衡,主要实现中间层应用程序的负载均衡。
Hystrix
服务注册中心注册了多个可被调用的服务实例。在服务消费者调用服务实例的过程中,出现网络连接缓慢、资源繁忙、服务不可用、服务下线等异常情况,使得原本可用的服务实例调用无响应,形成服务雪崩效应。
Hystrix(熔断器)通过四个机制解决服务雪崩效应:
隔离(线程池隔离和信号量隔离):限制被调用服务实例的资源使用,一个服务实例调用问题不会影响其它服务实例调用。
降级机制:超时降级、调用资源不足时降级,降级后可以配合降级接口返回托底数据。
熔断:当失败率达到阀值(网络故障或超时引起失败率高)自动触发降级,熔断器触发的快速失败会进行快速恢复。
缓存:提供了请求缓存、请求合并实现。
Zuul
微服务网关、负责网络路由。微服务架构中都会设计一个网关组件,服务消费者不需要关心服务注册中心注册服务实例列表(包含服务实例的名称、IP地址、端口号),所有请求发往微服务网关,微服务网关会根据请求信息从服务注册中心获取服务实例列表。
总结
| 组件名称 | 组件作用 |
| Eureka | 提供服务注册、服务发现功能。分为服务注册中心和服务客户端。向服务注册中心注册服务实例的同时,从服务注册中心获取服务注册列表(包含服务实例名称、服务实例IP、服务实例端口) |
| Feign | 基于动态代理机制,根据注解(@FeignClient)和选择的机器(服务注册中心集群中的节点),拼接请求实例URL地址(服务提供者@RequestMapping),发起请求 |
| Ribbon | 在服务消费者发起请求时,提供负载均衡机制,从服务注册中心集群中选择服务注册中心节点进行请求处理,避免某个服务注册中心节点集中处理过多的请求 |
| Hystrix | 请求发起通过Hystrix线程池进行,实现了服务调用隔离,避免服务雪崩的产生 |
| Zuul | 微服务网关。负责处理服务消费者的请求,微服务网关根据请求信息从服务注册中心获取服务实例列表。服务消费者使用Feign或Ribbon+RESTTemplate进行服务实例间通信 |

SpringCloud核心组件调用流程

请求发往微服务网关(zuul/Gateway)。
微服务网关收到服务请求后,根据请求信息从服务注册中心(Eureka Server)获取服务实例列表(包含服务实例名称、服务实例IP、服务实例端口)。
使用负载均衡机制(Feign或Ribbon)在服务注册中心集群中选择服务注册中心节点,避免由服务注册中心集群中的某个服务注册中心节点集中处理请求。分发到选中处理请求的服务注册中心节点中注册的服务实例。
使用Feign(内部使用Ribbon进行负载均衡)或Ribbon+RESTTemplate的方式和服务实例进行通信。
Hystrix服务处理服务超时熔断并降级。
参考文献
https://blog.csdn.net/czxljy999/article/details/88299972




