SpringCloud各组件的主要功能及底层实现原理
Eureka: 负责各个服务的注册于发现,分为服务端和客户端在每个客户端启动的时候,会自动的将自己的服务名称,ip地址,端口号等信息注册到注册中心。服务端是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号,供所有的客户端查询。Ribbon: 本质是一个带有负载均衡功能的http客户端,在每次请求的时候会选择一台机器,均匀的把请求分发到各台机器上。Ribbon的负载均...
-
Eureka: 负责各个服务的注册于发现,分为服务端和客户端
- 在每个客户端启动的时候,会自动的将自己的服务名称,ip地址,端口号等信息注册到注册中心。
- 服务端是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号,供所有的客户端查询。
-
Ribbon: 本质是一个带有负载均衡功能的http客户端,在每次请求的时候会选择一台机器,均匀的把请求分发到各台机器上。Ribbon的负载均衡默认使用的最经典的Round Robin轮询算法。Ribbon的工作流程:
- 首先Ribbon会从 Eureka Client里获取到对应的服务注册表,也就知道了所有的服务都部署在了哪些机器上,在监听哪些端口号;
- 然后Ribbon就可以使用默认的Round Robin算法,从中选择一台机器。
-
Feign: Feign的一个关键机制就是使用了动态代理,Feign默认集成了Ribbon,Feign的工作原理:
- 如果你对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理;
- 接着你要是调用那个接口,本质就是会调用 Feign创建的动态代理,这是核心中的核心;
- Feign的动态代理会根据你在接口上的@RequestMapping等注解,来动态构造出你要请求的服务的地址;
- 最后聪明从Ribbon中拿到对应的IP地址个端口号,针对这个地址,发起请求、解析响应。
-
Hystrix: 分布式系统中某个服务挂掉后,如果系统处于高并发的场景下,大量请求涌过来的时候,上游的服务会因为没有一个线程可以处理请求,就会导致上游的服务也跟着挂掉,这就是微服务架构中恐怖的服务雪崩问题。Hystrix是隔离、熔断以及降级的一个框架。Hystrix会搞很多个小小的线程池,比如订单服务请求库存服务是一个线程池,请求仓储服务是一个线程池,请求积分服务是一个线程池。每个线程池里的线程就仅仅用于请求那个服务。
下游的服务挂掉后,每次在上游的服务调用它的时候都会卡住几秒钟,这没有任何意义,可以直接都挂掉的服务熔断处理。比如在5分钟内请求该服务直接就返回了,不要去走网络请求卡住几秒钟,这个过程,就是所谓的熔断!
降级(比如积分服务挂了):每次调用积分服务,你就在数据库里记录一条消息,说给某某用户增加了多少积分,因为积分服务挂了,导致没增加成功!这样等积分服务恢复了,你可以根据这些记录手工加一下积分。这个过程,就是所谓的降级。
-
Zuul: 这个组件是负责网络路由的,一般微服务架构中都必然会设计一个网关在里面,像android、ios、pc前端、微信小程序、H5等等,不用去关心后端的几百个服务,就知道有一个网关,所有请求都往网关走,网关会根据请求中的一些特征,将请求转发给后端的各个服务。而且有一个网关之后,还有很多好处,比如可以做统一的降级、限流、认证授权、安全,等等。
更多推荐
所有评论(0)