这两年,云原生的火热程度一点都不亚于2014年的3D打印、2018年的区块链,有种“忽如一夜春风来,千树万树梨花开”的既视感。为此,笔者想借着这股“东风”,来谈一谈云原生。由于云原生概念并没有明确,笔者理解可能有失偏颇,行文中若有偏差,敬请各位斧正。
其实,云原生的英文全称为“CloudNative”,可以将这个单词拆分为Cloud、Native两个单词:Cloud意即云,表示应用程序在云上,不是在传统的数据中心、服务器;Native意即原生的、土著的、当地的、土生土长,表示应用程序专门为云环境设计。可以想象,“云原生”的汉语名称并没有采用云土著、云当地、云土生土长,而采用了一个非常优美的名字——云原生。
因此,云原生一种构建和运行应用程序的技术体系和方法论,这套技术体系从设计之初即考虑到云的环境,充分利用和发挥云平台的弹性和分布式优势。华为曾对符合云原生架构的应用程序如是描述:采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。 通过华为的这段描述,可以看出云原生的四个要素:容器化、微服务、DevOps、持续交付,这是现在公认的,也是Pivotal概括的4个主要要素,对此,不同的云计算厂商在原有的4要素之上有所延伸,有着自己的见解。
2013年,Pivotal公司的Matt Stine首次提出云原生(CloudNative)概念。
2015年,《迁移到云原生架构》定义了云原生架构的特征:12因素、微服务、自敏捷架构、基于API协作、扛脆弱性。
同年,云原生计算基金会(CNCF)成立,并将云计算定义为容器化封装+自动化管理+面向微服务。
2017年,Matt Stine将云原生架构归纳为模块化、可观察、可部署、可测试、可替换、可处理6特质。
彼时,Pivotal将云原生概括为DevOps+持续交付+微服务+容器。
2018年,CNCF更新了云原生的定义,将服务网格(Service Mesh)和声明式API加进来。
从云原生诞生到发展的脉络来看,云原生的定义不断完善,并存在概念混乱、不统一的现状,不过目前,大多数云计算企业习惯使用DevOps+持续交付+微服务+容器来定义云原生。下面,我们来简单理解一下云原生的4个主要要素。
1、微服务。
微服务是一个独立发布的应用服务,可以作为独立组件升级、灰度或复用等,每个服务可以由专门的组织来单独完成,依赖方只要定好输入和输出口即可完全开发,甚至整个团队的组织架构更精简,沟通成本低、效率高。
2、devOps
DevOps字面上是组合词——Dev、Ops,即开发人员、运维人员。实际上,DevOps是一组过程、方法与系统的统称,DevOps强调高效组织团队之间如何通过自动化的工具协作和沟通来完成软件的声明周期管理,从而更快、更频繁地交付更稳定的软件。