注册中心--Eureka
相信通过微服务应用开发入门①web端架构演进童鞋已经大概知道注册中心的概念和它是做什么的;
Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现。
那我们还必须搞明白一些概念(当然其他概念还有很多很多)
Register: 服务注册
服务的提供者,将自身注册到注册中心,服务提供者也是一个 Eureka Client。当 Eureka Client 向 Eureka Server 注册时,它提供自身的元数据,比如 IP 地址、端口,运行状况指示符 URL,主页等。
Renew: 服务续约
Eureka Client 会每隔 30 秒发送一次心跳来续约。 通过续约来告知 Eureka Server 该 Eureka Client 运行正常,没有出现问题。 默认情况下,如果 Eureka Server 在 90 秒内没有收到 Eureka Client 的续约,Server 端会将实例从其注册表中删除,此时间可配置,一般情况不建议更改
负载均衡
负载均衡是我们处理高并发、缓解网络压力和进服务端扩容的重要手段之一。 一般情况下我们所说的负载均衡通常都是指服务端负载均衡。 服务端负载均衡又分为两种,一种是硬件负载均衡,还有一种是软件负载均衡。
客户端负载均衡
指客户端可以选择调用的服务。 客户端负载均衡和服务端负载均衡最大的区别在于服务清单所存储的位置
那我们服务和服务之间调用的时候,使用的就是Eureka + Ribbon提供的客户端负载均衡;
负载均衡器Ribbon
Ribbon是Netflix发布的开源负载均衡项目
Ribbon是一个基于HTTP和TCP客户端的负载均衡器。
当我们将Ribbon和Eureka一起使用时,Ribbon会从Eureka注册中心去获取服务端列表,然后进行轮询访问以到达负载均衡的作用,客户端负载均衡中也需要心跳机制去维护服务端清单的有效性,当然这个过程需要配合服务注册中心一起完成
Feign中也使用Ribbon
Feign是一个声明式的web service客户端,它可以方便的和Ribbon集成,使用它我们可以快速进行服务之间的调用
Eureka+Ribbon+Feign简单应用
源码 https://github.com/zhouxiaohei/cloud-start-demo/tree/master/cloud-eureka-demo 先启动eureka
https://github.com/zhouxiaohei/cloud-start-demo/tree/master/cloud-service-a 启动服务A
https://github.com/zhouxiaohei/cloud-start-demo/tree/master/cloud-service-b 启动服务B
使用服务A调用服务B;
待完善讲解
Hystrix断路器
- 断路器模式源于Martin Fowler的Circuit Breaker一文。“断路器”本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时,“断路器”能够及时的切断故障电路,防止发生过载、发热、甚至起火等严重后果。
- 在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。
- 熔断器也可以使应用程序能够诊断错误是否已经修正,如果已经修正,应用程序会再次尝试调用操作。
- Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。
服务的健康状况 = 请求失败数 / 请求总数.
熔断器开关由关闭到打开的状态转换是通过当前服务健康状况和设定阈值比较决定的.
熔断器开关关闭
请求被允许通过熔断器. 如果当前健康状况高于设定阈值, 开关继续保持关闭.
熔断器开关打开
如果当前健康状况低于设定阈值, 开关则切换为打开状态. 当熔断器开关打开时, 请求被禁止通过。
熔断器开关半开
当熔断器开关处于打开状态, 经过一段时间后, 熔断器会自动进入半开状态, 这时熔断器只允许一个请求通过. 当该请求调用成功时, 熔断器恢复到关闭状态. 若该请求失败, 熔断器继续保持打开状态, 接下来的请求被禁止通过.
总结: 熔断器的开关能保证服务调用者在调用异常服务时, 快速返回结果, 避免大量的同步等待. 并且熔断器能在一段时间后继续侦测请求执行结果, 提供恢复服务调用的可能.