知识卡片
服务发现的自理式与代理式两种权衡
内容
服务发现有两种方式:自理式让每个微服务自己查询注册表再直接调用,压力分散到各节点,不会有单点瓶颈;代理式引入独立负载均衡系统代为发现和路由,微服务实现更简单,但流量都经过代理,一旦故障影响全部调用,流量大时代理易成瓶颈,通常还得做成集群,反引入新复杂度。发散:这是”胖客户端 vs 中心网关”在服务发现场景的体现——复杂度放调用方换无单点,收敛到中心节点换简单,但要额外担高可用成本。
参考来源
- 位置:《从0开始学架构》第41章《36|微服务架构最佳实践-基础设施篇》"服务发现"一节(源文件:_epub-src/OEBPS/Text/part0040_split_006.html、part0040_split_007.html)
- 结论依据:原文明确"自理式服务发现实现比较简单……由于每个微服务都承担了服务发现的功能,访问压力分散到了各个微服务节点,性能和可用性上不存在明显的压力和风险",而代理式"第一个风险是可用性风险,一旦LOAD BALANCER系统故障,就会影响所有微服务之间的调用……需要设计成集群的模式,但LOAD BALANCER集群的实现本身又增加了复杂性"。
- 原始内容:自理式服务发现实现比较简单……访问压力分散到了各个微服务节点,性能和可用性上不存在明显的压力和风险……代理式的方式……第一个风险是可用性风险,一旦LOAD BALANCER系统故障,就会影响所有微服务之间的调用……LOAD BALANCER系统需要设计成集群的模式,但LOAD BALANCER集群的实现本身又增加了复杂性。