云原生(Cloud Native)应用开发,助力企业数字化转型


一、简述

要在快节奏的软件驱动型市场中取得成功,公司必须改变他们设计、构建和使用应用的方式。应用的快速开发和交付已成为数字化企业必须要满足的一项新需求。

云原生应用开发是根据众所周知的云计算技巧与技术构建、运行和改进应用的一种方法。基于云技术原理,利用相关服务,并采用为实现云计算敏捷性和自动化而过优化的各种流程,从而完成现有应用的现代化转型并构建新的应用。

二、什么是云原生应用

云原生应用旨在充分利用云计算模型,从而提高速度、灵活性和质量并降低部署风险。虽然名字中包含“云原生”三字,但云原生方案的重点并不是应用部署在何处,而是如何构建、部署和管理应用。

云原生方案与微服务架构类似。然而,尽管微服务可通过构建云原生应用来交付,可企业仍需采取许多措施,才能在生产中熟练地管理微服务。而要想享受云原生应用的各种益处,也并非一定需要微服务。很多企业都通过基于相同的原则,构建出更优秀的模块化单体式应用,从而取得云原生方案的种种效益。

向云原生应用的开发和交付转型,是一次全方位的变革,涉及企业的文化、流程、架构和技术。因此,这是企业的必经之路,而不是所要到达的目标。这段旅程代表着一个变革周期,而实现变革从来不是一件容易的事。

三、传统应用开发与云原生应用

云原生应用开发与传统应用开发之间的差别,充分彰显了变革的必要性。

表 1. 传统应用开发与云原生应用开发

传统 云原生
重点关注 使用寿命和稳定性 上市速度
开发方法 瀑布式半敏捷型开发 敏捷开发、DevOps
团队 相互独立的开发、运维、质量保证和 安全团队 协作式 DevOps 团队
交付周期 短且持续
应用架构 紧密耦合
单体式
松散耦合
基于服务
基于应用编程接口(API)的通信
基础架构 以服务器为中心
适用于企业内部
依赖于基础架构
纵向扩展
针对峰值容量预先进行置备
以容器为中心
适用于企业内部和云环境
可跨基础架构进行移植
横向扩展
按需提供容量

由于云原生应用非常注重上市速度,因此,在开发时需要实施更加敏捷且基于服务和 API 的方案和持续交付策略。而这些方案能否成功实施又取决于以下几点:
  • 开发和交付团队间的 DevOps 协 作;
  • 模块化程度更高的架构;
  • 能够按需横向扩展、
  • 支持多种环境并实现应用可移植性的灵活基础 架构。

在利用现代化云技术实现灵活性和敏捷性后,企业会想将传统应用迁移到云环境中,以便进一步提高敏捷性,并充分利用按需提供的计算容量。

但是,传统平台中内置的很多运维功能,要么对于云环境而言早已过时,要么云环境本身就会提供并实施这些功能。云环境不但能简化主机的生命周期管理,还能帮助企业充分利用不变的基础架构原则,并对主机进行精调以满足单个应用实例的需求。

每个企业的云原生应用的构建之路可能都不尽相同。仅凭创建微服务无法实现数字化业务所需的服务质量和交付频率。同样地,仅凭采用支持敏捷开发或 IT 自动化的工具也无法加快云原生方案的速度。要想取得成功,企业必须综合考虑相关的实践、技术、流程和理念。

四、云原生应用生态

CNCF,全称Cloud Native Computing Foundation(云原生计算基金会),口号是坚持和整合开源技术来编排容器作为微服务架构的一部分,其作为致力于云原生应用推广和普及的一支重要力量,不论您是云原生应用的开发者、管理者还是研究人员都有必要了解。

CNCF 维护了一幅CNCF的全景图:

五、云原生应用的12要素

六、云原生应用开发&部署原则

云原生应用开发所构建和运行的应用,旨在充分利用基于四大原则的云计算模型:基于服务的架构、基于 API 的通信、基于容器的基础架构以及 DevOps 流程。

云原生应用开发和部署的四大原则

1、基于服务的架构

基于服务的架构(如微服务)提倡构建松散耦合的模块化服务。其他模块化架构 方案(如迷你服务)采用基于服务的松散耦合设计,可帮助企业提高应用创建速 度,但不会增加复杂性。

2、基于 API 的通信

