“服务挂了为什么 Eureka 页面上还显示 UP?”、”自我保护的 85% 到底是怎么算出来的?”、”一个服务下线了,调用方最长要多久才感知到?”——这几个问题在面试和线上排查里出现频率极高,但多数回答停在”心跳续约、默认 30 秒”这一层。这篇直接拆开 Eureka 的源码(Netflix eureka-client / eureka-core 1.9.8,对应 Spring Cloud Greenwich 版本线,本地 maven 仓库的 sources 包就是最好的阅读材料),把注册、心跳、下线、剔除、自我保护、多级缓存、增量拉取、集群复制这条完整链路全部走一遍,每个结论都落到具体的类与方法上。
先给一个能贯穿全文的坐标系:Eureka Server 本质上是一个纯内存的租约登记表 + 一组围绕它运转的定时任务。理解了”注册表数据结构、租约的过期语义、缓存的刷新节奏”这三件事,所有”灵异现象”都能对号入座。