写点什么

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

  • 2019-10-18
  • 本文字数:3693 字

    阅读完需:约 12 分钟

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

本文内容整理自 5 月 25 日 在 Kubernetes & Cloud Native Meetup 上海站发表的主题演讲,主要介绍了 Service Mesh 最新的产品动态,分析其发展趋势和未来走向;结合蚂蚁金服的上云实践,阐述在云原生背景下 Service Mesh 的核心价值,以及对云原生落地的关键作用。


内容主要有三个部分:


  1. Service Mesh 产品动态:介绍最近半年 Service Mesh 的产品动态,包括开源项目和云厂商推出的云上服务;

  2. Service Mesh 发展趋势:根据最近的产品动态,总结 Service Mesh 的发展趋势,推断未来的走向;

  3. Service Mesh 与云原生:结合云原生,更好的理解 Service Mesh 的价值和作用。

Service Mesh 产品动态

Istio 1.1 发布

Istio 是目前 Service Mesh 社区最引人注目的开源项目,在今年的 3 月份 发布了期待已久的 Istio 1.1 版本,我们来看看 Istio 最近几个版本的发布情况:


  • 2018 年 6 月 1 日,Istio 发布了 0.8 版本,这是 Istio 历史上第一个 LTS 版本,也是 Istio 历史上变动最大的一个版本;

  • 2018 年 7 月 31 日,Istio 发布了 1.0 版本,号称 “Product Ready”;

  • 然后就是漫长的等待,Istio 1.0 系列以每个月一个小版本的方式一路发布了 1.0.1 到 1.0.6,然后才开始 1.1.0 snapshot 1 到 6,再 1.1.0-rc 1 到 6,终于在 2019 年 3 月 20 日 发布了 1.1 版本,号称 “Enterprise Ready”。


从 Istio 1.0 到 Istio 1.1,中间的时间跨度高达 9 个月!我们来看看经过这漫长的开发时间才发布的 Istio 1.1 版本带来了哪些新的东西:



图中标红的部分,涉及到 Istio 的架构调整,下面将详细介绍 Istio 1.1 版本中带来的架构变化。

Istio 1.1 架构变化

下图是 Istio 1.0 和 Istio 1.1 的架构图对比:



Istio 1.1 的第一个架构变化来自 Galley:在 Istio 1.1 的架构图中增加了 Galley 组件。但是实际上在 Istio 1.0 版本中 Gallay 组件就已经存在,只是当时 Galley 的功能非常简单,只是做配置更新之后的验证(Validation),在 Istio 1.0 的架构图中都没有出现。而在 Istio 1.1 版本之后,Galley 的定位发生了巨大的变化:Galley 开始分担 Pilot/Mixer 的职责。


在 Istio 1.1 版本之前的设计中,Istio 的三大组件 Pilot/Mixer/Citadel 都需要访问 Kubernetes 的 API Server,以获取服务注册信息和配置信息,包括 Kubernetes 原生资源如 service/deployment/pod 等,还有 Istio 的自定义资源(数量多达 50 多个的 CRD) 。这个设计导致 Istio 的各个组件都不得不和 Kubernetes 的 API Server 产生强绑定,不仅仅代码大量冗余,而且在测试中也因为需要和 Kubernetes 的 API Server 交互导致 Pilot/Mixer 模块测试困难。


为了解决这个问题,在 Istio 1.1 之后,访问 Kubernetes 的 API Server 的工作将逐渐交给 Galley 组件,而其他组件如 Pilot/Mixer 就会和 Kubernetes 解耦。



这个工作还在进行中,目前 Istio 的 CRD 已经修改为由 Galley 读取,而 K8s 的原生资源(Service / Deployment / Pod 等),暂时还是由 Pilot 读取。


为了方便在各个组件中同步数据,Istio 引入了 MCP(Mesh Configuration Protocol)协议。在 Istio 1.1 版本中,Pilot 通过 MCP 协议从 Galley 同步数据。MCP 是受 xDS v2 协议(准确说是 aDS)的启发而制定的新协议,用于在 Istio 各模块之间同步数据。


Istio 1.1 的第二个架构变化来自于 Mixer,在 Istio 1.1 版本中,推荐使用 Out-of-Process Adapter,即进程外适配器。Istio 预计下一个版本将弃用 In-Proxy Adapter,目前所有的 Adapter 都将改为 Out-of-Process adapter。


什么是 In-Proxy Adapter?下图是 Mixer 的架构图,在 Istio 的设计中,Mixer 是一个独立进程,Proxy 通过远程调用来和 Mixer 交互。而 Mixer 的实现了 Adapter 模式,定义了 Adapter API,然后内建了数量非常多的各种 Adapter。这些 Adatper 的代码存放在 Mixer 代码中,运行时也在 Mixer 的进程内,因此称为 In-Process Adapter。