服务通过与技术无关的轻量级 API 来提供,这些 API 可以降低与部署、可扩展性和维护相关的复杂性和费用。企业可以通过所提供的 API 在内部和外部创建新的功能,创造新的商机。

采用基于 API 的设计时,只能在网上通过调用服务接口来通信,这样可避免因直接链接、共享内存模型或直接读取其他团队的数据存储而带来的风险。这种设计能让应用和服务延伸到不同的设备、拓展出不同的形式。

3、基于容器的基础架构

云原生应用依靠容器来构建跨技术环境的通用运行模型,并在不同的环境和基础架构(包括公共、私有和混合云)间实现真正的应用可移植性。容器技术会利用操作系统虚拟化功能来划分多个应用的可用计算资源,并确保这些应用安全无虞、相互独立。

云原生应用采用横向扩展模式,因此,只需添加更多应用实例,即可增加容量, 而且这样的添加常通过容器基础架构中的自动化功能来实现。

由于容器的费用低、密度高,因而可在同一虚拟机或物理服务器内托管大量容器, 这使得容器成了交付云原生应用的理想之选。

4、DevOps 流程

采用云原生方案时,企业会使用敏捷的方法,依据持续交付和 DevOps 原则来开发应用,这些方法和原则要求开发、质量保证、安全、IT 运维团队以及交付过程中所涉及的其他团队以协作方式构建和交付应用。

六、八步法构建云原生应用

1、发展 DEVOPS 文化和实践

要完成云原生应用的构建之路,开发和 IT 运维团队必须进行多方面的变革,以便更加快速高效地构建和部署应用。要想充分利用新技术,采用更加快速的方案,实现更为密切的合作,企业必须切实遵循 DevOps 的原则和文化价值,并围绕这些价值来进行 组织和规划。

DevOps 文化的推行不仅要靠工具和技术,也取决于员工是否愿意和信任用集成度和协作度更高的方案来开发和交付应用。企业可以把开源软件项目的文化作为参考,来构建 DevOps 文化。

倡导大胆尝试、迅速纠误、提升决策透明度,并通过表扬和奖励来促进团队间的相互信任和紧密协作,有助于引导企业完成 DevOps 之旅。

开源文化推动开放创新

进一步了解: 红帽开放创新实验室如何帮助您完成 DevOps 之旅

2、为现有单体应用提速

组织不能抛弃现有的单体应用程序,这些应用程序这些年来一直在有效地运行其业务。该如何加快现有单体式应用的运行速度?正确的方法是:将您现有的单体式架构迁移到模 块化程度更高、且基于服务的架构中,并采用基于 API 的通信方式,从而实施快速单体式方案。

在开始实施将单体式应用重构为微服务的艰巨任务前,您可以通过将这些现有应用程序迁移到基于容器的现代平台来加快速度,这不仅可以提高自动化程度,而且可以提高开发速度。然后,您可以识别可使用 API 公开的单体应用程序组件。

3、使用中间件来加速

可重用性一直是加快软件开发速度的关键,云原生应用程序也不例外。当您可以使用已优化并集成到基于基础容器的现有服务时,为什么要重新创建如缓存服务,规则或工作流引擎或无服务器框架等基础设施?这些应用程序服务,无论是软件即服务(SaaS),平台即服务(PaaS)还是 iPaaS 产品,都是有效的即用型开发人员工具。将这些可重用组件用于云原生应用程序,最好是已被优化并集成到底层云原生基础架构中的组件,以充分发挥它们的价值。

4、选择正确的工具

组织正在从各种运行时和框架中选择最佳工具来解决特定任务。随着语言或框架的选择越来越适合特定的业务应用程序需求,构建云原生应用程序变得越来越多样化。随之而来的复杂性增加值得使用基于容器的应用程序平台,该平台支持框架,语言和体系结构的正确组合,以支持云原生开发。有许多技术和框架可以实现云原生应用程序,例如 Quarkus,Spring Boot,Eclipse MicroProfile,Eclipse Vert.x,DropWizard,Python,Apache OpenWhisk,Node.js,Golang 和 Jakarta EE。根据您要解决的问题,选择最能帮助您解决问题的工具/框架。

5、构建自助式按需基础架构

通过自助式地按需置备基础架构,开发人员可以在需要时访问所需的基础架构。

