1.技术特点
服务网格(ServiceMesh)是分布式应用在微服务软件架构之上发展起来的新技术,旨在将那些微服务间的连接、安全、流量控制和可观测等通用功能下沉为平台基础设施,实现应用与平台基础设施的解耦。这个解耦意味着开发者无需关注微服务相关治理问题而聚焦于业务逻辑本身,提升应用开发效率并加速业务探索和创新。换句话说,因为大量非功能性从业务进程剥离到另外进程中,服务网格以无侵入的方式实现了应用轻量化,图1展示了服务网格的典型架构。
图1 服务网格的典型架构
在这张架构图中,服务A调用服务B的所有请求,都被其下的服务代理截获,代理服务A完成到服务B的服务发现、熔断、限流等策略,而这些策略的总控是在控制平面(Control Plane)上配置。
从架构上,以开源的Istio服务网格为例,其可以运行在虚拟机或容器中,Istio的主要组件包括Pilot(服务发现、流量管理)、Mixer(访问控制、可观测性)、Citadel(终端用户认证、流量加密);整个服务网格关注连接和流量控制、可观测性、安全和可运维性。虽然相比较没有服务网格的场景多轮4个IPC通信的成本,但整体调用的延迟随着软硬件能力的提升而并不会带来显著的影响,特别是对于白毫秒级别的业务调用而言可以控制在2%以内。从另一方面,服务化的应用并没有做任何改造,就或得了强大的流量控制能力、服务治理能力、4个9(99.99%)以上高可用、容灾和安全等能力,加上业务的横向扩展能力,整体收益仍然是远大于额外IPC通信支出。
2.主要技术
2017年发起的服务网格Istio开源项目,清晰定义了数据平面(有开源软件Envoy承载)和管理平台(Istio自身的核心能力)。Istio为微服务架构提供了流量管理机制,同时亦为其他增值功能(包括安全性、监控、路由、连接管理与策略等)创造了基础。
除了Istio外,也有Linked、Consul这样相对小众的ServiceMesh解决方案,与Istio不同的是,它们在功能上不如Istio完整。
Linked在数据平面采用了Rust编程语言实现了linked-proxy,控制平面与Istio一样采用Go语言编写。最新的性能测试数据显示,Linked在时延、消耗方面比Istio更具优势。
Consul在控制面上直接使用ConsulServer,在数据面上可以选择性的使用Envoy。
Conduit作为Kubernetes的超轻量级ServiceMesh,其目标是成为最快、最轻、最简单且最安全的ServiceMesh。它使用Rust构建了快速、安全的数据平面,用Go开发了简单强大的控制平面,总体设计围绕着性能、安全性和可用性进行。它能透明地管理服务之间的通信,提供可测性、可靠性、安全性和弹性的支持。虽然与Linked相仿,数据平面是在应用代码之外运行的轻量级代理,控制平面是一个高可用的控制器,然而与Linked不同的是,Conduit的设计更加倾向于Kubernetes中的低资源部署。