2016 年之后兴起的 Service Mesh 技术区分为 Proxy Service Mesh 和 Proxyless Service Mesh,至于二者之间的差异可参见本文 2019 年的一篇文章 Service Mesh 形态刍议。目前比较流行的 Service Mesh 技术形式是 Proxy Service Mesh,其比较有代表性的组件有数据面的 envoy 和控制面的 Istio。 一些 Service Mesh 技术文档宣称,将服务框架的序列化协议、通信能力、服务治理能力沉淀到服务网格的代理(如 envoy 这类数据面 sidecar)中,可有如下收益:
服务框架 SDK 会变的非常轻量,甚至完全沉淀到 sidecar 中。
多语言、多协议和多种通信方式之间的差异将被磨平。
统一流量控制,提升系统的弹性。
统一监控设施,提高可观测性。
统一安全可信认证,提升安全性。
升级过程业务无感,做到平滑升级,提升可靠性。
提升业务版本迭代速度。
快速打通不同技术治理体系之间的差异。
在 Mesh 和 非 Mesh 模式之间快速切换。
有人可能据此误以为 Service Mesh 技术可将业务和服务框架的复杂性消灭于无形,将 Istio + sidecar 形式为代表的服务网格可以定义为 Service Mesh 的终极形态。
上图定义一种不同于 istio + Envoy 的另一种可能的 Proxy Service Mesh 进化路径。该 Service Mesh 模型下的 sidecar 不仅仅是一个 Local Proxy,更应该是一个提供各个中间件技术栈标准能力的 Service Proxy。 Service Proxy 可能是一个集状态管理、event 传递、消息收发、分布式追踪、搜索、配置管理、缓存数据、旁路日志传输等诸多功能于一体的 Proxy, 也可能是分别提供部分服务的多个 Proxy 的集合,但对上提供的各个服务的 API 是不变的。
3. Application Mesh
或者更进一步,可以把 Service Proxy 拆分为两个 Proxy:
仍然以现有的以劫持网络流量的 sidecar 形式存在的 Local Proxy。
另一个专门提供各个 Service API 的 Application Proxy。
Application Proxy 可以是一个独立存在的进程或者容器,也可以是一个可被应用调用嵌入式的 SDK 库。无论是 Proxy 形式还是 Proxyless 形式,这都是一种新形态的 Service Mesh,可被称之为 Application Mesh。 Application Proxy 可以依赖于 Local Proxy,亦可不依赖。如人们常说的三级缓存其实也是一种 Application Mesh 形态,从进程内的 local cache 到本机(容器、虚拟机 or 物理机)cache proxy 一直回溯到 cache cluster, 应用只需要从 local cache 处获取数据即可。 当然,Application Mesh 亦可不依赖于特定的基础设施平台,包括 k8s,本文就不展开讨论了。 除了 Service Mesh 技术带来的收益,Application Mesh 具有如下更多的收益:
新形态带来的商业价值就是无云平台依赖,各平台间相互之间的竞争就不会停留在某种独有的核心技术优势上,而是在同一技术体系下不断降低服务成本,提供更好的用户体验、更强的服务能力与更亲民的价格。 能够且愿意实现这种终态 proxy 的组织当然不是各中小型业务厂家,所以统一了这些标准服务 API 的 Proxy 之下的应该是提供这些标准服务的各大云厂商。越早向统一服务模型靠拢的云厂商越快得利,越相信自己私有服务能力的云厂商越孤立。
3. 初创公司的机会
基于大厂提供的基础设施,可以孕育出一个独立的 service proxy 生态:一些第三方的初创厂家专职提供云原生中间件解决方案。 基于新形态的中间件方案,Low Code 或者 No Code 技术才能更好落地。单体时代的 IDE 才能更进一步 -- 分布式时代的 IDE,基于各种形态中间件的标准 API 之对这些中间件的能力进行组合,以 WYSIWYG 方式开发出分布式应用。
4. 打破大厂内部藩篱
对一些大厂组织内部而言,可借助真正形态的 Service Mesh 技术栈可以统一大经济实体内部技术栈,打破人为的各种异构隔离,提升研发运维效率和物理资源利用效率,降低整体人力与资源的交付运维成本。
5. 走向新时代
以统一技术形态的 Service Mesh 为基础的云原生中间件技术体系真正发起起来,在其之上的 Serverless 才有更多的落地场景,广大中小企业才能分享云原生时代的技术红利,业务开发人员的编码工作就会越来越少,编程技术也会越来越智能--从手工作坊走向大规模机器自动生产时代。 欢迎对 apache/dubbo-go 项目有兴趣的同学欢迎钉钉扫码加入交流群【或搜索钉钉群号 31363295】:
作者简介
于雨(github @AlexStocks),dubbogo 社区负责人,一个有十多年服务端做着基础架构和中间件研发一线工作经验的程序员,陆续参与和改进过 Redis/Pika/Muduo/dubbo-go/Sentinel-go 等知名项目,目前在蚂蚁金服可信原生部从事容器编排和 service mesh 工作。 推荐阅读: