行至2022,我们该如何看待服务网格? | 社区征文 - 文章 - 开发者社区 - 火山引擎
熟悉服务网格和 Istio 概念的读者朋友们,可以跳过这一章节,直接进入下一章节。
Service Mesh 一词最早由开发 Linkerd 的 Buoyant 公司提出,并于 2016 年 9 月29 日第一次公开使用了这一术语,并被翻译成“服务网格”,逐步在国内传播开来。William Morgan,Buoyant CEO,对 Service Mesh 这一概念定义如下:
A service mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application. In practice, the service mesh is typically implemented as an array of lightweight network proxies that are deployed alongside application code, without the application needing to be aware.
翻译成中文如下:
服务网格是一个专门处理服务通讯的基础设施层。它的职责是在由云原生应用组成服务的复杂拓扑结构下进行可靠的请求传送。在实践中,它是一组和应用服务部署在一起的轻量级的网络代理,并且对应用服务透明。
Istio 是一个开源的服务网格实现产品,一经推出就备受瞩目,成为了各大厂商和开发者争相追捧的对象。Istio 官方文档是这样来定义自己的:
它是一个完全开源的服务网格,以透明的方式构建在现有的分布式应用中。它也是一个平台,拥有可以集成任何日志、遥测和策略系统的 API 接口。Istio 多样化的特性使你能够成功且高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。
从官方定义我们可以看出,Istio 提供了一个完整的解决方案,可以以统一的方式去管理和监测你的微服务应用。同时,它还具有管理流量、实施访问策略、收集数据等方面的能力,而所有的这些都对应用透明,几乎不需要修改业务代码就能实现。有了 Istio,你几乎可以不再需要其他的微服务框架,也不需要自己去实现服务治理等功能。只要把网络层委托给 Istio,它就能帮你完成这一系列的功能。简单来说,Istio 就是一个提供了服务治理能力的服务网格。
好的,前面背景交代清楚了,现在可以开始正文了。
Istio 会是服务网格领域的事实标准吗?我觉得今天我可以给一个答案了,NO。
Istio 2017 年 5 月发布第一个版本 v0.1,从发布 v1.0 开始得到大规模关注,发布 v1.5 做了控制面架构的大调整,后持续迭代,每三个月发布一个大版本,截止日前,已经发布了 v1.12 了。Istio 支持丰富的流量治理策略,具有丰富的可观测性集成能力,且积极拥抱变化,迈向架构简约主义,增强易用性,提供对虚拟机的支持等。
Istio 是一款优秀的开源软件,具有极高的社区活跃度和强大的社区生态,也具备比较优秀的架构设计,这一点毋庸置疑。但是,有一个缺陷,也是比较致命的缺陷,Istio 不是从企业中大规模落地验证后开源出来的,Istio 是从出生就是一个开源软件,Istio 是一个理想型的开源软件(譬如强调流量劫持的无侵入性)。
软件架构没有银弹,往往是取舍。在设计之初,Istio 考虑的是普适性和功能的完备性,支持流量管理、安全、可观测性等多个维度的功能设计,并且随着项目的发展,这个功能不断增强,其实带来的损害就是性能,以及海量实例场景下 CPU 与 内存的巨量消耗。
我们可以看到,Istio 在很多实例规模比较小的公司或者业务团队,是可以逐步落地和推广的,但是一旦上了体量,问题就暴露出来了。早期 mixer 组件带来的性能问题尚且不谈,毕竟已经废弃了,但是 iptable 的流量劫持机制,在一定程度上来讲,就是在大规模公司落地的拦路虎。目前 Istio 使用 iptables 实现透明劫持,主要存在以下三个问题: