分布式架构

分布式应用的未来 — Distributionless

2019-08-16  本文已影响0人  25e88d6d7cbb

在技术变革推动社会发展这一时代背景下,大量支撑规模化分布式应用的技术创新、创造与创业应用而生,Could Native、Service Mesh、Serverless 等技术词汇在全球范围内引发了大量的解读与讨论。本文整理自阿里巴巴高级技术专家李云在 QCon 北京 2019 的分享,带你一起看清其背后的本质与驱动力,更好地把握技术趋势并建立自己的思考逻辑。

围绕解决大规模分布式应用技术挑战的话题总能引起广泛的关注,CNCF 所提出的云原生概念将这一话题推向了前所未有的新高度。

就目前的行业发展现状来看,云原生是分布式应用走向未来的关键路径。此外,出现了 CDF 从 CI/CD 的角度帮助解决未来分布式应用周边的的挑战等现象。我们不禁要问:“分布式应用的未来究竟是什么?”面对这一问题,具象化地给出所有人都能理解一致的描绘在现阶段是不现实的,但给出一个相对模糊但又抓住重点的概念或许并不困难,作者用 Distributionless(无分布式)去表达。

在全球范围内带来变革的技术,其背后不只是技术因素,还有商业利益的共同演绎。理解背后的驱动力能让我们更准确地抓住新技术的优势和思考未来发展的可能终局,这对于 CTO、CIO 等各类技术决策者来说至关重要。

解决复杂问题的终极范式

技术最终是服务于商业和社会的,但在“条条大路通罗马”的情形下,如何判定一个技术比另一个技术更优呢?或者说,在技术向前演进的过程中,有没有固定的范式可被我们掌握,从而将之运用于理解新技术的优势呢?这个终极范式在作者看来就是“抽象后分而治之”。

探索复杂规模问题的解决方法从来都是动态、渐进的,会经历不断认识问题和寻找更优解的持续迭代过程,期间伴随着部分“旧概念”被打破和“新概念”被重塑的双重行为。

比如,在实践微服务软件架构之初,一开始大家所关注的焦点是“如何拆”、“拆多大”以及技术与组织架构的配称(康威定律),核心思路是通过将单体应用通过分拆去变成更小的软件发布单元,以解决单体应用的软件迭代速度慢的问题(背后导致了商业价值创造慢的后果)。

然而,当微服务改造工作完成且微服务的个数达到一定的规模时,各服务之间的连接、排错、安全保障、监控等问题就逐渐地浮出了水面,那时行业深刻地体会并认识到微服务软件架构其实是将复杂度从单体应用内转移到了微服务之间。

随着分布式应用规模的进一步增大,所涉开发和运维人员增长到一定数据时,效率问题再一次变得像单体应用时代那样不可小视。不过,这一次所面临的问题域和规模比那时大了很多。

要解决微服务软件架构所带来的新问题,需要探索更加体系化、规范化和全局一致的解决方案,那就不可避免地会采用新的概念切分手法去构建新的解决方案,期间不可并避免地会打破旧概念并创造出新概念。

新旧概念相比之下,存在如下差异:

“抽象后分而治之”为技术人提供了一种单纯从技术视角去分析一种技术是否优于另一种技术的方法,能一定程度避免被“老酒换新瓶”那样的新概念所蛊惑。以这一范式去看待围绕云原生所出现的 Kubernetes、Istio、Knative 等技术,相信能因这些新技术的概念切分独特、更具体系化和有更高的技术视野而对其先进性加以认可。

云原生的驱动力及其本质

新技术得不到推广应用并最终消亡的例子举不胜举。云原生概念从提出到今天在全球范围的如火如荼只经历了短短的四年,背后的驱动力是什么很值我们思考。此外,云原生技术的概念目前仍相当模糊,理解其所解决的本质问题才能使技术团队在发展的道路上正视趋势,以及让技术决策者更好地规划技术发展方向。

