微服务注册中心 Spring Cloud Eureka是什么?

泻药,人在工位,刚改完 bug,看到"微服务注册中心 + Spring Cloud Eureka"这俩关键词,DNA 动了,必须来答一发。

(文末有彩蛋,不看到最后血亏。)


一、先给结论:

Eureka 就是微服务界的"婚姻介绍所" ,服务 = 单身男女,注册中心 = 红娘,消费者 = 相亲者,调用链 = 谈恋爱 → 结婚 → 离婚(下线)。

一句话:没有红娘,单身狗只能村口尬聊;没有 Eureka,微服务只能 404 自嗨。


二、为什么非得用注册中心?

问 :我把 IP 写死在配置里,再配个 Nginx 不行吗?
答:行,只要你能接受以下彩蛋:

  1. 凌晨 3 点服务扩了个容,运维哥哥手动改 Nginx upstream,手一抖,全站 502;
  2. 新来个实习生,把 192.168.1.3 写成了 192.168.1.38,排查三天,眼睛自带马赛克;
  3. 双十一突然杀疯,临时上了 50 个节点,老板让你 5 分钟搞定,你说"要不我先删库跑路?"

所以,注册中心 = 动态感知 + 自动化 = 保命神器。


三、Eureka 到底怎么当红娘?

  1. 服务启动 → 带着"姓名、年龄、三围(IP、端口、健康检查 URL)"去红娘那里登记;
  2. 红娘把信息记在小本本(ConcurrentHashMap)里,同时同步给闺蜜节点(peer replication);
  3. 消费者每 30 秒拉一次"相亲名单"(delta 增量更新,省流量);
  4. 消费者本地缓存一份, Ribbon 按负载均衡算法挑一个顺眼的,直接约饭(HTTP 调用);
  5. 服务下线(优雅 shutdown)→ 给红娘发"分手短信",否则红娘 90 秒没收到心跳就默认"猝死",直接除名。

四、高可用八卦:

Eureka 自己也是集群,节点之间互相注册、互相复制 ,没有主从,AP 届的扛把子 (CAP 里牺牲 C 保 A)。
场景:网络抖动,机房 1 和机房 2 脑裂,Eureka 集群进入"自我保护"模式------

"老娘最近收到的分手信有点多,怕误杀,先暂停清理,等网络好了再说。"

结果:

  • 服务列表可能短期不一致 ,但不会误踢;
  • 消费者本地缓存还能继续撑场面,不会瞬间雪崩;
  • 运维同学可以睡个安稳觉,头发 +1。

五、代码走读 30 秒:

Server 端:

yaml 复制代码
server:
  port: 8761
eureka:
  instance:
    hostname: eureka1
  client:
    register-with-eureka: false   # 自己是红娘,不相亲
    fetch-registry: false
    service-url:
      defaultZone: http://eureka2:8762/eureka/,http://eureka3:8763/eureka/

Client 端:

yaml 复制代码
spring:
  application:
    name: user-service
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:8761/eureka/
  instance:
    prefer-ip-address: true
    lease-renewal-interval-in-seconds: 30
    lease-expiration-duration-in-seconds: 90

启动类加 @EnableEurekaServer / @EnableDiscoveryClient,完事儿。

(别问我为什么知道,当年 copy 错了注解,排查到怀疑人生。)


六、Eureka 的"黑历史":

  1. 2.x 停更:Netflix 官宣"不玩了",社区一度哭晕;
  2. 替代品内卷 :
    • Nacos:阿里系,同时支持 DNS + RPC + 配置中心,国产之光;
    • Consul:HashiCorp 出品,带 KV 存储 + 多数据中心,Go 写的高并发;
    • Etcd:K8s 御用,强一致,云原生亲儿子;
  3. Spring Cloud 2022 起官方移除了 Netflix 除 Eureka 外的全套 ,但 Eureka 依旧活得好好的,老项目存量之王,面试八股文常驻嘉宾。

七、 FAQ 时间:

Q1 :Eureka 能跨机房吗?
A:能,但延迟高就自我保护疯狂报警,建议双注册 + 双消费(Nacos 的多数据中心更香)。

Q2 :k8s 里还用 Eureka 是不是傻?
A :k8s 自带 DNS + Service,原生就能做服务发现;但老项目无缝迁移、语言异构、灰度场景,Eureka 依旧能顶半边天。存在即合理,别急着喷。

Q3 :怎么优雅下线?
A:

  1. 先发 POST /eureka/apps/{appID}/{instanceID}/status?value=OUT_OF_SERVICE;
  2. 等流量归零,再 shutdown;
  3. 或者直接用 Spring Boot 的 GracefulShutdown + actuator,人间清醒。

八、彩蛋:

当年某大厂双十一, Eureka 集群 TPS 飙到 4w,监控图直接画出心电图,运维大佬边喝咖啡边吐槽:

"这哪是注册中心,分明是心跳检测仪------服务活着,我也活着;服务挂了,我血压 180。"


九、总结一句话:

Eureka 老矣,尚能饭;新人可上 Nacos,老系统安心躺平。

技术选型没有银弹,合适业务 + 能 hold 住 + 半夜不炸,就是牛逼。


关注我,下一篇聊聊《Nacos 真香现场:从 Eureka 无痛迁移踩坑记》,点个赞再走吧,毕竟头发换来的干货。

相关推荐
利威尔xu1 天前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
利威尔xu1 天前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang
骑着蜗牛撵大象3272 天前
Spring Boot 4.1 + Spring AI 2.0:RAG 供文、图谱供关系、MCP 供工具的 Java Agent 平台
java·spring boot·spring·微服务·知识图谱·rag·mcp
code_slave(码畜)2 天前
微服务架构落地:慢 SQL 治理与连接池调优 —— 守住数据库的最后一道防线
数据库·spring boot·sql·spring cloud·微服务·架构
微三云 - 廖会灵 (私域系统开发)3 天前
企业级 SaaS 系统架构设计:单体、微服务还是模块化单体?技术选型实战
微服务·架构·系统架构
shuair4 天前
Spring Cloud 微服务脚手架:Simple Cloud 系统架构设计
spring cloud·微服务·系统架构
CodeGL4 天前
微服务框架——go-zero
微服务·架构·golang
草莓熊Lotso4 天前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
阿俊-全栈开发4 天前
LikeShop 多商户 Java 版商城微服务模块拆分与部署架构演进实践
java·微服务·架构·likeshop开源商城·多商户源码
frjc4 天前
分布式服务拆分实战指南:从底层逻辑到面试话术
微服务·面试·职场和发展