在云计算上下文中,什么是云原生应用?并且“基于云(cloud-based)”与“云原生(cloud-based)”指的是完全相同的架构吗?
云原生开发意味着使用一套特定的方法和工具,或者简单地在特定环境上安装、运行和管理你的应用吗?
让我们试着用朴实的语言给出云原生应用的定义,以及云原生开发过程的关键原则,消除其一些神秘感并消除围绕云原生技术和云原生架构的一些混乱。
什么是云原生应用?
最简洁的定义可能是它是使用基于云的技术开发的应用程序,完全放在云上并在云上进行管理。你是否感觉到“基于云( cloud-based)的应用”与“云原生(cloud-native)应用”之间的根本区别?
前者(“基于云的应用”)可以是一种老一点的应用,经过重新构架之后运行在云操作系统上。而后者则是从一开始就是在云上。
云原生应用端到端的(end-to-end)运行在云上。这意味着它已经使用基于云的技术和服务进行编写,测试并部署在云中,而不仅仅是后来才将其托管到云计算环境中。
现在,如果要突出云原生应用区别于传统应用的特征,我将它们概括为三点:
它们在构建时就考虑了敏捷性和高度灵活性,这意味着可以带来更好的安全性,顶级的性能并改善客户体验。
迅速地运行新功能、采用变更以及全面自定义应用;
它们不依赖“单体式”的软件代码库; 相反,它们以“模块化”的方式构建,并利用了多种基础设施和云计算框架。
云原生应用的三个典型的特点
换句话说,我们怎么识别一个云原生应用呢?
让我将一长串的特征缩减为最具体的特征:
它们不会局限在特定的公有云基础设施上。
它们可以很好地水平扩展,因为它们利用了云平台的弹性。
它们在“构建”过程中使用了一系列“云特有”的开发与运维方法论,技术以及架构方法,包括:轻量级的容器环境,基础设施即代码,微服务,编排。
开发云原生应用的7个原因
如果你认为以上所提及的云原生特性还不足以让你选择云原生开发,这里有一些更具说服力的东西:1 管理基础设施更加容易
让无服务器(Serverless)架构来为你服务!
在诸如AWS Lambda和Azure Functions这样的serverless平台的帮助下,类似于配置网络,提供云实例,确保有充足的存储空间等操作都会被自动关照。
所有留给你做的就是上传你的代码。2 云原生应用对故障更具韧性
“理想”的应用会自带自愈能力。因此,希望它能够自动处理“停转(outages )”,具有内在的容错能力。如果出现问题,你的云原生应用将会“迅速”而谨慎(discreetly)地从一个数据中心转移到另一个数据中心。简而言之:终端用户的体验不会被影响,并且你不必再为停工检修(downtime )的成本而焦虑。3 你可以更快地发布你的APP
因为它支持DevOps 过程——诸如构建、测试、部署等关键操作的自动化与协同实现了流水线化——你的云原生应用就会加速整个软件的交付过程。4 低成本
成本减少背后的四个主要原因:
容器:容器化的应用将使你更加轻松和安全地对其进行管理。
云原生工具,可以使工具运用达到一定程度的标准化。
开源模型(The Open-Source Model)
无服务器计算(Serverless Computing,),支持按使用付费模式并提升了定价的灵活性5 你的应用可以自动的(水平)扩展以满足需求的增长
云原生应用架构的主要属性之一是自动扩展。
基本上,你的应用程序将根据默认情况进行扩展,以处理你未来的业务需求。而这也反映在成本上:你只为你使用的计算资源付费。6 你的应用支持自动供给(Auto-Provisioning)
只要想象一下:你的关键业务app将会平稳运行(non-eventful),恰好按照应用所需来分配服务。
它(关键业务app)将会自动地利用“自服务”以及编程式的供给(programmatic provisioning),这样你不必为它们的平滑运行手动提供所需资源。7 你将会提供更好的客户体验
可以十分确信的预见,由于云原生的原则是以快速交付新功能和不断迭代为中心,因此你将能提供更好的终端用户体验。