In-Process Adapter 的问题在于所有的 Adapter 的实现都和 Mixer 直接绑定,包括代码和运行时。因此当 Adapter 需要更新时就需要更新整个 Mixer,任意一个 Adapter 的实现出现问题也会影响整个 Mixer,而且数量众多的 Adapter 也带来了数量众多的 CRD。为此,Istio 1.1 版本中通过引入 Out-of-Process Adapter 来解决这个问题。



Out-of-Process Adapter 以独立进程的方式运行在 Mixer 进程之外,因此 Out-of-Process Adapter 的开发/部署和配置都可以独立于 Mixer,从而将 Mixer 从 Adaper 的实现细节中解脱出来。


但是,Out-of-Process Adapter 的引入,会导致新的性能问题:原来 Mixer 和 In-Process Adapter 之间是方法调用,现在改成 Out-of-Process Adapter 之后就变成远程调用了。而 Mixer 一直以来都是 Istio 架构设计中最大的争议,之前 Proxy 和 Mixer 之间的远程调用,已经造成非常大的性能瓶颈,而引入 Out-of-Process Adapter 之后远程调用会从一次会变成多次(每个配置生效的 Out-of-Process Adapter 就意味着一次远程调用),这会让性能雪上加霜。


总结 Out-of-Process Adapter 的引入:架构更加的优雅,性能更加的糟糕。


在 Istio 1.1 为了架构而不顾性能的同时,Istio 内部也有其他的声音传出,如正在规划中的 Mixer v2。这个规划最重要的决策就是放弃 Mixer 独立进程的想法,改为将 Mixer 的功能合并到 Envoy 中,从而避免 Envoy 和 Mixer 之间远程调用的开销。关于 Mixer 的性能问题和 Mixer 合并的思路,蚂蚁金服在去年六月份开始 SOFAMesh 项目时就有清晰的认识和计划,时隔一年,终于欣喜的看到 Istio 开始正视 Mixer 的架构设计问题并回到正确的方向上。


目前 Mixer v2 的规划还处于 Review 状态,实现方式尚未有明确决定。如果要合并 Mixer,考虑到目前 Mixer 是基于 Golang 编写,而 Envoy 是基于 C++,这意味着需要用 C++ 重写所有的 Adapter,工作量巨大,恐怕不是短期之内能够完成的。当然也有另外一个新颖(或者说脑洞大开)的思路:引入 Web Assembly(WASM)。目前 Envoy 在进行支持 Web Assembly 的尝试,如果成功,则通过 Web Assembly 的方式来支持 Mixer Adapter 不失为一个好选择。

其他社区产品动态

最近,CNCF 在筹建 Universal Data Plane API (UDPA/通用数据平面 API)工作组,以制定数据平面的标准 API,为 L4/L7 数据平面配置提供事实上的标准。Universal Data Plane API 的创意来自 Envoy,实现为 xDS API。而目前 xDS v2 API 已经是数据平面 API 的事实标准,这次的 UDPA 会以 xDS v2 API 为基础。工作组的初始成员来自包括 Envoy 和 gRPC 项目的代表,蚂蚁金服也在积极参与 UDPA 工作组,目前还处于非常早期的筹备阶段。


Linkerd2 在 2019 年 4 月 17 日 发布了最新的稳定版本 Linkerd 2.3 版本。Linkerd2 是目前开源产品中唯一正面对抗 Istio 的存在,不过在国内知名度不高,使用者也很少。比较有意思的是,开发 Linkerd2 的初创公司 Buoyant 最近的 B 轮融资来自 Google 的投资部门。

云厂商的产品动态

随着 Service Mesh 技术的发展,和各方对 Service Mesh 前景的看好,各大主流云提供商都开始在 Service Mesh 技术上发力。


首先看 AWS,在 2019 年 4 月,AWS 宣布 App Mesh GA。App Mesh 是 AWS 推出的 AWS 原生服务网格,与 AWS 完全集成,包括:


  • 网络(AWS cloud map)

  • 计算(Amazon EC2 和 AWS Fargate)

  • 编排工具(AWS EKS,Amazon ECS 和 EC2 上客户管理的 k8s)



App Mesh 的数据平面采用 Envoy,产品非常有创意的同时支持 VM 和容器,支持多种产品形态,如上图所示。(AWS App Mesh 的更多详细内容,请浏览文章用 AWS App Mesh 重新定义应用通讯 [5])


