微服务注册中心 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 无痛迁移踩坑记》,点个赞再走吧,毕竟头发换来的干货。

相关推荐
fanly113 天前
Surging AI Agent 完整产品介绍
微服务·microservice
蝎子莱莱爱打怪9 天前
XZLL-IM干货系列 04|Netty 长连接实战:Pipeline 怎么排、心跳怎么跳、连接怎么管
后端·微服务·面试
SamDeepThinking10 天前
Java微服务练习方式
java·后端·微服务
米丘13 天前
微前端之 Web Components 完全指南
微服务·html
霸道流氓气质16 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
霸道流氓气质16 天前
Spring Boot 微服务性能优化完全指南
spring boot·微服务·性能优化
地瓜伯伯16 天前
从MESI缓存一致性协议讲透synchronized的底层
java·spring boot·spring·spring cloud·微服务·springcloud
Devin~Y16 天前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
递归尽头是星辰16 天前
AI 访问数据仓库:从直连到微服务化
数据仓库·人工智能·微服务·dataagent·ai数据治理
就改了17 天前
Windows 环境 SkyWalking 完整实操教程
windows·微服务·skywalking