注册中心 Eureka
Eureka专门负责服务的注册与发现。系统中的每个服务都包含一个Eureka Client组件,这个组件专门将包含他的那个服务注册到Eureka Server中。每个服务既可以是服务提供者也可以使服务消费者
服务注册 Register
当Eureka客户端(提供者)向Eureka Server 注册时,它将提供自身的元数据,比如IP地址,端口,运行状态等,
服务续约 Renew
Eureka客户每隔30s发送一次心跳续约,通过续约来告知Eureka Server该Eureka客户还存在,没有出现问题。如果Eureka Server在90s内没有收到对应提供者的续约,他就会在注册表中删除此提供者
获取注册列表信息 Fetch Registries
Eureka从服务器获取注册表信息,并将缓存在本地。客户端会根据注册表信息查找其他服务,从而进行远程调用。该注册表每30s更新一次。每次从服务器里获取的信息可能会与本地缓存的信息不一致,Eureka客户端会自动处理。如果因为某种原因导致注册列表信息不能及时匹配,Eureka客户端会重新获取整个注册表信息。
服务下线 Cancel
Eureka客户端在程序关闭时向Eureka服务器发送取消请求。发送请求后,该客户端实例信息将从服务器的实例注册表中删除。该下线请求不会自动完成,它需要调用以下内容:DiscoveryManager.getInstance().shutdownComponent();
服务剔除 Eviction
在默认的情况下,当Eureka客户端连续90s没有向Eureka发送服务续约,Eureka会将该服务从注册列表中删除
负载均衡 Ribbon
将消费者的调用请求采用轮询的方式发送到不同的服务器上
Ribbon的负载均衡默认使用的是Round Robin轮询算法。比如我们做了一个系统,但是为了整个系统的高可用,就将此系统部署了集群,此时,消费者想调用这个系统就可以有多种调用途径,不至于,一个系统挂掉就用不了了。
如果我们没有做均衡操作,我们对系统1疯狂的调用,导致其他两个是摆设,那部署的集群高可用就是无用功
所以Ribbon会获取注册表中的提供者(部署在不同服务器上的系统)的信息对请求做均衡操作,将请求发散到不同的服务器上调用
熔断器 Hystrix
Hystrix是一个能进行熔断和降级的库,通过使用它能提高整个系统的安全性,防止服务雪崩等类似事件的发生
如上图服务A调用服务B,服务B又调用了服务C,此时由于某种原因导致服务B调用服务C失败,在某些场景下,大量的同样请求服务C失败,会导致很多请求阻塞在这里,那么久会间接的导致服务A调用服务B的请求也阻塞在B,然后导致服务A也会阻塞崩溃。就会导致服务雪崩
这时,熔断器的作用就体现出来了(熔断):当指定时间内请求失败率达到设定阈值时,就会开启熔断器,不让所有的请求通过,直接返回失败的响应,默认短路5s,就会变为半开启,让下一个请求通过,如果请求成功,就变为关闭状态,失败继续开启
服务降级:降级是为了更好的用户体验,当调用一个方法异常时,通过执行另一逻辑代码给用户良好的体验。
网关 Zuul
网关提供消费者一个统一的入口,用于对请求鉴权、限流、路由、监控等。
在微服务架构中,为了系统的安全性, 后端服务往往不直接开放给前端,而是通过网关根据请求的url,路由到相应的服务。当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端。
远程调用 Open Feign
顾名思义,提供了不同服务之间远程调用的功能。
在提供者服务上使用@FeignClient(),在此注解中添加提供者服务的名字。
原文链接:https://zhuanlan.zhihu.com/p/95696180?from_voters_page=true