Spring Cloud常用组件简介
前言: 大家都知道Spring Cloud是一套微服务框架,既然是服务于微服务,其核心的组件也就是解决微服务的核心问题;
核心问题:
- 服务很多,客户端怎么访问?(Zuul/Gateway)
- 服务很多,怎么管理这些服务?(Eureka)
- 服务很多,服务之间怎么通信?(Feign)
- 服务挂掉怎么办? (Hystrix)
其他问题:
-
服务很多,怎么管理配置?(Spring Cloud Config,Spring Cloud Bus) 如何保障服务安全?(Spring Cloud Security) 如何与缓存(Redis)及中间件(MQ)通信?(Spring Cloud Stream) …
服务条目与技术:
结构简图:
-
外部请求: 来自移动端(Android、IOS…)、浏览器客户端等发起的HTTP请求。 Feign 用于微服务之间的通信,集成了负载均衡(Ribbon)及熔断器(Hystrix)。从代码层面来说可以减少代码的冗余,一个功能接口开放出来,其他模块都调用就行了,也便于后期维护。 Eureka_Server 是服务的注册中心,注册表中会记录各个服务(Eureka_Client)的信息,负责管理所有的服务资源,Eureka_Server注册中心会根据Feign的请求信息及负载均衡规则确定具体的服务。 Ribbon 作用是负载均衡,在高可用的情况下某一类服务会部署多个,以达到高并发,高可用性的目的,默认以 轮询 的方式去为服务分配请求,比如有服务1、服务2、服务3都属于A类服务,陆陆续续来了6个A类服务的请求,那么就会依次分配给1、2、3、1、2、3,也可以自定义其他负载均衡策略,如 服务可用性权重、自定义权重、随机等。 Eureka_Client 其本质就是一个个的Spring Boot项目,分布式的架构下会将项目中的独立功能模块解耦出来作为一个Spring Boot项目,Spring Boot项目启动后会根据配置将自己注册到指定的Eureka_Server服务注册中心(有集群需要,可注册到多个注册中心),这样在外部调用的时候找到具体的服务了。 Hystrix Hystrix是一个熔断、降级的框架。 降级:相对于消费者(consumer)来说的,当被调用服务不可用时转而调用备用服务; 熔断:相对服务提供者(provider)来说的,当自身方法(泛指)调用出错时调用备用方法。 底层原理是为每个类型的服务创建独立的线程池,前面有说到注册中心会根据外部请求规则筛选服务,那么是根据什么规则呢?其实最主要的是服务的可用性,服务无法响应或延时较高,则会调整熔断器的状态,需要注意的是当服务熔断后,注册中心并不会立即清除该服务,而是启动安全模式,保存该服务状态信息,等待服务正常后解除安全模式。