从商业的角度,AWS 是无可争议的云计算市场的领导者,但其技术影响力远不如 Google。虽说 Google 在技术实力上是全球的领导者,但在云计算市场的发展上曾带给人的傲慢感而最终没能在市场表现上与 AWS 相庭抗礼。在面对市场占有率落后的情形下,Google 发起了 CNCF 基金会,通过提出云原生技术致力于打造厂商中立(vendor-neutral)的开源软件事实标准,希望有机会以另一种路径在市场中获得突围。“厂商中立”又意味着什么?

输出技术产品的厂商与其客户之间一直存在一种利益博弈——技术锁定和防锁定。当厂商所输出的技术无法在短期内立竿见影地给客户创造业务价值时,这种博弈的痕迹就会更加明显,否则客户在短期内也乐于被锁定。从厂商的角度,通过技术锁定客户就会有更高的要价空间和持续的利润来源。反之,如果客户做到了技术的防锁定,则有更强的议价能力和选择自由,否则会担心成为“砧板上的鱼肉”。长远来看,如何保持这种博弈力量的平衡是打造一个繁荣技术或商业生态的关键。这样的案例在业已成熟的通信行业很早就出现了且仍在发生。

通信行业有一个标准化组织叫 3GPP,这个组织中有来自中国移动、中国联通、中国电信这样的各国电信运营商,也有来自华为、ZTE 这样的全球通信设备制造商。3GPP 通过制定规范并要求所有设备制造商全面遵循,使得运营商有从哪家采购通信设备的自由。回到云计算市场,在通讯行业的规范变成了大家共同构建和采纳的开源软件,准确说是事实标准的开源软件。

事实标准的关键不是开源,还得加上所有云厂商都采纳,这一点对于提供云基础技术的云厂商来说特别关键。具体的一个例子是,Kubernetes 是云原生中的基础设施并得到了所有云厂商的采纳而提供相应的云产品。当一个客户采购了 AWS 的 Kubernetes 产品时,可以随时方便地迁移到阿里云上而不用担心技术锁定问题。不可否认,云厂商提供云产品与用户自建是完全不同级别的可用性保障维度,这一点是很多客户乐于花钱购买云产品的关键。

技术防锁定的利益博弈只要与客户做交流就一定会看到,而这一力量也被 CNCF 发现并运用于推广云原生技术,且成为了云原生技术发展的核心驱动力,使得云原生技术在相当短的时间内得到了来自云厂商和云客户的大力支持。必须指出,AWS 作为云计算的行业领导者很少讲技术锁定这事,那是因为没有必要宣传这一点而让到手的客户从自己手中流失,那并非因为 AWS 没有看到客户对技术锁定的担心,从其积极跟进云原生技术也不难佐证这一点。

Google 能否通过云原生的推广而在未来的云计算市场获得更大的份额虽说未知,但那不是我们关心的重点。重点在于,云原生作为行业认可的技术趋势,我们如何迎合和规划未来的技术发展,以及群策群力去打造一个健康、蓬勃发展的云计算产业生态。

理解云原生核心驱动力的价值在于,云厂商在为客户提供云原生技术方案时,需要充分地考虑到不要给客户带去技术锁定,但可以考虑通过产品做粘性。锁定是指“用了我你就无法方便地离开我”,而粘性是指“用了我可以给你带去不一样的价值,而你也可以随时方便地离开我”。

只理解云原生的核心驱动力还不够,还得掌握它所解决的本质问题是什么。作者归纳为云原生所解决的本质问题是应用(或“服务”,本文这两词可以互换使用)的弹性、易用性和移植性这层层递进的“三性”。

应用的弹性是指即便在最严苛的业务场景下,技术仍具备给客户创造业务价值的能力。换句话说,客户使用了某个技术解决方案后,他可以持续有效地运用该产品去创造业务价值。从技术的角度,弹性包含了微服务软件架构、充分解耦、高可用、异地多活、限流、熔断、降级、不可变基础设施等内容,以及支持应用的快速扩缩容能力。

