云原生应用(CloudNativeApplication)
杜屹东 CIO之家的朋友们

更快部署,更低风险,和业务一同扩展

云原生应用程序是专为云上的应用而设计的。这些应用程序通过小型专用功能团队实现快速构建和频繁部署,提供了轻松扩展和硬件解耦的平台,让组织更敏捷,更具有可扩展性和云端可移植性。

什么是云原生应用?

云原生是一种充分利用云计算优势,用于构建和部署应用的方式。在过去的十几年,云已经重新定义了几乎所有行业的竞争格局,消除了企业对IT基础设施资本投入的关注,企业也不用增加雇员去维护一个自建的数据中心。取而代之的是无限的计算、存储能力,并按时按需付费。降低IT支出的同时也降低了行业壁垒,使得初创公司可以很快地实践自己的想法并应用到市场。这正是为什么软件正在吞噬世界,而创业公司正在使用云原生的方式颠覆传统行业。

现在的组织需要一个集成了DevOps,持续交付,微服务和容器化得平台用于构建和运维云原生应用和服务。

  • DevOps 是开发和运维的合作,目标是自动化软件交付和基础设施更改过程。它创造了一个文化和环境,让构建,测试和发布软件可以快速,频繁,更可靠地发生。

  • 持续交付让单个应用随时处于可发布状态,而不用等待与其他变更绑定到一次发布中。持续交付使得发布变成一个频繁且平常的过程,因此组织可以以更低的风险经常交付,并从最终用户获得更快的反馈,直到部署成为业务流程和企业竞争力的重要组成部分。

  • 微服务是将大型应用程序转变为小型服务的集合的架构方法;每个服务实现单独的业务功能,运行在自己独立的进程中并通过HTTP API进行通信。每个微服务器都可以独立于应用程序中的其他服务进行部署,升级,扩展和重新启动,通常作为自动化系统的一部分,可以在不影响终端客户使用的情况下频繁独立更新。

  • 容器比虚拟机(VM)提供了更高的效率和更快的速度。使用操作系统(OS)级别的虚拟化,单个操作系统实例被动态划分为多个相互独立的容器,每个容器具有唯一可写的文件系统和资源配额。创建和销毁容器的低开销,以及单个instance可高密度运行多个容器的特性使得容器成为部署微服务各个模块的完美工具。

我们所学到的一件事是,如果你不能更快地把你的想法推向市场,市场必然会发生变化。到这个时候,不论你如何优化,如何管理训练你的员工,都不会有很好的成效,因为已经晚了。

– James McGlenon(美国利宝相互保险集团 执行副总裁兼首席信息官)

为什么云原生应用很重要

  • 云是具有竞争力的优势
    云原生意味着基础设施的目标将由节约成本变为驱动业务发展,在软件生命周期中,快速构建业务和快速交付以响应客户需求将会让企业具有主宰市场的优势。产品一旦上线就不会停止运行,且可以动态伸缩扩容。

  • 灵活性
    企业一旦构建了应用就可以在任何云上运行而不需要修改。团队可以随时将应用在不同的公有云供应商的平台和私有云平台之间迁移或分发,以此来满足业务需求和节约开销。

  • 让开发人员做他们擅长的
    团队拥抱云原生应用可以屏蔽不同云基础设施的差异,让开发者只用关心代码,集中精力关注在交付的业务价值。由heroku提出的12因素应用为开发人员定义了一套云上应用的开发标准,形同一份与开发人员签订的“合同”,用于确保自己的应用程序充分利用底层的云平台的优势。

  • 运维与业务对齐
    基于自动化的IT运维,企业可以转变为一个精益团队,将团队的关注点与推动业务发展对齐。它可以避免人工失误操作带来的风险,以流程改进代替原本的日常运维工作。通过实施在各个层面的自动补丁和自动升级,消除了宕机时间,也消除了需要“运维专家”手动修复才能解决问题的痛点。


    云原生架构:如何达到云原生




云原生与传统企业应用对比

云原生应用

传统企业应用

