微服务发现详解(图文全面总结)

微服务是大型架构的核心,下面我重点详解微服务发现@mikechen

什么是微服务发现

微服务发现是指在微服务架构中,服务实例能够在运行时动态地找到其他服务实例的过程。

微服务发现详解(图文全面总结)

每个服务实例启动时会将自己的网络地址、端口号、健康状态等信息注册到一个集中的服务注册中心。

其他需要调用该服务的服务,则通过查询服务注册中心获取目标服务的最新实例信息,实现动态定位和通信。

 

为什么需要微服务发现

在微服务架构中,服务通常有多个实例。

且实例数量动态变化(增加或减少),服务位置也会频繁变动。

微服务发现详解(图文全面总结)

没有服务发现机制,调用方需要硬编码或者配置服务地址,导致维护困难,且难以实现高可用和负载均衡。

服务发现解耦了服务调用方与被调用方的具体位置,实现了服务的动态管理和调用,提升了系统的灵活性、扩展性和稳定性。

 

微服务客户端实现

服务发现主要分为两种实现方式:客户端和服务端。

微服务发现详解(图文全面总结)

我首先,谈谈客户端实现。

实现方式:服务实例启动向注册表(如Consul、Nacos)注册。

消费者直接查询注册表并在客户端实现负载均衡(轮询、权重、熔断等)。

优点:请求路径短(直接调用目标实例)。

客户端可实现智能路由(本地缓存、重试、熔断);去中心化,注册中心压力较小。

缺点:客户端实现复杂,需在每个调用方维护发现与负载策略。

客户端与注册中心耦合,更新策略需同步到多端;对跨语言或异构环境支持工作量较大。

典型实现:

  • Netflix Eureka(Spring Cloud Netflix);

  • Nacos(默认也是客户端发现模式);

  • Etcd(gRPC 生态);

 

服务端发现

实现方式:客户端请求,发送给统一反向代理或负载均衡器。

比如:NGINX、HAProxy、Kubernetes Service + kube-proxy、Envoy,由代理查询注册信息并转发到后端实例。

微服务发现详解(图文全面总结)

优点:

  • 客户端极简,不需要感知发现逻辑;

  • 支持多语言调用;

  • 易于集中控制与策略治理(由代理层统一管理)。

缺点:

  • 多一跳代理层(性能损耗);

  • 代理层成为系统单点,需要 HA;

  • 实现复杂度较高。

每种实现都有适用场景,选择时需结合系统规模、性能要求和复杂度做权衡。

 

常见服务发现组件对比

微服务发现详解(图文全面总结)

实现方式 组件 语言生态 一致性模型 健康检查 典型场景 优点 缺点
Eureka 客户端发现 Java AP(最终一致性) 客户端心跳 Spring Cloud 简单高效、无中心化依赖 已停止维护(Netflix不再更新)
Consul 服务端发现 多语言 CP(强一致性) 主动探测 多语言微服务 健康检查强大、支持DNS 架构略复杂
Nacos 客户端发现 Java AP + CP 可选 主动+被动结合 Spring Cloud Alibaba 支持动态配置 + 注册 对云原生支持较弱
Zookeeper 客户端发现 Java CP 临时节点 Dubbo、Hadoop 稳定可靠 API 繁琐,性能一般
Etcd 服务端发现 Go CP 无原生探测 Kubernetes 高一致性、云原生 不提供直接注册API

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