前言
云原生计算利用了许多现代技术,包括:PaaS,混合云,微服务,敏捷方法论,容器,CI/CD和devops。
云原生这个术语经常被提及,尤其是云服务商。不仅如此,它甚至有自己的基金会——the Cloud Native Computing Foundation(CNCF,即:云原生计算基金会),2015年由Linux基金会成立的。
云原生定义
在通常的应用中,云原生是利用云计算交付模型来构建和运行应用的一个方法。云原生是关于如何创建和部署应用,而不是在哪里创建和部署。与本地数据中心相反,云原生意味着应用运行于公有云上。
CNCF对云原生的定义更为狭隘一些。使用开源软件技术栈进行容器化,应用的每一部分都打包在自己的容器内,因此可以对每一部分进行主动调度来使得资源的使用最佳化。并且,以面向微服务来增加应用的整体灵活性和可维护性。
咨询公司德勤的总经理迈克·卡维斯(Mike Kavis)表示,云原生应用程序经过专门设计,可以在现代云计算平台所需的弹性、分布式环境中运行。这些应用是松散耦合的,意味着代码不会硬关联到任何基础设施组件中,因而应用可以按需弹性伸缩,并包含不变基础设施的理念。通常,这些架构会使用微服务构建,但不是必须的。
云服务提供商Splunk的首席技术倡导者安迪·曼(Andi Mann)表示,对于云原生应用程序,真正最大的区别是应用是如何构建、交付、操作。利用云服务的优势意味着使用敏捷和可扩展组件(例如容器)来交付具有离散和可重复使用的功能,这些功能以很好的方式进行集成,甚至跨越了技术边界(例如混合云),这将允许交付团队可以使用可重复的自动化和编排进行快速迭代。
开发云原生应用通常包括devops,敏捷方法论,微服务,云平台,容器(例如Kubernetes和Docker),CD(持续交付),简而言之,是每种现代应用部署方法。
正因如此,你会非常想要拥有一个PaaS(平台即服务)模型。一个Pass平台不是必须的,但它将使很多问题变得非常简单。绝大部分云用户都是从IaaS(基础设施即服务)开始的,这将帮助他们从底层硬件中抽象出他们的应用。但是,PaaS增加了一层额外的层来抽象出底层的操作系统,因而你可以完全专注在你的应用的业务逻辑上,而不用担心进行系统调用。
云原生应用和本地应用的区别
相较于传统企业应用,开发云原生应用需要一个非常不同的架构。
语言
如果应用部署在Windows服务器平台上,运行在服务器上的本地应用更倾向于使用传统语言编写,例如C/C ,C#或者其他Visual Studio支持的语言或者企业级Java。如果是在大型主机上,那么可能是Cobol(一种高级语言)。
云原生应用更多的使用web语言编写,例如HTML,CSS,Java,JavaScript,.Net,Go,Node.js,PHP和Ruby。
可更新性
云原生应用总是当前最新的,也总是可用的。
本地应用需要更新,通常由供应商以订阅的方式交付,并且在更新时需要停机。
弹性
在应用使用高峰期,云原生应用可以使用更多资源来利用云的弹性。如果你的基于云的电子商务应用在使用时遇到了高峰期,你可以给它分配额外的计算资源,在高峰期过去后再关闭那些资源。一个云原生应用可以适应资源的增加并按需伸缩。
本地应用无法动态伸缩。
多组织
云原生应用可以很好的在虚拟环境中工作,并能和其他应用共享资源。
许多本地应用在虚拟环境中无法正常工作,或者根本就无法运行,它们需要一个非虚拟化的空间。
关联资源
一个本地应用在连接网络资源方面是相当严格的,例如网路,安全性,权限和存储。这些资源很多都要硬编码,如果有任何资源移动或修改,应用将无法运行。
在云上,网络和存储就完全不一样,当你听到“重新平台化”这个术语时,就是典型的为了使应用能够在云上运行,而对网络、存储、甚至数据库技术做出适应的改变而进行的工作。德勤的Kavis说。
停工时间
云应用的冗余比本地应用的冗余大得多,因此,如果一个云提供商出现了故障,另一个区域可以填补故障空缺。
本地应用可能已经准备好了故障转移,但是如果服务器宕机了,将会是一个非常大的挑战,因为应用也会随之宕机。
自动化
如此多的云是自动化的,包括应用的管理也是自动化的。云原生应用的交付非常快且敏捷,这在很大程度上取决于可靠、久经实践且被广泛认可的可以重复执行的自动化流程,而不是人工的干预来重复执行,Splunk说道。工程师们应尽可能寻求方法来实现自动化,以实现可重复性、自助服务、敏捷、弹性伸缩、验证和控制。
本地应用必须人工管理。
模块化设计
本地应用倾向于设计成单应用,他们把一些工作转移到了库中,可以确定的是,应用最终变成一个拥有许多子程序的庞大应用。云原生应用更加模块化,许多功能都拆分成了微服务。这允许在不需要时可以关闭它们,并将更新推送到指定的一个模块,而不是整个应用。
无状态化
云应用低耦合的特性意味着应用不会强关联在基础设施上,也就意味着它们是无状态的。一个云原生应用将其状态存储在数据库或外部实体中,因此即使实例来来去去,应用程序依然可以跟踪到实例在应用中的位置。"这是低耦合的本质,不受基础架构的约束,允许应用以高度分布式方式运行,并且保持其状态独立于基础架构的弹性性质。"Kavis说。
许多的本地应用是有状态的,意味着它们将应用的状态存储在运行代码的基础设施上。当添加服务器资源时,该应用程序可能会中断。
云原生的挑战
客户犯的一个最大的错误就是将他们的旧的本地应用程序迁移到云上。尝试将现有应用程序(尤其是整体式遗留应用程序)迁移到云基础设施中并不能利用到云原生的特性。
相反,你应该用新的方式做新的事,既可以把新的云原生应用程序放到新的云原生基础设施中,也可以分解现有的单体应用,依据云原生的规则来重构它们。
你还需要抛弃旧的开发人员方法。瀑布模型肯定不能使用了,甚至敏捷开发都不够用。因此,你必须采用新的云原生方法,例如最小可行产品开发(MVP),多变量测试,快速迭代,并在devops模型中跨组织边界紧密合作。
云原生有很多层面,包括基础设施服务,自动化编排,虚拟化和容器化,微服务架构以及可观察性。所有这些都意味着一个新的做事方式,意味着你在学习新的方法时打破旧的习惯。因此,请以一定的速度进行。