网络宝典
第二套高阶模板 · 更大气的阅读体验

服务发现和注册中心区别:搞懂微服务中的两个关键角色

发布时间:2026-01-21 05:01:19 阅读:0 次

在搭建微服务架构时,经常会听到“服务注册中心”和“服务发现”这两个词。很多人觉得它们是一回事,其实不然。虽然它们紧密配合,但分工明确,就像快递系统里的“地址登记处”和“快递查询系统”。

服务注册中心是干什么的?

你可以把服务注册中心想象成一本动态更新的电话簿。每当一个微服务启动,比如订单服务、用户服务,它就会主动跑到注册中心报到:“我上线了,我的IP是192.168.1.10,端口是8080。”

这个“报到”的过程就是注册。常见的注册中心有 Eureka、Consul、Nacos 等。它们负责记录哪些服务在线、在哪台机器上运行、健康状态如何。如果服务挂了,注册中心还会通过心跳机制检测到并把它从名单中移除。

// 伪代码:服务注册示例
serviceRegistry.register("order-service", "192.168.1.10:8080");

服务发现又是什么?

有了电话簿,还得有人去查。当订单服务需要调用支付服务时,它不会写死对方的IP地址,而是问注册中心:“支付服务在哪?” 这个“问”的过程就是服务发现。

服务发现通常由客户端或负载均衡器完成。比如 Spring Cloud 中的 Ribbon 就会在调用前先向注册中心发起查询,拿到可用的支付服务实例列表,再选择一个发起请求。

// 伪代码:服务发现示例
List<ServiceInstance> instances = serviceDiscovery.getInstances("payment-service");
ServiceInstance target = loadBalancer.choose(instances);

两者的关系:协作但不重叠

注册中心是“存信息”的,服务发现是“取信息”的。没有注册中心,服务发现无处可查;没有服务发现,注册中心里的数据就没人用。它们像车站的“班次公告屏”和“乘客查车”——一个发布,一个获取。

举个生活化的例子:你开了一家新奶茶店,先去工商局登记(注册),之后顾客才能通过地图App搜到你的店(发现)。登记不等于被搜到,但后者依赖前者。

实际架构中如何配合

在典型的微服务流程中:

  • 服务启动 → 向注册中心注册自己
  • 其他服务需要调用它 → 发起服务发现请求
  • 注册中心返回可用实例列表
  • 调用方通过负载均衡选择一个实例发起通信

有些工具如 Nacos 同时支持注册和发现功能,但这不代表两者概念等同。就像智能手机能拍照也能打电话,但相机和通话功能依然是两个模块。