服务网格从总体架构上来讲比较简单,由一堆紧挨着各项服务的用户代理,外加一组任务管理流程组成。在服务网格中,代理被称为数据层或数据平面(Data Plane),管理流程被称为控制层或控制平面(Control Plane)。数据层截获不同服务之间的调用并对其进行处理;控制层不仅可以协调代理的行为,而且可以通过为运维人员提供API,操控和测量整个网络。
更进一步地说,服务网格是一个专用的基础设施层,旨在 “在微服务架构中实现可靠、快速和安全的服务间调用”。它不是一个“服务”的网格,而是一个“代理”的网格,服务可以插人这个“代理”的网格中,从而使网络抽象化。在典型的服务网格中,这些代理作为一个 Sidecar(边车)被注入每个服务部署中。服务不直接通过网络调用服务,而是调用它们本地的 Sidecar代理,而 Sidecar代理又代表了服务管理请求,从而封装了服务间通信的复杂性。相互连接的Sidecar代理实现了所谓的数据平面,这与用于配置代理和收集指标的服务网格组件(控制平面)形成对比。
总而言之,Service Mesh的基础设施层主要分为两部分:控制平面与数据平面。当前流行的两款开源服务网格Istio 和 Linkerd 实际上都是这种构造。
控制平面的特点:
数据平面的特点: