微服务注册中心 Spring Cloud Eureka是什么?
泻药,人在工位,刚改完 bug,看到“微服务注册中心 + Spring Cloud Eureka”这俩关键词,DNA 动了,必须来答一发。
(文末有彩蛋,不看到最后血亏。)
一、先给结论:
Eureka 就是微服务界的“婚姻介绍所”,服务 = 单身男女,注册中心 = 红娘,消费者 = 相亲者,调用链 = 谈恋爱 → 结婚 → 离婚(下线)。
一句话:没有红娘,单身狗只能村口尬聊;没有 Eureka,微服务只能 404 自嗨。
二、为什么非得用注册中心?
问:我把 IP 写死在配置里,再配个 Nginx 不行吗?
答:行,只要你能接受以下彩蛋:
- 凌晨 3 点服务扩了个容,运维哥哥手动改 Nginx upstream,手一抖,全站 502;
- 新来个实习生,把 192.168.1.3 写成了 192.168.1.38,排查三天,眼睛自带马赛克;
- 双十一突然杀疯,临时上了 50 个节点,老板让你 5 分钟搞定,你说“要不我先删库跑路?”
所以,注册中心 = 动态感知 + 自动化 = 保命神器。
三、Eureka 到底怎么当红娘?
- 服务启动 → 带着“姓名、年龄、三围(IP、端口、健康检查 URL)”去红娘那里登记;
- 红娘把信息记在小本本(ConcurrentHashMap)里,同时同步给闺蜜节点(peer replication);
- 消费者每 30 秒拉一次“相亲名单”(delta 增量更新,省流量);
- 消费者本地缓存一份, Ribbon 按负载均衡算法挑一个顺眼的,直接约饭(HTTP 调用);
- 服务下线(优雅 shutdown)→ 给红娘发“分手短信”,否则红娘 90 秒没收到心跳就默认“猝死”,直接除名。
四、高可用八卦:
Eureka 自己也是集群,节点之间互相注册、互相复制,没有主从,AP 届的扛把子(CAP 里牺牲 C 保 A)。
场景:网络抖动,机房 1 和机房 2 脑裂,Eureka 集群进入“自我保护”模式——
“老娘最近收到的分手信有点多,怕误杀,先暂停清理,等网络好了再说。”
结果:
- 服务列表可能短期不一致,但不会误踢;
- 消费者本地缓存还能继续撑场面,不会瞬间雪崩;
- 运维同学可以睡个安稳觉,头发 +1。
五、代码走读 30 秒:
Server 端:
server:port: 8761
eureka:instance:hostname: eureka1client:register-with-eureka: false # 自己是红娘,不相亲fetch-registry: falseservice-url:defaultZone: http://eureka2:8762/eureka/,http://eureka3:8763/eureka/
Client 端:
spring:application:name: user-service
eureka:client:service-url:defaultZone: http://eureka1:8761/eureka/instance:prefer-ip-address: truelease-renewal-interval-in-seconds: 30lease-expiration-duration-in-seconds: 90
启动类加 @EnableEurekaServer
/ @EnableDiscoveryClient
,完事儿。
(别问我为什么知道,当年 copy 错了注解,排查到怀疑人生。)
六、Eureka 的“黑历史”:
- 2.x 停更:Netflix 官宣“不玩了”,社区一度哭晕;
- 替代品内卷:
- Nacos:阿里系,同时支持 DNS + RPC + 配置中心,国产之光;
- Consul:HashiCorp 出品,带 KV 存储 + 多数据中心,Go 写的高并发;
- Etcd:K8s 御用,强一致,云原生亲儿子;
- Spring Cloud 2022 起官方移除了 Netflix 除 Eureka 外的全套,但 Eureka 依旧活得好好的,老项目存量之王,面试八股文常驻嘉宾。
七、 FAQ 时间:
Q1:Eureka 能跨机房吗?
A:能,但延迟高就自我保护疯狂报警,建议双注册 + 双消费(Nacos 的多数据中心更香)。
Q2:k8s 里还用 Eureka 是不是傻?
A:k8s 自带 DNS + Service,原生就能做服务发现;但老项目无缝迁移、语言异构、灰度场景,Eureka 依旧能顶半边天。存在即合理,别急着喷。
Q3:怎么优雅下线?
A:
- 先发
POST /eureka/apps/{appID}/{instanceID}/status?value=OUT_OF_SERVICE
; - 等流量归零,再
shutdown
; - 或者直接用 Spring Boot 的
GracefulShutdown
+actuator
,人间清醒。
八、彩蛋:
当年某大厂双十一, Eureka 集群 TPS 飙到 4w,监控图直接画出心电图,运维大佬边喝咖啡边吐槽:
“这哪是注册中心,分明是心跳检测仪——服务活着,我也活着;服务挂了,我血压 180。”
九、总结一句话:
Eureka 老矣,尚能饭;新人可上 Nacos,老系统安心躺平。
技术选型没有银弹,合适业务 + 能 hold 住 + 半夜不炸,就是牛逼。
关注我,下一篇聊聊《Nacos 真香现场:从 Eureka 无痛迁移踩坑记》,点个赞再走吧,毕竟头发换来的干货。