Netflix 实现零配置服务网格的探索
Netflix 最近在其博客中描述了如何通过与 Envoy 社区和 Kinvolk 合作,为开源代理 Envoy 实现了一项新功能——按需集群发现(On-Demand Cluster Discovery, ODCDS),从而实现了零配置服务网格。
背景:Netflix 的进程间通信(IPC)架构
Netflix 的进程间通信(IPC)是其技术栈中的关键部分。自 2010 年将所有基础设施迁移到 AWS 云平台后,Netflix 开发了两大工具来简化 IPC 管理:
- Eureka:用于服务发现,通过虚拟 IP(VIP)和安全虚拟 IP(SVIP)抽象目标服务的名称,确保通信的安全性。
- Ribbon:用于客户端负载均衡和通信,作为代码库实现。
尽管这一架构在过去几十年中运行良好,但随着 Netflix 技术栈的演进,传统的 IPC 架构面临以下挑战:
- Netflix 的 IPC 技术栈现在包括 REST、GraphQL 和 gRPC 等多种协议。
- 服务架构从纯 Java 演变为多语言架构。
- IPC 客户端逐渐增加了许多功能。
迁移到服务网格的动机
为了解决上述挑战,Netflix 决定迁移到服务网格架构,并选择使用 Envoy 作为核心组件。Envoy 能够集中 IPC 功能,同时保持跨语言客户端的简洁性。然而,Envoy 要求代理配置中指定集群,这对于 Netflix 的动态架构来说是一个问题,因为服务可能需要与数十个集群通信,且集群拓扑结构不断变化。
按需集群发现的实现
为了应对集群拓扑的频繁变化,Netflix 团队评估了多种方案,最终决定实现按需集群发现(ODCDS)。该功能允许代理在首次连接时动态获取集群信息。具体流程如下:
- 客户端请求进入 Envoy。
- 根据 Host 提取目标集群。如果集群已知,则直接处理请求。
- 如果集群不存在,暂停请求。
- 向控制平面的集群发现服务(CDS)端点发送请求,生成基于服务配置和 Eureka 注册信息的自定义 CDS 响应。
- Envoy 获取集群信息,并通过端点发现服务(EDS)拉取端点信息。
- 客户端请求恢复。
- Envoy 使用负载均衡算法选择一个端点并处理请求。
低延迟优化
尽管上述流程在毫秒级别内完成,但某些场景需要更低的延迟。为此,Netflix 提出了以下优化方案:
- 服务预定义其通信的集群,或在首次请求前预先建立连接。
- 在代理启动时,基于历史请求模式预推送集群信息。
总结
通过实现按需集群发现,Netflix 成功构建了零配置服务网格,显著简化了动态环境中的 IPC 管理。这一创新不仅提升了系统的灵活性,还为其他企业提供了宝贵的参考经验。更多细节可参考 Netflix 的博客文章 Zero Configuration Service Mesh with On-Demand Cluster Discovery。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。