Service Mesh #
服务网格负责管理服务之间的通信流量。它使平台团队能够在无需修改代码的情况下,为集群中的所有服务统一添加可靠性、可观测性和安全性功能。
服务网格与Kubernetes一样,已成为云原生技术栈中至关重要的基础设施组件。
解决的问题 #
在云原生环境中,多个服务需要频繁通信,这带来了流量激增和网络不可靠等问题。为了解决这些挑战,工程师需要实现额外的功能。在服务网格出现之前,这些功能必须嵌入到每个应用程序中,增加了技术债务,并带来了新的故障和漏洞风险。
提供的帮助 #
服务网格在平台层为所有服务统一提供可靠性、可观测性和安全性功能,而无需修改应用程序代码。它兼容任何编程语言,让开发团队可以专注于实现业务逻辑。
提示
传统上,这些功能需要嵌入到每个服务中,导致每次新服务发布或更新时,开发者都需要确保其功能正常运行,这为人为错误提供了空间。而开发者往往更愿意专注于业务逻辑,而不是实现这些通用功能。
对平台负责人而言,这些功能是其核心职责。通过服务网格和API网关,这些功能被平台层统一实现并应用到所有服务,避免了开发者实现平台需求功能的困境。
技术基础 #
服务网格通过服务代理将集群中的所有服务连接在一起,形成一个“网格”。这些代理通过服务网格控制平面进行管理和协调。服务网格允许平台负责人执行通用操作(如流量加密、指标收集)或注入策略,而无需开发者编写复杂逻辑。
本质上,服务网格是一个基础设施层,通过向服务代理网络提供指令来管理服务间通信。其优势在于无需修改应用程序即可实现关键系统功能。
例如,Linkerd使用Linkerd2-proxy “micro proxy”来提升性能和资源效率。这些代理通过 Sidecar(边车)模式附加到服务上,即代理运行在独立容器中,与服务共享同一个 Pod,就像摩托车上的边车一样,独立但紧密协作。
示例
在微服务环境中,单个组件可能出现故障或变慢。没有服务网格时,开发者需要编写自定义逻辑来处理下游故障并设置冷却时间,避免上游服务反复向故障组件发送请求。有了服务网格,这些逻辑在平台层自动完成。
服务网格功能丰富,包括详细指标展示、流量加密、访问控制、插件扩展等。如需了解更多,请参阅服务网格接口规范。
Keywords #
- Service mesh - 服务网格
- Sidecar - 边车
- Data plane - 数据平面
- Control plane - 控制屏面
Projects #
- Istio (graduated)
- Linkerd (graduated)
- Aeraki Mesh (sandbox)
- Kmesh (sandbox)
- Kuma (sandbox)
- Merbridge (sandbox)
- Open Service Mesh (archived)
- Sermant (sandbox)
- Service Mesh Interface (SMI) (archived)
- Service Mesh Performance (sandbox)