什么是云原生应用?有哪些特点?

什么是云原生应用?有哪些特点?

云原生(Cloud-Native)这个概念最早由Pivotal公司的Matt Stine于2013年首次提出,Matt还在2015年写了一本书《Migrating to Cloud-Native Application Architectures(迁移到云原生架构)》来介绍这个概念的细节,这本书没有纠结于具体技术细节,更多是从方法论角度陈述云原生的原则,所以,虽然出版6年了,依然不过时,很有启发性,有兴趣的朋友可以去看一看。

不过,这本书里虽然对『云原生』怎么做介绍得很详尽,却并没有用一句话解释『什么是云原生』。

比较正式的对于『云原生』的定义,来自于CNCF(Cloud Native Computing Foundation,云原生计算基金会),是的,随和云技术发展得风生水起,业界出现了以云原生命名的基金会组织,根据CNCF的文档,云原生是这么定义的:

这些定义都非常官方,看起来说得很全面,但是看完有觉得什么都没说,没办法,官方定义有时候就是这样,太正式了,反而不通俗易懂,我在这里用尽量大白话来讲一讲什么云原生。

很多人一说『云原生』想到的就是容器、微服务、服务网格(Service Mesh)、Lambda,这些概念当然是云原生中元素,但是绝不是说和这些技术沾上边就是云原生;也有一些人一说『云原生』想到的就是亚马逊AWS、Azure和这云那云,同样,不要以为应用部署到这些云平台上就算云原生了。

云原生的关键,不是『在哪里部署应用』,而是『如何构建应用』!

如果思维方式依然是用传统方法开发应用,然后只不过部署到云服务器上,那并不是云原生。

举个例子,如果用传统应用开发方式,是购买服务器,部署在自己的机房,然后安装对应的操作系统和应用,然后千方百计确保每台服务器不要崩溃,因为如果某台服务器崩了,对应服务器上的用户状态就没了,会带来不好的用户体验;如果业务增长导致负载过大,我们就要购买部署更多服务器,还要保证新服务器状态的预热。然后,也许某一天,我们知道某某云上部署更便宜,于是就把同样的应用架构迁移到某某云上——这并不是『云原生』,这只是『基于云』,因为应用的构建思维还是用传统方法,并没有发挥云服务的优势。

按照云原生的方法论,先不要管最终部署到哪个云上,从架构上就和传统应用开发不一样,我们就应该设计成任何一个节点崩溃了,都不影响用户体验,因为状态被专有节点分布式存储,保证高可用,如果业务增长导致负载过大,可以直接根据配置来扩容节点,而不是手工扩容——这才是『云原生』,这样才能最大程度发挥云技术的威力。

我们搞云原生,不是因为云原生这个词比较酷,云原生的终极目的是为了提高开发效率,提升业务敏捷度、扩容性、可用性、资源利用率,降低成本。

千万不要误以为应用部署上云了就是云原生,也不要以为云原生是用上了某某云最牛的技术,实际上,就和CNCF的定义里所描述的一样『云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用』,云原生么有让我们绑定在某个云上,而是具备很强的灵活度,可以部署在公有云、私有云、混合云,任何云都可以成为载体。

无论是用什么方式开发应用,技术栈都包含从底层网络、存储、服务器到上层运行环境、数据、应用代码,一个都少不了,只是由谁来管理而已。

看上图,云原生的演化路线,整个技术栈中由云平台管理的部分越来越多,而由应用开发者管理的部分越来越少,所以容易给人一种错觉,这个错觉就是,在云原生框架下,基础架构层完全是一个抽象,应用开发者不需要操心做任何选择。

这种想法不能说完全错,云平台的确应该提供一种抽象,但是,也并不完全正确,并不是说应用开发者对于底层技术不需要操心,更不是说不需要做任何选择。

之前我说过,云原生的目的,是提高开发效率,提升业务敏捷度、扩容性、可用性、资源利用率,降低成本,如果有一些技术选择影响我们的目的,那不管是不是基础架构层,我们就必须要仔细权衡。

