SpringCloud 是一个全家桶式的技术栈,包含了不少组件;包含 Eureka、Ribbon、Feign、Zuul 、Hystrix等。每一个组件完成对应的功能前端
- 服务发现 Eureka - 服务路由 Ribbon - RPC 调用 Feign - 网络流量整形以及断路器 - Api 网关智能代理 zuul - 配置中心 Spring Cloud Config
一、Eureka 服务发现
接入后,每一个节点都是一个 Eureka Client,会将本节点对应的地址端口信息汇总注册到 Eureka Server,server 端缓存了全部的服务信息,供客户端调用。
调用服务族中的任何服务都是经过 Eureka Server 返回的信息肯定。android
二、Feign 远程调用
须要调用的其余服务接口时,经过 @FeignClient 注解动态代理生成对应的实现类,最终减小了调用代码的编写。ios
三、Ribbon 服务路由
步骤二中咱们使用 @FeignClient 注解有一个name 属性,表示服务的惟一标识名,那么假如某一服务有多个节点,他是不知道该访问哪个节点的。这个时候就须要一种路由机制,来肯定最终为咱们提供服务的节点。
路由策略默认是 轮询策略。能够定义responseTime weight这种方式。小程序
四、Hystrix 服务熔断/降级
服务之间相互调用,因为增长了中间网络的存在,确定会出现服务不可用或相应缓慢的状况。
假如一个服务有问题,调用方的全部线程都阻塞在该服务上,致使调用方的服务也挂了,这是不该该的。
因此,Hystrix 是处理这种状况的。它会划分出一个个的线程池,每个服务一个线程池,加入问题线程池满了,不会影响到其余服务的线程池的状况。这就是隔离机制。
更进一步,服务一致有问题,也就没有必要去调用了,因此能够设定一个机制,好比出问题后,5分钟内的调用都会直接返回。这就是熔断的机制。
那么直接返回也不是很优雅,我应该要作点什么来应对服务恢复的状况,比方说记录下请求的参数,以及目的。等待服务恢复以后,能够把这一段的业务恢复到原来的状况。这种机制就是服务降级。后端
五、Zuul 微服务网关
通常微服务架构中都必然会设计一个网关在里面,像android、ios、pc前端、微信小程序、H5等等,不用去关心后端有几百个服务,就知道有一个网关,全部请求都往网关走,网关会根据请求中的一些特征,将请求转发给后端的各个服务。微信小程序
并且有一个网关以后,还有不少好处,好比能够作统一的降级、限流、认证受权、安全,等等。缓存
最后再来总结一下,上述几个Spring Cloud核心组件,在微服务架构中,分别扮演的角色:安全
ref:https://juejin.im/post/5be13b83f265da6116393fc7微信