04.云原生

Cloud Native 云原生架构

云原生是通过构建团队、文化和技术,利用自动化和架构来管理系统的复杂性和解放生产力。 — Joe Beda,Heotio CTO,联合创始人

服务架构衍化

Pivotal 是云原生应用的提出者,并推出了 Pivotal Cloud Foundry 云原生应用平台和 Spring 开源 Java 开发框架,成为云原生应用架构中先驱者和探路者。早在 2015 年 Pivotal 公司的 Matt Stine 写了一本叫做迁移到云原生应用架构的小册子,其中探讨了云原生应用架构的几个主要特征:符合 12 Factors 应用、面向微服务架构、自服务敏捷架构、基于 API 的协作以及抗脆弱性。2015 年 Google 主导成立了云原生计算基金会(CNCF),起初 CNCF 对云原生(Cloud Native)的定义包含以下三个方面:应用容器化、面向微服务架构、应用支持容器的编排调度。

Cloud Native

云原生应用程序简单地定义为从头开始为云计算架构而构建应用程序;这意味着,如果我们将应用程序设计为预期将部署在分布式、可扩展的基础架构上,我们的应用程序就是云原生的。随着公共云将承载越来越多的算力,未来云计算将是主流的 IT 能力交付方式,CNCF 也对云原生进行了重新定义:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用;云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。

  • Codeless 对应的是服务开发,实现了源代码托管,你只需要关注你的代码实现,而不需要关心你的代码在哪,因为在整个开发过程中你都不会感受到代码库和代码分支的存在。

  • Applicationless 对应的是服务发布,在服务化框架下,你的服务发布不再需要申请应用,也不需要关注你的应用在哪。

  • Serverless 对应的则是服务运维,有了 Serverless 化能力,你不再需要关注你的机器资源,Servlerless 会帮你搞定机器资源的弹性扩缩容

这些技术组合搭配,能够构建容错性好、易于管理和便于观察的松耦合系统;再结合可靠的自动化手段,云原生技术能够使工程师轻松地对系统作出频繁和可预测的重大变更。由此可见,云原生是保障系统能力灵动性地有效抓手;云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。微服务架构非常适合云原生应用程序;但是,云原生同样存在着一定的限制,如果你的云原生应用程序部署在 AWS 等公有云上,则云原生 API 不是跨云平台的。

Mapping Layers to Cloud-Native Workloads

云原生应用的关键属性包括了:使用轻量级的容器打包、使用最合适的语言和框架开发、以松耦合的微服务方式设计、以 API 为中心的交互和协作、无状态和有状态服务在架构上界限清晰、不依赖于底层操作系统和服务器、部署在自服务、弹性的云基础设施上、通过敏捷的 DevOps 流程管理、自动化能力、通过定义和策略驱动的资源分配。云原生是分布式应用当下重要的发展路径,其终态应当是 Distributionless,所有与分布式相关的问题由云平台解,分布式应用的开发会跟传统应用的开发一样方便,甚至更加便捷。

云原生的价值与驱动力

理解云原生核心驱动力的价值在于,云厂商在为客户提供云原生技术方案时,需要充分地考虑到不要给客户带去技术锁定,但可以考虑通过产品做粘性。锁定是指“用了我你就无法方便地离开我”,而粘性是指“用了我可以给你带去不一样的价值,而你也可以随时方便地离开我”。云原生所解决的本质问题是应用(或“服务”,本文这两词可以互换使用)的弹性、易用性和移植性这层层递进的“三性”。

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

第二个解决的本质问题是易用性。如果只解决了应用的弹性而没有解决易用性,那么为了运用技术去支撑业务价值创造所需投入的人力和时间会是企业所面临的下一个沉重负担,最终在技术的运用和价值创造上无法体现敏捷性和经济性。易用性对于云产品的用户和客户来说,代表了良好的开发和运维效率。良好的开发效率意味着使用者(客户侧的开发者)只需关心最少的概念和写最少的代码,这就需要云产品在打造之时很好地围绕使用者的心智和能力水平去设计,通过让技术之间做尽可能的无缝连接、对技术细节做良好的抽象甚至彻底屏蔽去降低使用门槛。良好的运维效率则指,只用很少的几个人就可以运维庞大的集群,整个分布式应用的发布、故障发现和排错都很高效。

第三个解决的本质问题是应用的移植性。多云(注:指同时使用多个公有云)和混合云(注:指同时使用公有云和专有云)被 Gartner 认为是未来企业 IT 的重要战略。延着该战略,终态得做到一个分布式应用的代码零改动就能方便地部署到不同的云上(当然,配置可以不同)。逻辑上,要实现应用的可移植性,则应用中不应包含任何与云平台相关的代码,那些代码需要完全下沉到云平台中,实现与应用与云平台的完全解耦。要做到那些代码在所有的云平台上都可用,则需要相关的基础技术是被所有云厂商采纳的,这是一项技术是否是“事实标准”的关键。对于客户来说,实现应用移植性的价值在于,除了解决防止被云厂商锁定的问题,还让自由搭配各云厂商上的技术和成本优势成为了可能。对于那些关系到国计民生的国家级或国际化发展的应用来说,也让满足多云部署的政策合规要求变得简单。

Links