1.4 什么是服务网格
像Envoy这样的服务代理可以为我们在云环境中运行的服务架构添加重要的功能。在给定工作负载目标的情况下,每个应用程序都可以针对代理的行为方式有自己的需求或配置。随着应用程序和服务数量的增加,配置和管理大量的代理可能会变得困难。此外,在每个应用程序实例中放置这些代理将为构建有趣的高阶功能提供机会,否则我们将不得不在应用程序本身中实现这些功能。
服务网格是一种分布式应用程序基础设施,它负责以透明的、进程外的方式代表应用程序处理网络流量。图1.8显示了服务代理如何形成数据平面,所有的流量都是通过这个数据平面来处理和观察的。数据平面负责建立、保护和控制通过网格的流量。数据平面的行为由控制平面配置。控制平面是网格的大脑,它为运维人员提供了操纵网络行为的API。数据平面和控制平面一起提供了云原生架构所必需的重要功能:
• 服务弹性。
• 可观测性指标。
• 流量控制能力。
• 安全性。
• 策略实施。
图1.8 应用层代理(数据平面)和管理组件(控制平面)位于同一位置的服务网格架构
服务网格通过实现重试、超时和熔断等功能来承担服务通信失败的责任。它还能够通过处理服务发现、自适应和区域感知的负载均衡、健康检查等功能来处理不断发展的基础设施拓扑结构。由于所有的流量都通过网格,运维人员可以显式地控制流量。例如,如果想要部署应用程序的新版本,我们可能只希望暴露其一小部分,比如1%的实时流量。有了服务网格,我们就有能力做到这一点。当然,在服务网格中控制的逆过程是要理解它当前的行为。由于流量通过网格,我们能够通过追踪诸如请求峰值、延迟、吞吐量、故障等指标来捕获关于网络行为的详细信息。我们可以使用这种遥测技术描绘出系统中正在发生的事情。最后,由于服务网格在应用程序两端控制网络通信,它可以增强安全性,比如使用双向认证的传输层加密;具体地说,使用双向传输层安全(mTLS)协议。
服务网格为服务运维人员提供了所有这些功能,几乎不用更改应用程序代码和依赖关系。有些功能需要与应用程序代码进行少量协作,但我们可以避免大型的、复杂的库依赖关系。有了服务网格,你使用什么应用程序框架或编程语言来构建应用程序都没关系;这些功能被一致且正确地实现,服务团队可以更加快速、安全、自信地实现和测试交付物。