版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
Eureka服务注册中心的原理
故障转移:
Eureka内存实际上是有俩级缓存,一个是只读缓存,一个是可以更改的缓存。当注册表更新后,会立马同步到ReadWrite缓存,ReadWrite缓存会定时同步到ReadOnly缓存,而服务发现则是定时从ReadOnly缓存中拉取注册表信息。
当服务A宕机后,定时检查线程通过心跳机制得知服务A宕机了,那么注册表会删除服务A的注册信息,然后会立刻对ReadWrite缓存进行清空,这时服务C依然拉取的是ReadOnyl缓存中的信息,他并不直到服务A宕机了,但是每次调用时,都是发送请求失败。当ReadWrite缓存定时对ReadOnly缓存同步后,发现俩个缓存不一样,那么也会对ReadOnly缓存的数据进行清空,这个又隔了30s服务C再次拉取注册信息的时候,发现ReadOnly缓存中的数据是空的,那么就会取ReadWrite缓存中取找,这时发现ReadWrite缓存中也没有数据,那么就直接取注册表中拉取信息,这是对ReadWrite缓存中放一份,同时再同步到ReadOnly缓存中一份,这次服务C就会发现服务A宕机了,就不会再亲求调用。
当服务A重启注册后,同样的机制会对俩级缓存进行更新。