Service Mesh 发展趋势:云原生中流砥柱(下)

阅读数:444 2019 年 10 月 18 日 18:16

Service Mesh 发展趋势:云原生中流砥柱(下)

Service Mesh 发展趋势

在分享完最近半年 Service Mesh 产品的动态之后,我们来分析探讨 Service Mesh 的发展趋势。

趋势 1:上云 + 托管

在微服务 / 容器这些年的发展历程中,我们会发现一个很有意思(甚至有些哭笑不得)的现象:

Service Mesh 发展趋势:云原生中流砥柱(下)

  • 为了解决单体的复杂度问题,我们引入微服务架构;
  • 为了解决微服务架构下大量应用部署的问题,我们引入容器;
  • 为了解决容器的管理和调度问题,我们引入 Kubernetes;
  • 为了解决微服务框架的侵入性问题,我们引入 Service Mesh;
  • 为了让 Service Mesh 有更好的底层支撑,我们又将 Service Mesh 运行在 k8s 上。

在这个过程中,从单个应用(或者微服务)的角度看,的确自身的复杂度降低,在有底层系统支撑的情况下部署 / 维护 / 管理 / 控制 / 监控等也都大为简化。但是站在整个系统的角度,整体复杂度并没有消失,只是从单体分解到微服务,从应用下沉到 Service Mesh,复杂度从总量上不但没有减少,反而大为增加。

解决这个问题最好的方式就是 上云,使用 托管 版本的 k8s 和 Service Mesh,从而将底层系统的复杂度交给云厂商,而客户只需要在云的基础上享受 Service Mesh 技术带来的使用便利和强大功能。

前面我们分享产品动态时,可以看到目前 Google / AWS / 微软 这三巨头都已经推出了各自的 Service Mesh 托管产品,而在国内,阿里云 / 华为云等也有类似的产品推出,我们蚂蚁金服也将在稍后在金融云上推出 SOFAMesh 的云上托管版本。在这里,我总结为一句话:

几乎所有的主要公有云提供商都在提供(或者准备提供)Service Mesh 托管方案。

趋势 2:VM 和容器混用

第二个趋势就是 VM 和容器混用,即 Service Mesh 对服务的运行环境的支持,不仅支持容器(尤其指 k8s),也支持虚拟机,而且支持运行在这两个环境下的服务相互访问,甚至直接在产品层面上屏蔽两者的差异。

比如 Google 的 Traffic Director 产品:

Service Mesh 发展趋势:云原生中流砥柱(下)

AWS 的 App Mesh 产品:

Service Mesh 发展趋势:云原生中流砥柱(下)

都是在产品层面直接提供 VM 和容器混用的支持,不管应用是运行在 VM 上还是容器内都可以支持,而且可以方便的迁移。

趋势 3:混合云和多云支持

混合云和多云支持最近正成为一个新的技术热点和商业模式,甚至 Google Cloud 都喊出口号,要 “All in Hybrid Cloud”!
Google Traffic Director 旗帜鲜明的表达了 Google Cloud 对混合云的重视:

Service Mesh 发展趋势:云原生中流砥柱(下)

下图是 Google Traffic Director 给出的一个应用改造示例:从单体结构转为微服务架构,从私有云转为公有云加私有云的混合云模式。

Service Mesh 发展趋势:云原生中流砥柱(下)

Service Mesh 毫无疑问是实现上述转型并提供混合云和多云支持的一个非常理想的解决方案。

趋势 4:和 Serverless 的结合

Service Mesh 技术和 Serverless 技术是工作在不同纬度的两个技术:

  • Service Mesh 技术的关注点在于服务间通讯,其目标是剥离客户端 SDK,为应用减负,提供的能力主要包括安全性、路由、策略执行、流量管理等。
  • Serverless 技术的关注点在于服务运维,目标是客户无需关注服务运维,提供服务实例的自动伸缩,以及按照实际使用付费。

