云原生的3P
什么样的应用才能算是专门为云环境设计的呢?云原生计算基金会(Cloud Native Computing Foundation,CNCF)在对云原生的定义中回答了这个问题[2]。
[2] Cloud Native Computing Foundation, “CNCF Cloud Native Definition v1.0”, https://github.com/cncf/toc/blob/ master/DEFINITION.md。
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
这些技术能够构建容错性好、易于管理和便于观测的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统做出频繁和可预测的重大变更。[3]
[3] 此段定义来源于CNCF的官方译文(https://github.com/cncf/toc/blob/main/DEFINITION.md),只是根据目前的惯用说法,将“观察”一词改成了“观测”。——译者注
从这个定义中,我识别出了三组信息,并将其称为“云原生的3P”:
■ 平台(Platform):云原生应用运行在基于动态化、分布式环境的平台上,也就是云(公有云、私有云和混合云)中。
■ 属性(Property):按照设计,云原生应用是可扩展、松耦合、有韧性、可管理和可观测的。
■ 实践(Practice):围绕云原生应用的实践包括可靠的自动化,以及频繁且可预测的变更,即自动化、持续交付和DevOps。
什么是云原生计算基金会?
云原生计算基金会(CNCF)是Linux基金会的一部分,致力于“构建可持续的生态系统和培育社区,以支持云原生开源软件的健康发展”。CNCF托管了许多云原生技术和项目,以实现云的可移植性,避免被供应商锁定。如果你想了解解决云原生各方面问题的项目,建议查阅CNCF的云原生交互式全景图(CNCF Cloud Native Interactive Landscape)[4]。
[4] Cloud Native Computing Foundation, “CNCF Cloud Native Interactive Landscape”, https://landscape.cncf.io/。
在后续章节中,我将进一步阐述这些概念。但首先,我想让你注意的是,云原生的定义与任何具体的实现细节或技术没有关联。CNCF在定义中提到了一些技术,如容器和微服务,但它们只是示例。在向云迁移时,一个常见的误解是我们必须要采用微服务架构、构建容器并将其部署至Kubernetes中。这是不对的。Fremantle在2010年的博客文章就证明了这一点,他并没有提及这些技术,因为当时它们根本就不存在。然而,他所描述的应用不仅仍然被认为是云原生的,而且还符合多年后CNCF给出的定义。