简单说就是,你不能觉得云服务就是提供一个虚拟机或者容器或者一个Serverless特性的平台,不能觉得只管写代码就好了,要知道,一个完整的业务场景可不只要有能运行代码的地方这么简单,不同的基础设备运行同样的业务效率和成本很不一样的,当你的业务量变得很大或者很复杂的时候,就需要充分考虑哪种基础架构最适合你。

目前,超过 83% 的云实例由英特尔技术提供支持,而英特尔也提供了数百种工作负载调优型实例类型,开发者要从中进行选择,以适应不同的使用场景和数据量,例如,如果你的应用场景需要高度灵活和高性能的运算,而成本不是问题,那么可以使用英特尔现场可编程门阵列(FPGA);如果你的应用场景对安全性要求很高,那就可以使用SGX芯片,微软的Azure Confidential Computing技术就是基于英特尔SGX技术构建。

谈到『云』,有一个问题是绕不过去的,那就是——用哪家云平台?

坦白说,目前很多应用开发欠缺这方面深思熟虑,都是选中一个平台就用,也没有考虑可移植性,最后就让自己绑定在这个云平台上,这是违反『云原生』思想的,云原生应该是一种构建方法,而不是只能基于某个特定平台的构建,云原生应该能够方便在公有云、私有云和混合云上的应有开发,换句话说,云原生应该考虑到未来在不同平台下的可迁移性。

如果云应用和某个平台绑定,那么,可以预料,成本和灵活性都是大问题。企业选择云服务的一个主要动机是不用付出管理硬件的代价,其实,软件管理的成本也是必须考虑的一个因素,硬件+软件托管是云服务的趋势,如果某个云平台使用的软件不具备可移植性,那当迁移到其他平台上时,因为基础设施的改变,就必须要重构整个应用,这将付出巨大的代价,很多企业面对这个代价也只能望而却步,放弃迁移的想法,默默接受目前云平台的缺陷和价格,也就是所谓的『供应商套牢』(vendor lock-in)。目前,绝大部分企业应用和开源项目都是以英特尔架构为基础而开发,投入在基于英特尔技术的云架构,可以实现在公有云、私有云和混合云之间的迁移,实现最大投入产出比。

所以,作为云原生的开发者,要考虑所选择的基层架构,是否容易迁移到其他平台上 ,基于现状,英特尔投入了大量时间和精力实现硬件和软件的性能优化,这让英特尔技术支持的云平台范围广而且性价比高,具备一致、可预测的应用性能增益,是一个值得投入的方向。

说到英特尔,就得说一下,不久之前8月20日英特尔举办了一年一次的『英特尔架构日』,这个活动会公布英特尔一些全新的产品架构,在众多新品中,有两个产品和云计算关系特别大,特别抢眼,一个是Sapphire Rapids至强处理器,另一个是以 Mount Evans 为代表的基础设施处理器IPU(Infrastructure Processing Unit)。

Sapphire Rapids至强处理器,代表了业界在数据中心平台上的一大进步,因为Sapphire Rapids就是根据数据中心的需要构建的SoC(系统芯片)。

对于任何云平台,最关键功能之一就是提供可伸缩性的服务,Sapphire Rapids的卖点就是提供弹性化的计算能力,该处理器可在不断变化且要求日益增高的数据中心使用中提供计算性能,并对工作负载进行优化,以在云、微服务和AI等弹性计算模型上提供高性能。

以 Mount Evans 为代表的IPU,简单说就是专门处理基础架构管理的芯片,让这些繁杂业务无需CPU来处理,从而最大程度提高性能。

如上图所示,没有IPU,那机房中的数据处理和计算调度管理就需要CPU来处理,在需要管理超大虚拟机或者容器的云平台,这会消耗计算资源,不能让CPU发挥完全性能;有了IPU,这部分工作就被IPU分担了,专芯专用,才能把性能推到极致。

像英特尔这样的技术投入,体现了真正的『云原生』精神,不断改进云服务的性能,让硬件和软件最大程度为云原生应用服务。

你看,很多厂家都在为云计算努力加油,把云计算的能力从一个极限推到另一个极限,如果我们在实现『云原生』应用的时候无视这些努力,那可就真实暴殄天物了,要记住,云原生的关键是如何构建应用,而不是部署在哪里。