Google 的打法则是围绕 Istio 。首先是在 2018 年底推出了 Istio on GKE,即"一键集成 Istio",并提供遥测、日志、负载均衡、路由和 mTLS 安全能力。接着 Google 又推出 Google Cloud Service Mesh,这是 Istio 的完全托管版本,不仅仅提供 Istio 开源版本的完整特性,还集成了 Google Cloud 上的重要产品 Stackdriver 。


近期,Google 推出 Traffic Director 的 beta 测试版本,Traffic Director 是完全托管的服务网格流量控制平面,支持全局负载均衡,适用于虚拟机和容器,提供混合云和多云支持、集中式健康检查和流量控制,还有一个非常特别的特性:支持基于流量的自动伸缩。



(Google Traffic Director 的详细介绍,请查看文章 Google Traffic Director 详细介绍 [6])


微软则推出了 Service Fabric Mesh。Azure Service Fabric 是 Microsoft 的微服务框架,设计用于公共云,内部部署以及混合和多云架构。而 Service Fabric Mesh 是 Azure 完全托管的产品,在 2018 年 8 月 推出预览版。



上周(5 月 21 号)最新消息,微软在 KubeConf 上推出 Service Mesh Interface。SMI 是在 Kubernetes 上运行服务网格的规范,定义了由各种供应商实现的通用标准,使得最终用户的标准化和服务网格供应商的创新可以两全其美,SMI 预期将为 Service Mesh 带来了灵活性和互通性。


SMI 是一个开放项目,由微软、Linkerd、HashiCorp、Solo、Kinvolk 和 Weaveworks 联合启动;并得到了 Aspen Mesh、Canonical、Docker、Pivotal、Rancher、Red Hat 和 VMware 的支持。



2019-10-18 18:161737

评论

发布
暂无评论
发现更多内容

教你如何用CSS修改图片颜色

千锋IT教育

面试官:说说Java并发运行中的一些安全问题

Java-fenn

Java

史上最全大厂面试题复盘总结,全会进大厂拿35K没问题(Java岗)

收到请回复

Java 云计算 开源 架构 编程语言

女生参加java培训前景如何

小谷哥

深圳web前端培训费用多少?

小谷哥

6个月我从小厂逆袭,薪资上涨70%,坐上美团L8技术专家!

收到请回复

Java 云计算 开源 架构 编程语言

字节二面:Redis 的大 Key 对持久化有什么影响?

程序知音

Java 数据库 redis 字节跳动 面试

拼多多、蚂蚁、字节2022届(大三)后端研发暑期实习

Java-fenn

Java

阿里分布式全栈手册,整整1000页,太顶了

程序知音

Java 架构 分布式 阿里 后端技术

经典面试题-Appium原理

霍格沃兹测试开发学社

与未来对话:PingCAP 用户峰会亮点全放送

PingCAP

#TiDB

Go 语言为什么建议定义零值可用的结构体?

Java-fenn

Java

京东云无线宝产品部负责人张晓东 : 京东云无线宝与开源的亲密关系 | 《大神详解开源 BUFF 增益攻略》讲座回顾

Apache IoTDB

物联网 京东云 企业号九月金秋榜

如何快速开发灵活自定义报表

力软低代码开发平台

技术分享 | 常用测试策略与测试手段

霍格沃兹测试开发学社

【荣耀帐号服务】手把手教你快速上手快应用接入

荣耀开发者服务平台

数据库 前端 手机 服务器 honor

【Go】go build失败,报方法undefined

非晓为骁

Go 编译 go build

技术分享 | 白盒测试方法论

霍格沃兹测试开发学社

【CSM认证】11月1-4日在线工作日班 | 全国招生

ShineScrum

项目管理 Scrum Scrum Master 敏捷项目管理

在武汉Java培训费用多少

小谷哥

快速构建基本的SpringCloud微服务

Java-fenn

Java

如何通过C#/VB.NET在Excel中隐藏或显示网格线

在下毛毛雨

C# .net Excel

mysql优化---如何搭建mysql的主从关系和mycat中间件

Java快了!

C++ 左值引用与 const 关键字

Java-fenn

Java

如何成为一个好的设计师 or 程序员?

宇宙之一粟

读书笔记 设计 技巧 知识 9月月更

大数据培训机构如何选择

小谷哥

LED显示屏人屏互动未来已来

Dylan

户外LED显示屏 led显示屏厂家

Java培训可以从事哪些工作

小谷哥

21个大厂Offer?这份“Java核心技能精讲”轻松收割

收到请回复

Java 云计算 开源 架构 编程语言

深入浅出用户态协议栈

C++后台开发

后台开发 TCP/IP 网络协议栈 C++开发 用户态协议栈

经典面试题-定位不到元素

霍格沃兹测试开发学社

Service Mesh 发展趋势:云原生中流砥柱(上)_文化 & 方法_敖小剑_InfoQ精选文章