解读2017之Service Mesh:群雄逐鹿烽烟起
https://mp.weixin.qq.com/s/ur3PmLZ6VjP5L5FatIYYmg
在过去的2016年和2017年,微服务技术得以迅猛普及,和容器技术一起成为这两年中最吸引眼球的技术热点。而以Spring Cloud为代表的传统侵入式开发框架,占据着微服务市场的主流地位,它甚至一度成为微服务的代名词。
直到2017年年底,当非侵入式的Service Mesh技术终于从萌芽到走向了成熟,当Istio/Conduit横空出世,人们才惊觉:微服务并非只有侵入式一种玩法,更不是Spring Cloud的独角戏!
这一次的新生力量,完全不按照常理出牌,出场就霸道地掀翻桌子,直接摆出新的玩法:Service Mesh,下一代微服务!这一场大战,在 2017 年的最后一个月,终于上演到白热化,被摆上了台面,受到越来越多人关注。往日霸主 Spring Cloud,此时只能沦为看客。
2017 年的 Service Mesh 历程,在平淡中开始,如戏剧般结束,留给我们一个充满想象和憧憬的 2018。让我们一起来回顾这堪称精彩的一年。
Service Mesh 的萌芽期
在我们正式开始 2017 年回顾之前,我们将时间稍微放前一点,回到 2016 年,有些故事背景需要预先交代一下。
虽然直到 2017 年年底,Service Mesh 才开始较大规模被世人了解,这场微服务市场之争也才显现,但是其实 Service Mesh 这股微服务的新势力,早在 2016 年年初就开始萌芽:
2016 年 1 月 15 日,离开 Twitter 的基础设施工程师 William Morgan 和 Oliver Gould,在 GitHub 上发布了 Linkerd 0.0.7 版本,他们同时组建了一个创业小公司 Buoyant,业界第一个 Service Mesh 项目诞生。
2016 年,Matt Klein 在 Lyft 默默地进行 Envoy 的开发。Envoy 诞生的时间其实要比 Linkerd 更早一些,只是在 Lyft 内部不为人所知。
在 2016 年年初,“Service Mesh”还只是 Buoyant 公司的内部词汇,而之后,它开始逐步走向社区:
2016 年 9 月 29 日在 SF Microservices 上,“Service Mesh”这个词汇第一次在公开场合被使用。这标志着“Service Mesh”这个词,从 Buoyant 公司走向社区。
2016 年 10 月,Alex Leong 开始在 Buoyant 公司的官方 Blog 中连载系列文章“A Service Mesh for Kubernetes”。随着“The Services must Mesh”口号的喊出,Buoyant 和 Linkerd 开始 Service Mesh 概念的布道。
在这一年中,第一代的 Service Mesh 产品在稳步推进:
2016 年 9 月 13 日,Matt Klein 宣布 Envoy 在 GitHub 开源,直接发布 1.0.0 版本。
2016 年下半年,Linkerd 陆续发布了 0.8 和 0.9 版本,开始支持 HTTP/2 和 gRPC,1.0 发布在即;同时,借助 Service Mesh 在社区的认可度,Linkerd 在年底开始申请加入 CNCF。
而在这个世界的另外一个角落,Google 和 IBM 两位巨人,握手开始合作,他们联合 Lyft,启动了 Istio 项目。这样,在第一代 Service Mesh 还未走向市场主流时,以 Istio 为代表的第二代 Service Mesh 就迫不及待地上路。
现在我们可以进入主题,开始 2017 年 Service Mesh 发展历程的回顾。
急转而下的 Linkerd
2017 年,Linkerd 迎来了一个梦幻般的开局,喜讯连连:
2017 年 1 月 23 日,Linkerd 加入 CNCF。
2017 年 3 月 7 日,Linkerd 宣布完成千亿次产品请求。
2017 年 4 月 25 日,Linkerd 1.0 版本发布。
可谓各条战线都进展顺利:产品完成 1.0 release,达成最重要的里程碑;被客户接受并在生产线上成功大规模应用,这代表着市场的认可;进入 CNCF 更是意义重大,这是对 Linkerd 的极大认可,也使得 Linkerd 声名大噪,一时风光无量。
需要特别指出的是,Linkerd 加入 CNCF,对于 Service Mesh 技术是一个非常重要的历史事件:这代表着社区对 Service Mesh 理念的认同和赞赏,Service Mesh 也因此得到社区更大范围的关注。
趁热打铁,就在 Linkerd 1.0 版本发布的同一天,创作者继续 Service Mesh 的布道:
2017 年 4 月 25 日,William Morgan 发布博文“What’s a service mesh? And why do I need one?”。正式给 Service Mesh 做了一个权威定义。
然而现实总是那么残酷,这个美好的开局,未能延续多久就被击碎:
2017 年 5 月 24 日,Istio 0.1 release 版本发布,Google 和 IBM 高调宣讲,社区反响热烈,很多公司在这时就纷纷站队表示支持 Istio。
Linkerd 的风光瞬间被盖过,从意气风发的少年一夜之间变成过气网红。当然,从产品成熟度上来说,linkerd 作为业界仅有的两个生产级 Service Mesh 实现之一,暂时还可以在 Istio 成熟前继续保持市场。但是,随着 Istio 的稳步推进和日益成熟,外加第二代 Service Mesh 的天然优势,Istio 取代第一代的 Linkerd 只是个时间问题。
面对 Google 和 IBM 加持的 Istio,Linkerd 实在难有胜算:
Istio 作为第二代 Service Mesh,通过控制平面带来了前所未有的控制力,远超 Linkerd。
Istio 通过收编和 Linkerd 同为第一代 Service Mesh 的 Envoy,直接拥有了一个功能和稳定性与 Linkerd 处在一个水准的数据平面(也就是作为 sidecar 模式部署的 proxy)。
基于 C++ 的 Envoy 在性能和资源消耗上本来就强过基于 Scala/JVM 的 Linkerd。
Google 和 IBM 组合在人力、资源和社区方面的影响力远非 Buoyant 这样的小公司可以比拟。
Linkerd 的发展态势顿时急转而下,未来陷入一片黑暗。出路在哪里?
在一个多月后,Linkerd 给出一个答案:和 Istio 集成,成为 Istio 的数据面板:
2017 年 7 月 11 日,Linkerd 发布版本 1.1.1,宣布和 Istio 项目集成。Buoyant 发表博文“Linkerd and Istio: like peanut butter and jelly”。
这个方案在意料之中,毕竟面对 Google 和 IBM 的联手威胁,选择低头和妥协是可以理解的,只是这里边存在两个疑问:
1、和 Envoy 相比,Linkerd 并没有特别优势,考虑编程语言的天生劣势,Linkerd 想替代 Envoy 难度非常之大。
2、即使替代成功,在 Istio 的架构下,只是作为一个数据平面存在的 Linkerd,可以发挥的空间有限。这种境地的 Linkerd,是远远无法承载起 Buoyant 的未来的。
Linkerd 的这个谜团,直到 2017 年即将结束的 12 月,在 Conduit 发布之后才被解开。
波澜不惊的 Envoy
自从在 2016 年决定委身于 Istio 之后,Envoy 就开始波澜不惊地平稳发展,这和 Linkerd 的跌宕起伏完全不同。
在功能方面,由于定位在数据平面,因此 Envoy 无需考虑太多,很多工作在 Istio 的控制平面完成就好,Envoy 从此专心于将数据平面做好,完善各种细节。在市场方面,Envoy 和 Linkerd 性质不同,不存在生存和发展的战略选择,也没有正面对抗生死大敌的巨大压力。Envoy 在 2017 年有条不紊地陆续发布了 1.2、1.3、1.4 和 1.5 版本,稳步地完善自身,表现非常稳健。
稳扎稳打的 Envoy 在 2017 年一方面继续收获独立客户,一方面伴随 Istio 一起成长。作为业界仅有的两个生产级 Service Mesh 实现之一,Envoy 随后收获了属于它的殊荣:
2017 年 9 月 14 日,Envoy 加入 CNCF,成为 CNCF 的第二个 Service Mesh 项目。
可谓名至实归,水到渠成。作为一个无需承载一家公司未来的开源项目,Envoy 在 2017 年的表现,无可挑剔。
背负使命的 Istio
从 Google 和 IBM 联手决定推出 Istio 开始,Istio 就注定永远处于风头浪尖,无论成败。
Istio 背负了太多的使命:
建立 Google 和 IBM 在微服务市场的统治地位。
为 Google 和 IBM 的公有云打造杀手锏级特性。
在 k8s 的基础上,延续 Google 的战略布局。
Google 在企业市场的战略布局,是从底层开始,一步一步向上,一步一步靠近应用。刚刚大获全胜的 k8s 为 Istio 准备了一个非常好的基石,而 Istio 的历史使命,就是继 k8s 拿下容器编排之后,更进一步,拿下微服务!
2017 年,Istio 稳步向前,先后发布四个版本:
2017 年 5 月 24 日,Istio 0.1 release 版本发布。
2017 年 10 月 4 日,Istio 0.2 release 版本发布。
2017 年 11 月 30 日,Istio 0.3 release 版本发布。
2017 年 12 月 15 日,Istio 0.4 release 版本发布。
在社区方面,Istio 借助 Google 和 IBM 的大旗,外加自身过硬的实力、先进的理念,很快获得了社区的积极响应和广泛支持。包括 Oracle 和 Red Hat 在内的业界大佬都明确表示对支持 Istio。
在平台支持方面,Istio 的初期版本只支持 k8s 平台,从 0.3 版本开始提供对非 k8s 平台的支持。从策略上说,Istio 借助了 k8s,但是没有强行绑定在 k8s 上。
Istio 面世之后,赞誉不断,尤其是 Service Mesh 技术的爱好者,可以说是为之一振:以新一代 Service Mesh 之名横空出世的 Istio,对比 Linkerd,优势明显。同时产品路线图上有一大堆令人眼花缭乱的功能。假以时日,如果 Istio 能顺利地完成开发,稳定可靠,那么这会是一个非常美好、值得憧憬的大事件,它的意义重大:
重新定义微服务开发方式,让 Service Mesh 成为主流技术。
大幅降低微服务开发的入门门槛,让更多的企业和开发人员可以落地微服务。
统一微服务的开发流程,标准化开发 / 运维方式。
奈何,事情的发展总是不会这么简单地如人所愿。Istio 发布之后,试用中就被发现问题较多,0.1 版本时还比较容易被接受,但是接下来的 0.2、0.3 和 0.4,Istio 在可用性上并没有明显的改观,导致迄今在全球范围内都几乎没有听到 Istio 上生产的案例,公司都将其停留在简单试用阶段。
此时再看 Istio 琳琅满目的各种功能,不禁让人疑惑 Istio 的产品策略:为什么一开场就将摊子铺的如此之大?以至于开发时间长达一年 (注意,虽然开源才半年多,但是开源前已经在开发),却无法得到一个稳定可用的版本。
这有悖于互联网产品的开发理念。下边这个经典图片相信大家并不陌生:
从目前情景看,Istio 已经在图上“不应该”的产品迭代路径上走了一年。从 5 月份 0.1 版本发布开始,我们就满心期待,却陷入“过尽千帆皆不是”的尴尬境地:每一次新版本试用后的结果,都不理想。
身处局外,无法了解 Istio 项目开发的背景和真实情况,也自然无法得知为何会如此,我们只能由衷地希望,Istio 能在 2018 年尽快完成计划中的产品开发,实现生产可用。个人意见:哪怕推迟某些特性的实现,也希望能做到主体部分尽快完善。
2018 年 Service Mesh 的整体走势,很大程度取决于 Istio:如果 Istio 能在 2018 年上半年实现生产可用,哪怕是牺牲部分高级特性,也足以推动整个 Service Mesh 向前大步迈进。反之如果进展不顺,市场会呈现观望和等待的态势,也会给竞争对手机会,比如说,下面将要出场的 Conduit。
背水一战的 Conduit
2017 年底的 KubeConf,在 Service Mesh 成为大会热点、Istio 备受瞩目时,Buoyant 公司出人意料地给了踌躇满志又稍显拖沓的 Istio 重重一击:
2017 年 12 月 5 日,Conduit 0.1.0 版本发布,Istio 的强力竞争对手亮相 KubeConf。
Conduit 的整体架构和 Istio 一致,借鉴了 Istio 数据平面 + 控制平面的设计,同时别出心裁地选择了 Rust 编程语言来实现数据平面,以达成 Conduit 宣称的更轻、更快和超低资源占用。
继 Isito 之后,业界第二款第二代 Service Mesh 产品就此诞生。话说得有些拗口,但是一场大战就此浮出水面。Buoyant 在 Linkerd 不敌 Istio 的恶劣情况下,绝地反击,祭出全新设计的 Conduit 作为对抗 Istio 的武器。
需要额外指出的是,作为一家初创型企业,在第一款主力产品 Linkerd 被 Istio 强力阻击之后,Buoyant 已经身陷绝境,到了生死存亡之秋,作为背负公司期望,担负和 Istio 正面抗衡职责的 Conduit,可谓压力巨大。
从目前得到的信息分析,Conduit 明显是有备而来,针对 Istio 当前状况,针锋相对的:
编程语言:为了达成更轻、更快和更低资源消耗的目标,考虑到 Istio 的数据面板用的是基于 C++ 语言的 Envoy,Conduit 跳过了 Golang,直接选择了 Rust,颇有些剑走偏锋的意味。不过,单纯以编程语言而言,在能够完全掌握的前提下,Rust 的确是做 proxy 的最佳选择。考虑到 Envoy 在性能方面的良好表现,Conduit 要想更进一步,选择 Rust 也是可以理解。
架构设计:在借鉴 Istio 整体架构的同时,Conduit 做了一些改进。首先 Conduit 控制平面的各个组件是以服务的方式提供功能的,极富弹性。另外,控制平面特意为定制化需求进行了可扩展设计,可以通过编写 gPRC 插件来扩展 Conduit 的功能而无需直接修改 Conduit,这对于有定制化需求的客户是非常便利的。
产品演进:这是最重要的一点!Conduit 完全吸取了 Istio 的教训,因此它的产品迭代路径会是我们最期待的方式。在本文撰写期间,笔者特意和 Conduit 的 CEO William 深入探讨过这个话题,得到了一个非常令人欣慰的答复:Minimal feature set,prod ready as quickly as possible。
然而,要抗衡 Istio 和其身后的 Google 与 IBM,谈何容易。Conduit 2018 年的发展道路,注定是充满挑战的,艰难险阻可想而知。但是,不得不佩服 Buoyant 公司,以及以 CEO William 为首的那支充满挑战精神的团队,有理想、有追求、有魄力、有勇气!期待他们在 2018 年的表现。
让我们回到 Istio 和 Conduit 的竞争格局。从目前局面看,Istio 先天优势明显,但是产品策略上的选择给了 Conduit 一个难得的机会。接下来的 2018 年,在 Conduit 的威胁和刺激下,希望 Istio 能打起精神,给出一份令大家满意的答卷。期待 Istio 和 Conduit 能在 2018 年形成良性竞争,共同引领 Service Mesh 的大潮。
低调的参与者
2017 年的 Service Mesh,除了业界先驱 Linkerd/Envoy,和后起之秀 Istio/Conduit,还有一些其它的竞争者进入这个市场,只是它们都非常低调。
首先是 nginMesh,来自大名鼎鼎的 Nginx:
2017 年 9 月,在美国波特兰举行的 nginx.conf 大会上,Nginx 宣布了 nginMesh。随即在 GitHub 上发布了 0.1.6 版本。
2017 年 12 月 6 日,nginMesh 0.2.12 版本发布。
2017 年 12 月 25 日,nginMesh 0.3.0 版本发布。
nginMesh 的定位是作为 Istio 的服务代理,也就是替代 Envoy,思路和 Linkerd 之前和 Istio 集成很相似。nginMesh 在发布后的两个多月,GitHub 上提交非常少,直到最近突然发力,先后发布了 0.2 和 0.3 版本。不过 nginMesh 极度低调,GitHub 上的 star 也只有不到 100。
然后是 Kong,但是这个比默默无闻的 nginMesh 更加低调,只是曾经有传闻 Kong 有意 Service Mesh,但是后来没了下文。不过 Kong 的 GitHub 项目介绍里,悄悄地加上了 Service Mesh 的字样:Kong is a ××× Microservice Abstraction Layer (also known as an API Gateway, API Middleware or in some cases Service Mesh)。
在 2017 年,这些低调的参与者,几乎没有引起外界任何注意,也无法预期他们在 2018 年会如何表现。从社区的角度,还是希望有更多的参与者进入 Service Mesh 市场,以推动整个市场的健康发展。
快速升温的国内
2017 年,随着 Servic Mesh 的发展,国内技术社区也开始通过新闻报道 / 技术文章等接触 Service Mesh,但是传播范围和影响力都非常有限。直到年底才剧烈升温,开始被国内技术社区关注:
2017 年 10 月 16 日,在 2017 QCon 上海大会上,我做了一个“Service Mesh:下一代微服务”的演讲,成为 Service Mesh 技术在国内大型技术峰会上的第一次亮相。
2017 年 11 月,国内第一个 Service Mesh 技术社区“Service Mesh 中文网”(http://servicemesh.cn) 成立。
2017 年 12 月,在全球架构师峰会(ArchSummit)2017 北京站上,来自华为的田晓亮做了名为“Service Mesh 在华为云的实践”的分享。
2017 年 12 月 16 日,来自新浪微博的周晶做了名为“微博 Service Mesh 实践”的演讲,分享了 Service Mesh 在微博的落地情况。
此外,作为 Servic Mesh 国内最早的开发和实践者的华为和新浪微博,都积极参与开源。其中新浪微博 Service Mesh 的核心实现,跨语言通信和服务治理已经在 Motan 系列项目中提供,而华为也将稍后开源他们基于 Golang 的 Service Mesh 代码实现。
特别要指出的是,华为目前已经在公有云上将 Service Mesh 作为公共服务提供,这在国内公有云中是第一家。预计随着 Service Mesh 的落地和普及,公有云提供生产级别的 Service Mesh 服务将成为标配。在国外 Google/IBM/Amazon 等公有云都有提供 Service Mesh 的计划,相信国内公有云也会陆续跟进。
展望 2018
2017 年的 Service Mesh 市场,从 Linkerd 的风光无限开始,到 Istio 的横空出世,最后止于 Conduit 的绝地反击,可谓一波三折;产品也经历从第一代的 Linkerd/Envoy,跨越性的演化出第二代的 Istio/Conduit;同时,技术社区的态度也从年初的逐步接受发展到年底的热烈追捧,下面这张 KubeConf 上的图片非常有代表性地展示了社区的热切期望:
然而 Service Mesh 终究是一个新兴的技术,尤其作为未来主流的 Istio/Conduit 迄今还没有实现产品级别可用,因此 2018 年对 Service Mesh 而言,必然不是一帆风顺,必然是充满荆棘和坎坷的。如何实现从技术理念到产品落地,如何实实在在地解决实践中遇到的各种问题,将会是这一年中至关重要的事情。
衷心祝愿 Istio 和 Conduit(也许还有其他的产品)可以在 2018 年快速成长,实现社区期待的功能和可用性,可以真正地实现降低微服务门槛的目标,让 Service Mesh 成为名副其实的下一代微服务。
2018 年的 Service Mesh,值得期望!
解读2017之Service Mesh:群雄逐鹿烽烟起的更多相关文章
- 微服务(Microservices)和服务网格(Service Mesh)架构概念整理
注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...
- 微服务(Microservices)和服务网格(Service Mesh)的架构概念
注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...
- Service Mesh 及其主流开源实现解析(转)
什么是 Service mesh Service Mesh 直译过来是 服务网格,目的是解决系统架构微服务化后的服务间通信和治理问题.服务网格由 sidecar 节点组成.在介绍 service me ...
- 深入解读Service Mesh的数据面Envoy
在前面的一篇文章中,详细解读了Service Mesh中的技术细节,深入解读Service Mesh背后的技术细节. 但是对于数据面的关键组件Envoy没有详细解读,这篇文章补上. 一.Envoy的工 ...
- 深入解读Service Mesh背后的技术细节
在Kubernetes称为容器编排的标准之后,Service Mesh开始火了起来,但是很多文章讲概念的多,讲技术细节的少,所以专门写一篇文章,来解析Service Mesh背后的技术细节. 一.Se ...
- Qcon2017实录|Service Mesh:下一代微服务
https://zhuanlan.zhihu.com/p/30292372 数人云11月Meetup报名开启,看中西方大神如何论道云原生与微服务!本文作者敖小剑老师将在本次Meetup上继续分享Ser ...
- Service Mesh服务网格新生代--Istio(转)
万字解读:Service Mesh服务网格新生代--Istio 官网地址:https://preliminary.istio.io/zh/docs/concepts/security/ Servic ...
- 什么是 Service Mesh
作者|敖小剑 微服务方兴未艾如火如荼之际,在 spring cloud 等经典框架之外,Service Mesh 技术正在悄然兴起.到底什么是 Service Mesh,它的出现能带来什么,又能改变什 ...
- Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh
本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...
随机推荐
- Cocos2D中的纹理(textures)的解释
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- oracle ORA-00917: missing comma 是因为少逗号
oracle ORA-00917: missing comma 是因为少逗号,而且不是网上盛传的空格问题!都是传言误人啊
- Zookeeper实现master选举
使用场景 有一个向外提供的服务,服务必须7*24小时提供服务,不能有单点故障.所以采用集群的方式,采用master.slave的结构.一台主机多台备机.主机向外提供服务,备机负责监听主 ...
- android 开源图表库MPChart最简单使用方法示例教程Demo--折线图 柱状图
转载请注明本文出处:http://blog.csdn.net/wingichoy/article/details/50428246 MPChart是android上一款强大的图表开源库,他可以轻松的绘 ...
- 《java入门第一季》之StringBuffer小案例
这里是针对其反转功能来举的例子,再对比之前写的一篇String类的反转功能,StringBuffer明显提高了代码量,提高了效率. import java.util.Scanner; /* * 把字符 ...
- Cocos2D v2.0至v3.x简洁转换指南(三)
Cocos2D 3.3中的注意事项 如果你在使用Cocos2D 3.3+(是SpriteBuilder 1.3+的一部分)你将不得不替分别的换所有存在的UITouch和UITouchEvent为CCT ...
- BASE64Decoder小解
BASE64Decoder小解 Base64 是网络上最常见的用于传输8Bit 字节代码的编码方式之一,大家可以查看RFC2045 -RFC2049 ,上面有MIME 的详细规范. Base64 要求 ...
- Linux - info
基本上,info与man的用途其实差不多,都是用来查询命令的用法或者是文件的格式.但是与man page一口气输出一堆信息不同的是,info page则是将文件数据拆成一个一个的段落,每个段落用自己的 ...
- ANDROID 中设计模式的采用--创建型模式
所谓模式就是在某一情景下解决某个问题的固定解决方案. 所有的创建型模式都是用作对象的创建或实例化的解决方案. 1 简单工厂模式 创建对象的最简单方法是使用new来创建一个对象,如果只创建一种固定 ...
- DB 查询分析器 6.03 在Windows 8 上安装与运行演示
DB 查询分析器 6.03 在Windows 8 上安装与运行演示 马根峰 ( 广东联合电子服务股份有限公司, 广州 510300) 摘要 ...