容器和容器编排技术抽象并简化了对于底层基础架构的访问,并可针对各种基础架构环境(如数据中心、私有云和公共云)进行有效的应用生命周期管理。容器平台还可提供额外的自助服务、自动化和应用生命周期管理功能。该模式使开发人员和运维团队能够快速启用一致的环境,帮助开发人员专注于构建应用,而不会困于与置备基础架构相关的障碍和延迟。

标准化也是自助模式的要素之一。它有助于企业以一致的方式实现自动化和交付,达成业务目标。容器还有助于实现应用可移植性,包括创建可部署和运行于任何云提供商的云原生应用。

进一步了解:详细了解有助于开启云原生之旅的不同实践和技术

6、通过 IT 自动化加速应用交付

避免手动执行 IT 任务,是加速交付云原生应用的重点,而实现 IT 或基础架构自动化就是其中的关键所在。从网络和基础架构置备,到应用部署和配置管理,自动化可以整合并应用于任何任务 或组件。

IT 管理和自动化工具会创建可重复的流程、规则和框架,以替代或减少会延迟上市的劳动密集型人工介入。 这些工具可以进一步延伸到具体的技术(如容器)、方法(如 DevOps),再到更广泛的领域(如云计算、安全性、测试、监控和警报)。因此,自动化是 IT 优化和数字化转型的关键,可以缩短实现价值所需的总时长。

进一步了解:自动化企业

7、实施持续交付和高级部署技术

敏捷开发方法经过不断演变,形成了“早发布,常发布”模式。DevOps 和持续交付方案通过密切联合开发人员、运维、质量保证和安全团队,扩展了这些方法的应用领域,从而改善了软件的交付流程。因此,代码的变动可以快速可靠地推送至生产环境,为开发人员提供快速反馈。这种迭代式快速反馈循环借助 CI/CD 实现, 可将基础架构自动化扩展到端到端自动交付系统,从而涵盖应用 交付的方方面面,包括自动化测试、漏洞扫描、安全合规性和法规检查。自动化交付管道旨在不影响运维能力的情况下提供更新,同时降低交付风险。

要实现持续交付(CD),首先要实现持续集成(CI)。CI 系统是一组 Build 系统,它们可以监控各种源代码控制存储库的变更情况,运行任何适用的测试,并通过每个源代码控制变更自动构建最新的应用版本,如 Jenkins。

高级部署模式旨在降低与软件发布相关的风险,构建结果受控且不会对客户造成意外负面影响的 实验环境。该目标对于推动整个企业不断创新至关重要。

通过消除新部署对客户造成的不便,这些技术使企业能够按照业务所需的频率来交付更新和发布版本。以下是一些可用于实现零停机部署的常用部署技术,具体技术根据用例而定:

滚动部署模式不会一次更新应用的所有实例,它会依次将各个实例从负载均衡器中排除,使其无法接收流量,然后再单独更新各个实例。实例更新后,会再次纳入负载均衡器中。此流程会持续进行,直到所有实例都已更新。

蓝/绿部署描述的是运行两个相同环境的做法:一个环境处于活动状态,而另一个处于空闲状态。 所做的更改会被推广至空闲环境;然后,待更改在生产中完成验证后,实时流量会切换到已更新的环境。回滚到先前版本就像切换回流量一样简单,但前提是得考虑数据的传输。

金丝雀发布类似于蓝/绿部署,需使用两个相同的环境。但是,它的不同之处在于发布的控制方式。 部署新版本后,会向一小部分客户发送新版本,供其在生产中进行测试。如新版本验证成功,则流量会逐渐转移到新版本,同时监控并验证结果,直到向所有用户发送完新版本。

A/B 测试将向用户展示两种不同的设计,然后根据所需的指标来评估哪种设计效果更好。既可以直接让用户对自己的体验进行评分或提供反馈,也可以用更加不易察觉的方式完成。例如,将 A/B 测试与金丝雀发布结合在一起,可以对比两种潜在的设计甚至隐藏的功能,然后以当前环境为基准评估用户对不同设计的反应。

进一步了解:教大象跳舞 — 跨团队、流程和应用的主动变革

8、演进更具模块化的架构

有许多方法可以演化出更具模块化的体系结构。在微服务体系结构编写软件的方法中,应用程序分解为彼此独立的最小组件。微服务架构非常适合构建云原生应用程序,因为它们满足了云原生应用程序开发的关注焦点,即基于服务和基于 API 的原则。