第二个解决的本质问题是易用性。如果只解决了应用的弹性而没有解决易用性,那么为了运用技术去支撑业务价值创造所需投入的人力和时间会是企业所面临的下一个沉重负担,最终在技术的运用和价值创造上无法体现敏捷性和经济性。易用性对于云产品的用户和客户来说,代表了良好的开发和运维效率。

良好的开发效率意味着使用者(客户侧的开发者)只需关心最少的概念和写最少的代码,这就需要云产品在打造之时很好地围绕使用者的心智和能力水平去设计,通过让技术之间做尽可能的无缝连接、对技术细节做良好的抽象甚至彻底屏蔽去降低使用门槛。良好的运维效率则指,只用很少的几个人就可以运维庞大的集群,整个分布式应用的发布、故障发现和排错都很高效。

上图中,作者在易用性这块罗列了 DevOps、GitOps、Cloud IDE 和 CI/CD 等内容。其中的 GitOps 被认为是下一代的 DevOps,让运维工作变得与写代码的方式一样,将 Git 仓库作为运维工作的“the single source of truth”,这对于多云、混合云和多集群部署是非常有价值的。Git 所具备的版本管理能力让运维工作变得更加可溯与可控。总的说来,易用性解决的是软件开发效率、工程质量和人力成本问题。

第三个解决的本质问题是应用的移植性。多云(注:指同时使用多个公有云)和混合云(注:指同时使用公有云和专有云)被 Gartner 认为是未来企业 IT 的重要战略。延着该战略,终态得做到一个分布式应用的代码零改动就能方便地部署到不同的云上(当然,配置可以不同)。逻辑上,要实现应用的可移植性,则应用中不应包含任何与云平台相关的代码,那些代码需要完全下沉到云平台中,实现与应用与云平台的完全解耦。要做到那些代码在所有的云平台上都可用,则需要相关的基础技术是被所有云厂商采纳的,这是一项技术是否是“事实标准”的关键。

对于客户来说,实现应用移植性的价值在于,除了解决防止被云厂商锁定的问题,还让自由搭配各云厂商上的技术和成本优势成为了可能。对于那些关系到国计民生的国家级或国际化发展的应用来说,也让满足多云部署的政策合规要求变得简单。

整个云原生技术所关注的都是通过降本增效,以更好、更快、更经济的方式去帮助客户创造价值,这一点也是分布式应用的终极技术挑战。

上图的左侧,作者列出了 CNCF 对于云原生的官方中文定义,其中使用橙色和红色高亮的内容,与作者在这里所表达的核心驱动力和所解决的本质问题是同意但不同样的表达。

云原生的技术趋势

简单说来,云原生的技术趋势是围绕应用的可移植性问题,以一致性为目的,通过分层去解决。上图的左侧列出了五个层次,右侧则示例了对应的部分开源软件。最上层的 Cloud Portability 与前面讲的应用的移植性是同一回事。

图中存在 Service Portability 和 Network Portability 两个不同的层。前者解决的是 OSI 网络层次模型中 4 到 7 层的可移植性问题,比如 Service Mesh 的开源软件 Istio 所解决的就是这个层次的问题;后者解决的是 2 至 3 层的网格连通性问题,开源的 Network Service Mesh 就是专注于这一层。从 Network Portability 的角度,未来的网络连通性不再是用 IP 和网络掩码去描述,而将采用类似 RPC 中的服务注册与发现那样,基于被部署的应用的 YAML 文件中所描述的网络要求去构建。

与云原生同行

在云原生的技术大潮下,作者从应用开发者和云平台开发者的角度给出一些建议。

从应用开发者的角度来说

对于云平台开发者来说

Kubernetes、Service Mesh 和 Serverless