可预测:云原生应用符合一个通过可预测行为来最大限度发挥弹性优势的“合同”。高自动化,容器驱动的架构使用云平台驱动改变了软件交付形式。这种“合同”的一个很好的例子就是heroku的十二因素应用。

不确定性:传统应用在开发方式和架构上往往不能真正发挥云服务的优势。这样的应用通常需要很长的时间来构建,一次发布很多内容,只能逐步伸缩,并常伴有许多单点故障。

操作系统抽象:云原生应用要求开发者使用一个平台作为基础设施,意味着应用的基础设施是经过抽象的,更易于迁移和伸缩。构建抽象平台的方法可以自己搭建也可以购买第三方服务,比如Openshift,Cloud foundry。

操作系统依赖:传统的应用程序架构使得开发人员习惯于在应用程序和底层操作系统,硬件,存储和后台服务之间建立紧密的依赖关系。相比于云原生应用,这种依赖会让应用的迁移和伸缩变得异常复杂和充满风险。

大小适合的容量:云本地应用平台可自动进行基础设施配置,并根据应用的需求在部署时重新动态分配资源。管理好一个云原生应用运行时的全生命周期,可以做到按需伸缩,提高资源利用率,编排计算资源,以及最短宕机时间的故障恢复。

过大容量:传统的IT设施为应用设计了专属的技术设施架构,为一个应用准备充足的基础设施资源,从而延迟应用的部署。这种设计方案通常会按照最坏情况下估算容量,解决方案的规模往往大大超过实际需要的规模。

共同协作:云原生促进DevOps,人员,流程和工具的组合,从而在开发和运营之间进行密切协作,以加速和平滑将完成的应用程序代码发布到生产环境中。

部门孤立:传统IT在开发和运维之间有高高的部门墙,开发要跨过一堵墙来向运维交付软件,组织事务优先于客户价值,导致内部冲突,妥协和缓慢的交付让员工士气低落。

持续交付:IT团队的产品永远处于可发布状态。发布软件的周期保证了更短的反馈周期,并能更有效地响应客户需求。持续交付最好和其他一些实践一起使用,例如测试驱动开发和持续集成。

瀑布模式:IT团队定期发布,通常周期为数周至数月,尽管代码已经完成构建,甚至于其他部件并无依赖,仍然不能发布。客户期望的功能总是被搁浅、延期,企业从而丧失了竞争优势、客户、和机会。

独立:微服务架构将一个复杂的应用解耦为一个个小而独立的模块,这些小的服务由一个个小型团队开发和运维,确保各自独立、频繁的更新,伸缩和故障切换/重新启动,而不影响其他服务。

依赖:单体架构将原本不需要绑定的模块绑定在一个软件包中发布,导致开发和部署过程中的敏捷性丧失。

自动扩容:基础设施自动扩容可以消除宕机时间和避免人为操作失误。计算机自动化不会遇到任何类似的挑战,在任何规模的部署中都使用同一套部署脚本。云原生也超越了基于传统的面向虚拟化的业务流程的自动化实践。一个完全的云原生架构包括适用于团队的自动化和业务流程,而不是要求他们习惯于写自动化脚本。换句话说,团队的目标是使得构建和启动应用变得易于管理,而自动化只是其中的一个手段。

手动扩容:人工基础设施包含了人工运维和人工管理的服务器,网络,以及存储配置。扩容工作因为其复杂性,运营人员很难在扩容过程中诊断问题,而且实施过程中很容易出现错误,手工编写的配置文件有可能将人为错误的硬编码到基础设施中,成为一个很难发现且长期存在的隐患。

快速恢复:容器化运行时提供了一个虚拟机之上的动态,高密度的虚拟层,是理想的微服务托管方式。动态管理容器在宿主机上的编排,方便及时回滚,扩容,和重现错误。

缓慢恢复:基于虚拟机的基础架构对于基于微服务的应用程序来说是一个缓慢而低效的基础设施,因为单个虚拟机启动/关闭的速度很慢,甚至在部署应用程序代码之前也就带来很大的开销。


CIO之家 www.ciozj.com 公众号:imciow
关联的文档
也许您喜欢