知识卡片

服务发现网关路由负载均衡服务容错在一次调用中的职责交叉

结构图卡

内容

“从服务集群中找到合适的服务来调用”这句话背后其实是四个容易混淆的独立 概念在协同工作,用一次跨地域购书出库请求就能看清它们各自的边界:请求 先把服务名”warehouse”解析到最近机房的地址(服务发现,可能由DNS智能 线路、服务注册中心的Region/Zone、或负载均衡的可用区功能来实现);到达 广州机房后,网关按URL特征把外网地址转换成内网集群入口地址(网关路由); 内网集群中有多个warehouse实例,负载均衡器按某种策略(随机/轮询/最小 连接数)选中一个具体实例来响应(负载均衡);如果选中的实例返回500错误, 系统按预置策略把请求转发给另一个健康实例(服务容错,即故障转移/快速 失败)。这四步在概念上边界清晰,但实践中职责常有交叉——比如”根据请求 物理位置分配机房”这个动作,本质上是”根据请求特征(地理位置)做路由”, 可能被DNS服务器、服务注册中心或负载均衡器中的任何一个环节实现,不存在 “服务发现只管发现、网关只管路由”这种泾渭分明的绝对边界。理解这四个 概念不是要死记它们的定义差异,而是要理解一次调用背后确实需要依次解决 “去哪找”“怎么进内网”“内网具体找谁”“找错了怎么办”这四类不同性质的问题, 即使实现上边界模糊,问题本身是清楚的。

结构图

sequenceDiagram
    participant U as 用户请求
    participant DNS as DNS/服务发现
    participant GW as 网关
    participant LB as 负载均衡器
    participant S as 服务实例们
    U->>DNS: warehouse服务名
    DNS-->>U: 解析到最近机房地址(服务发现)
    U->>GW: 请求到达机房网关
    GW->>GW: 按URL特征转换为内网集群入口(网关路由)
    GW->>LB: 转发给内网负载均衡器
    LB->>S: 选中node1响应(负载均衡)
    S-->>LB: 500错误
    LB->>S: 转发给node2(服务容错/故障转移)
    S-->>U: 200成功

参考来源

- 位置:《凤凰架构:构建可靠的大型分布式系统》第7章"从类库到服务" 7.3节"客户端负载均衡"(源文件:_epub-src对应OEBPS/Text/chapter92.xhtml) - 结论依据:原文用广州机房出库服务调用的完整六步过程,逐步对应服务 发现、网关路由、负载均衡、服务容错四个概念,并指出这些职责在实际 系统中常有交叉(如地理位置路由可能由DNS/注册中心/负载均衡器任一环节 实现),直接支撑本卡片的结构梳理。 - 原始内容:以上过程从整体上看,步骤1、2、3、5,分别对应了服务发现、 网关路由、负载均衡和服务容错,从细节上看,其中部分职责又是有交叉的, 并不是服务注册中心就只关心服务发现,网关只关心路由,负载均衡器只 关心流量负载均衡。