eureka点对点通信
Eureka client首先尝试与同一区域的Eureka Server通信。
如果在与server通信时出现问题,或者server不在同一区域中,则client将fail over to其他区域中的服务器。
一旦Eureka server开始接收信息,本服务器上执行的所有操作都会复制到服务器知道的所有对等节点。
如果某个操作由于某种原因而失败,则该信息将与下一个在服务器之间复制的心跳同步。
当Eureka服务器启动时,它会尝试从邻居节点获取所有实例注册信息。
如果从一个节点获取信息时出现问题,则服务器尝试从其他对等节点获取信息。
如果服务器能够成功获取所有实例,则会根据该信息设置它应该接收的更新阈值。
如果任何时候,更新低于为该值配置的百分比(在15分钟内低于85%),则服务器将停止到期实例以保护当前实例注册表信息。
上述安全措施称为自我保护
模式,主要用于在一组客户端与Eureka服务器之间存在网络分区的情况下的保护。
在这些情况下,服务器会尝试保护已有的信息。
在发生大量停机的情况下,可能会出现这种情况,这可能会导致客户获取不再存在的实例。
客户端必须确保它们对于返回不存在或不响应的实例的Eureka服务器具有弹性。在这些情况下最好的保护是快速超时并尝试其他服务器。
在这种情况下,如果服务器无法从邻近节点获取注册表信息,则会等待几分钟(5分钟),以便客户端可以注册其信息。
服务器会尽量不通过将流量仅倾斜到一组实例并导致容量问题向其中的客户端提供部分信息。
Eureka Server之间、Eureka client和Eureka server之间使用相同的机制进行通信。
服务之间的网络中断期间会发生什么?
在服务之间发生网络中断的情况下,可能会发生以下情况
- 服务之间的心跳复制可能会失败,服务器会检测到这种情况并进入自我保存模式。
- 注册可能发生在孤立的服务器上,有些客户端可能会反映新的注册,而其他客户端可能不会。
- 在网络连接恢复到稳定状态后,情况会自动进行自我更正。当服务能够正常通信时,新的注册信息会自动传输过来。
在网络中断期间,服务器尽可能具有弹性,但在此期间不同的服务可能会有不同的服务器注册信息。
参考:
https://github.com/Netflix/eureka/wiki/Understanding-Eureka-Peer-to-Peer-Communication
https://github.com/Netflix/eureka/wiki/Eureka-REST-operations