但是,微服务架构不容易实现或维护。因此,分析师和主题专家建议对微服务采用 MonolithFirst 方案,即要先构建一个单体式应用,就算您想创建的是微服务架构。这么做的目的是:先充分理解您的应用所属的域,然后更好地识别其所含的有限上下文——这些上下文将作为转换成微服务的候选内容。这样做,有助于避免技术债务,比如还没有了解应用的所属域和有限上下文就构建一组微服务,由此产生的修复成本。

微服务的另一种替代方案是迷你服务。迷你服务是按域划分的多个服务的集合,通常在应用服务器上运行。迷你服务可以提高敏捷性并进行扩展,而无需担心基于微服务的设计和基础架构所带来的复杂性问题。

七、云原生应用业务场景及方案

在实现数字化转型时,各个企业都有不同的优先事务。有些企业会遵循现代化的云原生原则,使其现有的应用架构和基础架构实现现代化转型,而有些企业会利用全新的业务模式和应用来实现创新。无论具体的意图和业务场景如何,这些企业的目标都是提高速度和灵活性,并为数字化转型做好准备。

云原生应用的常见场景大致可根据以下四项业务挑战进行分类:

1、加速应用交付

目标: 加快向客户交付现有应用和新应用的速度。

方案: 容器可以提供一个通用平台,使开发、运维、安全性、质量保证和其他团队联合起来,一同采用独立 于基础架构和应用技术的 DevOps。借助 DevOps 方案,团队可以采用自动化及 CI/CD 实践来快速、 放心地发布软件。利用基于容器的自动化功能解决部署问题后,可以缩短应用的交付周期,并使其 适应业务的发展步伐,而不是根据 IT 部门所能交付的内容来调整业务的发展步伐。

2、对现有应用进行现代化改造

目标: 对现有应用进行现代化改造,以满足市场和客户需求,从而加速实现变革。

方案: 许多产生价值的业务应用都是传统应用,其设计年代可能远早于数字时代。但是,直接淘汰换新不一定就是最优对策,至少在经济层面上并不可行。此外,也并非所有的传统应用都能现代化。

如果将传统应用迁移至云环境行得通,容器就可以为其提供相应的支持,消除对于底层基础架构的依赖性。这样,应用就能从企业内部基础架构移植到云端;如果需要,还可以对应用进行重构和重新架构,以实现云原生。容器平台方案还可利用平台的自动化功能和 DevOps 实践来简化现有应用的迁移。

3、开发新的云原生应用

目标: 加快新应用的开发速度,把握各种新商机。

方案: 如果企业能将理念快速转化为服务和产品、快速评估它们在新领域中所取得的业务成果,然后再进行快速的调整,那么不断变化的业务和客户需求将为企业带来巨大的商机。集基于服务的架构、 API 整合、容器化服务和编排以及各种 DevOps 实践、自动化功能和工具的强大支持于一身,旨在构建新应用的云原生方案可以加速从理念到创新应用的转化过程。

4、推动业务创新

目标: 加快整个企业的创新速度,以满足不断变化的业务需求。

方案: 面对日新月异的世界,停滞不前就意味着落后。IT 团队正在你追我赶,力图快速推出各种新功能和服务,让客户满意并帮助员工更智能地工作。成功取决于不断创新,而不仅仅依赖于新的工具和技 术。要想取得成功,需要推行变革性的新文化、新工具和新流程,以便于在整个企业内实现创新和开展实验。

参考


文章作者: 李小龙
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议,转载请注明来源 悟尘记 !
评论
 上一篇
跨团队、流程和应用的主动变革,支撑企业数字化转型 跨团队、流程和应用的主动变革,支撑企业数字化转型
快速向客户提供新服务和新功能是公司的关键竞争优势之一,这需要把数字化转型当做企业的一种战略性变革。本文将对如何支撑企业数字化转型进行分析并提出建议。
2020-03-22
下一篇 
附录2、Dockerfile 参考及最佳实践 附录2、Dockerfile 参考及最佳实践
本文是《Docker必知必会系列》第十篇,原文发布于个人博客:悟尘记。 上一篇:Docker必知必会系列(附录1):Docker 常用命令及示例 一、Dockerfile 简介Dockfi...
2020-03-02
  目录