理论上 Service Mesh 技术和 Serverless 技术并没有冲突的地方,可以结合使用。事实上目前业界也开始出现这个趋势,而融合的方式有两种:

  1. 在 Serverless 中引入 Service Mesh:典型如 Knative 项目和 Knative 的 Google Cloud 托管版本 Google Cloud Run,通过引入对容器的支持和使用 Istio,Knative 将 Serverless 的支持扩展到 Function 之外,在极大的扩展 Serverless 适用范围的前提下,也将服务间通讯的能力引入到 Serverless。
  2. 在 Service Mesh 中引入 Serverless:典型如 Google Traffic Director 产品,在提供 Service Mesh 各种能力的同时,支持按照流量自动伸缩服务的实例数量,从而融入了部分 Serverless 的特性。

对于 Serverless 和 Service Mesh 的结合,我们展望未来形态:未来应该会出现一种新型服务模式,Serverless 和 Service Mesh 合二为一。只要将服务部署上来,就自动可以得到 Service Mesh 的服务间通讯能力和 Serverless 的无服务器运维。在蚂蚁金服,我们将这理解成为是未来云原生应用的终态之一,正在积极探索其落地的实际方式。

Service Mesh 发展趋势:云原生中流砥柱(下)

趋势 5:Mesh 模式延伸

回顾一下 Service Mesh 模式的核心,其基本原理在于将客户端 SDK 剥离,以 Proxy 独立进程运行;目标是将原来存在于 SDK 中的各种能力下沉,为应用减负,以帮助应用云原生化。

遵循这个思路,将 Service Mesh 的应用场景泛化,不局限于服务间的同步通信,就可以推广到更多的场景:特征是有网络访问,而是通过客户端 SDK 来实现。

在蚂蚁金服的实践中,我们发现 Mesh 模式不仅仅适用于服务间同步通讯,也可以延伸到以下场景:

  • Database Mesh:数据库访问
  • Message Mesh:消息机制
  • Cache Mesh:缓存

以上模式的产品蚂蚁金服都在探索中,相关的产品正在开发和尝试落地。社区也有一些相关的产品,比如 Database Mesh 方面张亮同学在力推的 Apache Shardingsphere [7] 项目。
通过更多的 Mesh 模式,我们可以覆盖更多的场景,从而实现让应用在各个方面都做到减负,而不仅仅是 Service Mesh 对应的服务间通讯,从而为后续的应用云原生化奠定基础。

趋势 6:标准化,不锁定

云原生的一个重要主张,就是希望在云上为用户提供一致的用户体验,提倡标准化,避免供应商绑定(Not Lock-In)。

从前面分享的 Service Mesh 产品动态可以看出,目前 Service Mesh 市场上出现了众多的供应商和产品:开源的、闭源的、大公司出的、小公司出的。市场繁荣的同时也带来了市场碎片化的问题——所有围绕业务应用的外围工作,比如通过 Service Mesh 对流量进行控制,配置各种安全 / 监控 / 策略等行为,以及在这些需求上建立起来的工具和生态系统,却不得不牢牢的绑死在某个具体的 Service Mesh 实现上,所谓”供应商锁定”。其根本问题在于各家实现不同,又没有统一标准。因此,要想解决上述问题,就必须釜底抽薪:解决 Service Mesh 的标准化问题。

就在最近这一个月,Service Mesh 社区出现了两个推动标准化的大事件:

  1. CNCF 筹建 Universal Data Plane API (通用数据平面 API)工作组,计划以 xDS v2 API 为基础制定数据平面的标准 API,工作组的初始成员来自包括 Envoy 和 gRPC 项目的代表(可以理解为 Google 为首);

  2. 微软在 KubeConf 上推出 Service Mesh Interface,准备定义在 Kubernetes 上运行服务网格的规范,为 Service Mesh 带来了灵活性和互通性。SMI 由微软牵头,联合 Linkerd,HashiCorp,Solo,Kinvolk 和 Weaveworks。

为了方便理解这两个标准,我为大家准备了一张图:

