“云原生”一词被广泛使用,尤其是云提供商。 不仅如此,它甚至还有自己的基础:由Linux基金会于2015年成立的Cloud Native Computing Foundation(CNCF)。
定义为“云原生”
通常,“云原生”是一种利用云计算交付模型的优势来构建和运行应用程序的方法。 “云原生”是关于如何创建和部署应用程序,而不是在哪里。 这意味着应用程序位于公共云中,而不是本地数据中心。
CNCF将“原生云”定义得更狭narrow,意味着使用开源软件堆栈进行容器化,其中应用程序的每个部分都打包在自己的容器中,动态编排,因此可以对每个部分进行主动调度和管理以优化资源利用率和面向微服务的功能,以提高应用程序的整体敏捷性和可维护性。
咨询公司德勤(Deloitte)的常务董事迈克·卡维斯(Mike Kavis)表示:“云原生应用程序经过专门设计,可以在现代云计算平台所需的弹性和分布式环境中运行。” 这些应用程序松散耦合,这意味着代码没有硬连线到任何基础架构组件,因此该应用程序可以按需伸缩,并包含不可变基础架构的概念。 通常,这些架构是使用微服务构建的,但这不是强制性要求。”
云服务提供商Splunk的首席技术倡导者安迪·曼(Andi Mann)表示,对于云原生应用程序而言,真正的最大区别在于应用程序的构建,交付和操作方式。 “利用云服务的优势意味着使用灵活的可扩展组件(如容器)来交付离散的和可重用的功能,这些功能可以用描述得很好的方式集成,甚至跨多云等技术边界也可以使交付团队使用可重复的自动化和编排快速进行迭代。”
云原生应用程序开发通常包括devops , 敏捷方法论 , 微服务 , 云平台 , Kubernetes和Docker之类的容器以及持续交付 -简而言之,是每种新的现代应用程序部署方法。
因此,您确实希望拥有平台即服务(PaaS)模型 。 PaaS不是必需的,但是它使事情变得容易得多。 绝大多数云客户都是从基础架构即服务(IaaS)开始的 ,该基础架构即服务从基础硬件中抽象出他们的应用程序。 但是PaaS增加了一个额外的层来抽象底层操作系统,因此您可以完全专注于应用程序的业务逻辑,而不必担心进行操作系统调用。
相关视频:什么是云原生方法?
在这个60秒的视频中,Heptio的创始人兼首席执行官Craig McLuckie和开源Kubernetes的发明者之一,了解了云原生方法如何改变企业构建技术的方式。
云原生和本地应用程序之间的差异
原生云应用程序开发与传统企业应用程序需要的架构完全不同。
语言能力
编写为在公司服务器上运行的本地应用程序倾向于以传统语言编写,例如C / C ++,C#或另一种Visual Studio语言(如果部署在Windows Server平台和企业Java上) 。 如果是在大型机上,则可能在Cobol中。
云原生应用程序更可能以以网络为中心的语言编写,这意味着HTML,CSS,Java,JavaScript,.Net, Go , Node.js ,PHP, Python和Ruby。
可更新性
云原生应用程序始终是最新和最新的。 云原生应用程序始终可用。
本地应用程序需要更新,通常由供应商以订阅形式交付,并且在安装更新时需要停机。
弹性
云原生应用通过在使用高峰期间使用更多资源来利用云的弹性。 如果您的基于云的电子商务应用程序使用高峰,则可以将其设置为使用额外的计算资源,直到高峰消退,然后关闭这些资源。 云原生应用程序可以根据需要调整以增加资源并进行扩展。
本地应用无法动态扩展。
多租户
原生云应用程序在虚拟空间中工作并与其他应用程序共享资源没有问题。
许多本地应用程序在虚拟环境中无法正常运行,或者根本无法运行,并且需要非虚拟化空间。
关联资源
本地应用程序在与网络资源(例如网络,安全性,权限和存储)的连接上相当严格。 这些资源中的许多资源都需要进行硬编码,并且如果移动或更改任何内容,它们就会中断。
“网络和存储在云中完全不同。 当您听到“重新平台”一词时,通常就是为了适应网络,存储乃至数据库技术的变化而进行的工作,以允许该应用程序在云中运行。”德勤的Kavis说。
停工时间
云中的冗余比内部部署的冗余要大,因此,如果云提供商的服务中断,则另一个区域可能会遇到问题。
本地应用可能已准备好进行故障转移,但是很有可能如果服务器关闭,则应用也会随之关闭。
自动化
如此多的云是自动化的,其中包括应用程序管理。 “云原生交付的优势,尤其是速度和敏捷性,很大程度上取决于可靠,可靠和经过审核的已知良好流程的基础,这些流程可以根据自动化和编排工具的需要重复执行,而不是通过人工干预来重复执行,” Splunk说道。曼恩 工程师应该寻求几乎不止一次地使几乎所有工作自动化,以实现可重复性,自助服务,敏捷性,可伸缩性以及审计和控制。
本地应用必须手动管理。
模块化设计
本地应用程序在设计上往往是整体的。 可以肯定的是,他们将一些工作转移到了库中,但是最后,它是一个包含大量子例程的大型应用程序。 云原生应用程序更加模块化,许多功能细分为微服务。 这样一来,它们就可以在不需要时关闭,并且可以将更新发布到该模块,而不是整个应用程序。
无国籍
云的松散耦合性质意味着应用程序不依赖于基础架构,这意味着它们是无状态的。 云原生应用程序将其状态存储在数据库或其他外部实体中,因此实例可以来去去,并且该应用程序仍可以跟踪该应用程序在工作单元中的位置。 “这是松散耦合的本质。 不受基础架构束缚,应用程序可以高度分布式地运行,并且仍保持其状态独立于基础架构的弹性性质。” Kavis说。
大多数本地应用程序都是有状态的,这意味着它们会将应用程序的状态存储在运行代码的基础架构上。 因此,添加服务器资源时,该应用程序可能会损坏。
云原生计算的挑战
曼恩说,客户犯的最大错误之一就是试图将其旧的本地应用程序迁移到云中。 “尝试采用现有应用程序(尤其是整体式遗留应用程序)并将其移至云基础架构中将不会利用基本的云原生功能。”
相反,您应该尝试以新的方式来做新的事情,要么将新的云原生应用程序放入新的云基础架构中,要么通过分解现有的整体组件,从头开始使用云原生原理来重构它们。
您还需要省掉旧的开发人员方法。 瀑布模型肯定不会用,甚至敏捷开发可能还不够。 因此,您必须采用新的云原生方法,例如最小可行产品(MVP)开发,多变量测试,快速迭代以及在devops模型中跨组织边界紧密合作。
云原生有很多方面,包括基础架构服务,自动化/编排,虚拟化和容器化, 微服务架构以及可观察性。 所有这些都意味着一种新的做事方式,这意味着您在学习新方法时要打破旧习惯。 因此,请以一定的速度进行。
了解有关云原生技术的更多信息
- 平台即服务(PaaS)的解释
- 多云解释
- 敏捷方法论解释
- 敏捷开发最佳实践
- Devops解释
- 开发最佳实践
- 微服务解释
- 微服务教程
- Docker和Linux容器介绍
- Kubernetes教程
- CI / CD(持续集成和持续交付)说明
- CI / CD最佳做法