这张图能帮助我们理解 Kubernetes 和 Serverless 的位置关系。Kubernetes 今天仍在发展,包含了 CaaS 和 PaaS 两大块的内容,且有做厚的趋势。平台技术做厚的好处在于,会对下面的基础技术的演进有更强的掌控力,也会因为做厚而使得上面的应用变轻,让应用更加聚焦于业务逻辑本身而无需过于关心解决分布式应用连接、安全、控制和遥测等共性问题。上图还展示了 service 这个概念从 IaaS 贯穿至 PaaS 层,让层与层之间因为 service 这个概念而能流畅地衔接,从软件设计的角度体现优雅与一致性。这张图中并没有看到 Service Mesh 的影子,下图以另一种视角进行了展示。

图中示例了数据平面和控制平面。Service Mesh 的 Sidecar 形成了连接 PaaS 和 SaaS 两层服务的数据总线,能方便地完成位于这两层服务的互联互通(即服务注册与发现),结合控制平面,实现所有服务的控制(流量灰度、限流、熔断、降级等)、观测(日志、指标和调用链路跟踪),以及服务与服务之间的安全保障。控制平面则贯穿了所有层,是整个分布式生态系统的控制中枢。图中并没有示例出另外两个同样重要的开发平面和运维平面。

Kubernetes、Service Mesh 和 Serverless 三者共同演绎不同层次的封装和向上屏蔽下面的细节。Kubernetes 引入了不同的设计模式,实现对各种云资源全新、有效和优雅的抽象和管理模式,让集群的管理和应用发布变成了件相当轻松且不易出错的事。

被广泛采用的微服务软件架构将分布式应用的各种复杂度迁移到了服务之间,如何通过全局一致、体系化、规范化和无侵入的手段进行治理就变成了微服务软件架构下至关重要的内容。Service Mesh 通过将各服务所共用和与环境相关的内容剥离到部署于每个服务边上的 Sidecar 进程而轻松地做到了。这一剥离动作使得服务与平台能充分解耦而方便各自演进与发展,也使得服务变轻而有助于改善服务启停的及时性。

云原生是天然支持多语言的——各技术团队可以使用自己最善长、最高效的编程语言去创造业务价值和做业务探索。Service Mesh 因为将那些服务治理相关的逻辑剥离到了 Sidecar 中且作为独立进程,所以 Sidecar 所实现的功能天然地支持多语言,为上面的服务采用多语言开发创造了更为有利的条件。

通过 Service Mesh 对整个网络的服务流量进行技术收口,让异地多活这样涉及流量调度的系统工程实现起来更加优雅、简洁与有效,也能更加方便地实现服务版本升级时的灰度、回滚而改善安全生产质量。由于技术收口,给服务流量的治理和演进、排错、日志采集的经济性等疑难问题创造了新的发展空间。

Serverless 对客户的最大价值有两点。

有部分人对 Service Mesh 和 Serverless 存在这样的困惑:有了 Serverless 之后还需要 Service Mesh 吗?作者看来,两都并非矛盾体。Service Mesh 是解决微服务软件架构下服务与服务之间复杂度问题的,只要采纳了微服务软件架构就应当使用 Service Mesh。Serverless 解决的是免服务器运维的问题,一个运用于微服务软件架构的 Serverless 解决方案,应当包含 Service Mesh 的内容,只不过对于终端的开发者很可能感知不到而已。

Distributionless 的内涵及发展趋势

云原生是分布式应用当下重要的发展路径,其终态应当是 Distributionless。背后的含义有两点。

Distrubutionless 的发展趋势是:

对于云平台厂商来说,Distributionless 的关键竞争力来自运维平面的产品化和开发平面无缝整合的能力。这两块是直接触达客户和用户体现技术以更快、更好交付客户价值的关键。相信“体验为王”在未来分布式应用领域同样适用。



本文作者:至简(李云)

原文链接

本文为云栖社区原创内容,未经允许不得转载。

上一篇 下一篇

猜你喜欢

热点阅读