Service Mesh 发展趋势:云原生中流砥柱(下)

其中,Universal Data Plane API 是数据平面的标准,控制平面通过这个 API 来控制数据平面的行为。而 Service Mesh Interface 是控制平面的标准,上层的应用 / 工具 / 生态体系通过 Service Mesh Interface 来实现跨不同的 Service Mesh 实现为最终用户提供一致性的体验。

当然这两个标准化 API 都刚刚起步,而且,标准化的工作通常不仅仅是技术问题,涉及到复杂的利益关系,具体未来走向现在难于推断,只能密切关注。

发展趋势分析

我们总结一下上面列出的 Service Mesh 最近的 6 个发展趋势:

Service Mesh 发展趋势:云原生中流砥柱(下)

这些趋势都和云有关,核心在于让云来提供能力,包括:

  • 让云承担更多职责
  • 提供更高抽象
  • 适用更多场景
  • 减少应用负担:实现应用轻量化

最终实现让业务应用专注业务的战略目标。

对于 Service Mesh 技术未来的走向,我的看法是:Service Mesh 技术必然不是孤立的自行发展,而是在云原生的大环境下,与云原生的其他技术、理念、最佳实践一起相互影响、相互促进、相互支撑、共同发展。云原生是一个庞大的技术体系,Service Mesh 需要在这个体系中获得各种支撑和配合,才能最大限度的发挥自身的优势。

Service Mesh 与云原生

在最后一段,我们来谈谈 Service Mesh 技术和云原生的关系,也就是本次分享的标题所说的:云原生中流砥柱。凭什么?

什么是云原生?

在解释之前,首先问一个问题:什么是云原生?相信这个问题很多同学都问过,或者被问过,每个人心里可能都有自己的理解和表述。在今年年初,我也特意就这个问题问了自己,然后尝试着给出了一个我的答案:

云原生指 “原生为云设计”,具体说就是:应用原生被设计为在云上以最佳方式运行,充分发挥云的优势。

Service Mesh 发展趋势:云原生中流砥柱(下)

关于云原生的理解,以及对这句话的详细阐述,这里不详细展开。

Service Mesh 的核心价值

关于 Service Mesh 的核心价值,我个人的理解,不在于 Service Mesh 提供的玲琅满目的各种功能和特性,而是:实现业务逻辑和非业务逻辑的分离,将非业务逻辑的功能实现,从客户端 SDK 中剥离出来,放到独立的 Proxy 进程中,这是 Service Mesh 在技术实现上走出的第一步,也是至关重要的第一步:因为这一步,实现了业务逻辑和非业务逻辑的分离,而且是最彻底的物理分离,哪怕需要为此付出一次远程调用的代价。

而这一步迈出之后,前面就是海阔天空:

  • 业务逻辑和非业务逻辑分离之后,我们就可以将这些非业务逻辑继续下沉
  • 下沉到基础设施,基础设施可以是基于 VM 的,可以是基于容器和 k8s 的;也可以是 VM 和容器混合
  • 基础设施也可以以云的形式提供,可以是公有云、私有云,也可以是混合云、多云;
  • 可以选择云上托管,完全托管也好,部分托管也好,产品形态可以很灵活

总结说,业务逻辑和非业务逻辑的分离:

  • 为下沉到基础设施提供可能
  • 为上云提供可能
  • 为应用轻量化提供可能

注:这里说的上云,指的是上云原生 (Cloud Native) 的云,而不是上云就绪 (Cloud Ready) 的云。

Mesh 化是云原生落地的关键步骤

在过去一年中,蚂蚁金服一直在努力探索云原生落地的方式,在这个过程中,我们有一些感悟,其中非常重要的一条就是:Mesh 化是云原生落地的关键步骤。

Service Mesh 发展趋势:云原生中流砥柱(下)

如上图所示:

  • 最下方是云,基于 k8s 和容器打造,提供各种基础能力,这些能力有一部分来自传统中间件的下沉
  • 在云上是 Mesh 层,包含 Service Mesh 以及我们前面提到的各种扩展的 Mesh 模式,实现通信的标准化
  • 在通过 Mesh 剥离非业务功能并下沉之后,应用实现了轻量化,传统的 App 和新兴的微服务都可以受益于此
  • 更进一步,轻量化之后的业务应用,其工作负载在瘦身减负之后变得相当的干净,基本只剩业务逻辑,包括传统的 App,以 Container 形式运行的服务和新颖的 Function,这些负载在往 Serverless 形态转换时相对要轻松很多

配合 Serverless 技术领域最新的技术潮流和产品发展(如以 Knative 项目为代表,Serverless 不再仅仅是 Function 形式,也支持 BaaS 等偏传统的工作负载),Mesh 化为现有应用转型为 Serverless 模式提供助力。

在这里我们再分享一下蚂蚁金服对未来中间件产品发展的感悟,我们认为中间件的未来在于 Mesh 化,并融入基础设施,如下图所示:

Service Mesh 发展趋势:云原生中流砥柱(下)

左边是传统的中间件形态,在云原生时代,我们希望将非业务功能从传统中间件的富客户端中剥离出来,然后将这些能力以及这些能力背后的中间件能力,下沉到基础设施,下沉到云。而中间件产品也会融入基础设施,如图中右边所示。未来的中间件将作为基础设施和云的一部分,而 Mesh 则成为连接应用和基础设施以及其他中间件产品的桥梁。

更重要的是:业务应用因此而实现轻量化,在剥离各种非业务功能之后,业务应用就实现了只关注业务逻辑的战略目标,从而实现从传统应用到云原生应用的转型。

总结:通过 Service Mesh 技术,我们实现了业务逻辑和非业务逻辑的分离,为应用的轻量化和云原生化提供可能;并通过将非业务逻辑的各种功能下沉到基础设施和云,极大的增强了基础设施和云的能力,为云原生的落地提供了极大助力。

因此,我们认为:Service Mesh 技术将在云原生落地中扮演了非常重要的作用,不可或缺。

Service Mesh 发展展望

最后再次展望一下 Service Mesh 的未来发展。

左边是 Service Mesh 发展初期的最重要的两个原始动力:多语言支持和类库升级。关于这两点,最近这两年中介绍和推广 Service Mesh 理念和产品的同学基本都讲过,但是今天我想指出的是:这只是 Service Mesh 的起点,而远不是 Service Mesh 的终点。

Service Mesh 的未来,不会停留在仅仅满足多语言支持和类库升级,而是跟随云原生的大潮,解决各种实际需求,同时又尽量维持上层业务应用的简单直白。

Service Mesh 发展趋势:云原生中流砥柱(下)

在这次分享的最后,我想给大家一个留一个课外作业,有心的同学可以尝试一下:如果您想更深入的理解 Service Mesh 的价值,想对 Service Mesh 未来的发展方向有更清晰的认识,尤其是希望能通过自身的思考和感悟来理解 Service Mesh 而不是简单的被灌输(包括被我灌输),那么请尝试独立的做如下思考:

  1. 抛开左边的这两点,不要将思维局限在这个范围内;

  2. 考虑云原生的大背景,结合您自身对云原生的理解,和对云的期望;

  3. 针对右边的 Service Mesh 的六个趋势,忘记我前面讲述的内容,只考虑其背后的实际场景和客户需求,以及这个场景带来的业务价值,然后认真对比使用 Service Mesh 和不使用 Service Mesh 两种情况下的解决方案;

  4. 请在上述思考的过程中,更多的从业务应用的角度来看待问题,假设你是那个云上的应用(还记得前面图上的小 baby 吗?),你会希望被如何对待。

希望这样的思考能让您有所收获。

本文转载自公众号蚂蚁金服科技(ID:Ant-Techfin)。

原文链接:

https://mp.weixin.qq.com/s/Yzs95lIkdGAe-ZN4ICI7nQ

评论

发布