企业需要迅速应对竞争威胁、不断变化的市场趋势和新技术的挑战,以有效竞争。这要求设计并构建与旧的传统、本地IT或某些现有云计算环境截然不同的软件。开发者需要云计算原生的优势,包括微服务基础设施、应用程序部署速度、自动化和虚拟化资源。到2025年,据Gartner估计,超过95%的新数字工作负载将在云计算原生平台上部署,这一比例从2021年的30%大幅上升。
尽管如此,人们对云计算原生计算的实际含义、其重要性以及如何实现云计算原生应用程序的优势往往存在根本性的分歧。本指南将为您提供对云计算原生计算及其优势的更好理解,以及如何在您的组织中开始实施云计算原生应用程序开发。
当使用“云计算原生”这个术语时,意味着与特定应用程序相关的技术、服务和开发活动从一开始就在云端构建和运行。这种方法构建和管理应用程序充分利用了云计算环境提供的弹性、分布式资源。云计算原生架构和开发与“云启用”的应用程序开发不同,后者使用传统的(本地或本地化)开发环境,然后将应用程序转移到云端,或者“基于云”的开发,其中某些应用程序方面通过云存储、访问或管理(例如,第三方托管)。
要获取云计算原生技术的优势,了解关键云计算原生要素及其如何共同创造为企业、政府和非营利组织等带来竞争优势至关重要。
基于敏捷和精益的应用程序开发原则,云计算原生开发和运营(DevOps)方法提供更健壮的软件,比传统软件系统更容易管理,所有这些都在缩短的时间内完成。这种方法有时被称为CICD,包括以下要素
持续集成 (CI): 持续集成是一种现代DevOps方法,在整个开发周期中,代码被频繁编写,并每天与现有代码进行测试和验证。使用自动化进行频繁测试,以便及早发现每个新批次代码的潜在问题并快速修复。这可以防止问题在整个代码库中连锁反应,并减缓更新和功能的交付。
持续交付 (CD): CD专注于自动交付CI提供的更高品质的代码。为了尽快部署代码,CD依赖于使用专注于特定任务的微型软件程序(微服务)而不是交付完成所有任务的大型应用程序。这种DevOps方法使得在准备好的时候交付微服务,而不是像传统方法那样等待大型应用程序所需的全部更新,同时利用自动化,使持续交付不占用额外的开发者时间。
基础设施即代码 (IaC): IaC的引入,一种用于定义和部署基础设施(例如,网络、虚拟机、负载均衡器、连接拓扑)的描述性模型,在每次部署中产生相同的环境。这允许开发者以更短的时间框架构建应用程序,因为不再需要为各种环境进行调整。
微服务架构将应用程序分解为小型自我驱动的软件组件。这些小型、独立的组件专注于特定的任务或问题,但也可以根据需要共同工作以执行功能。云原生开发由模块化、松散耦合的微服务推动,这有助于更快、更轻松地部署和更新应用程序。微服务也是云原生持续交付方法的一个必要元素。
容器化是开发者在整体软件开发过程中构建云原生应用程序的关键工具。具体来说,容器技术使得应用程序及其运行所需的一切打包成一个独立的轻量级单元(称为容器)。容器镜像软件用于执行容器的打包,这也是CICD云原生应用程序开发的关键组件之一。
容器还可以存储在容器注册库中,以便开发者根据需要访问和部署它们。微服务和容器的持续集成使开发团队能够在任何环境中部署应用程序,无需担心该环境的操作系统。容器编排自动化了容器的提供、部署、网络、扩展、可用性和生命周期管理(IBM,2022),同时优化容器运行时。Kubernetes是多个开源容器编排器之一,是最常用的,已被接受为云原生计算基金会(CNCF)的成员。有关CNCF容器编排器的更多信息可在CNCF网站上找到。
APIs(应用程序编程接口)是小型程序,帮助应用程序之间进行交互和通信,并促进微服务之间的信息传递。在云原生架构中,API可以在公共云、私有云和混合云环境中无缝工作,连接微服务、简化维护并增强安全性。例如,一家大型酒店连锁集团可能拥有一个广泛的网站和云中构建的预订管理系统,但他们需要更多的流量来增加预订量。开发允许潜在客户通过如Hotels.com或Expedia等旅游聚合器访问其网站的API,是一种在最小努力或对现有网站的修改下实现这一目标的好方法。
在云原生环境中,后端服务是指应用程序在完成功能或任务时通过网络接触到的任何内容。后端服务可以由云基础设施内的本地应用所有者或第三方提供商提供。后端服务的例子包括缓存系统、外发邮件(SMTP服务)、身份验证、数据库/数据存储,甚至通过API访问的消费者服务(例如,Google地图)。后端服务可以轻松“添加”或由云原生应用程序访问,无需对云基础设施进行重大努力或更改。这意味着可以在不进行额外软件开发或重大资源投资的情况下,将后端服务功能添加到云原生应用程序中。
(来源:《超越十二因素应用》,Kevin Hoffman,2022年。)
现代云原生架构的独特元素使开发者能够比在传统云环境中更快地构建应用程序。云原生环境中的自动化、扩展和功能部署的便利性支持快速“构建和运行”的软件开发过程,这对开发团队、用户和商业目标都有益。
在架构上,云原生应用程序是虚拟化的,在自主容器中运行,在共享基础设施上运行,而不是在本地应用程序中运行,这些应用程序只能在非虚拟化空间中运行。并且,与紧密连接到网络级资源的传统本地软件不同,云原生应用程序从物理基础设施和网络中抽象出来,因此可以轻松修改或移动。
云原生应用程序的一些额外优势包括
云原生计算使开发者能够构建和运行可伸缩的应用程序,这些应用程序天生具有自动获取额外云资源的功能,并在资源需求减少时缩减规模。这是云原生应用程序使用的独特竞争优势,用于提高效率、增强用户体验并保护应用程序的弹性。相反,由于传统设计和可能缺乏虚拟化,云启用应用程序不会自动扩展。虽然基于云的应用程序可能提供一些可伸缩性,但这取决于哪些应用程序方面是云管理的,以及它们的托管环境支持可伸缩性的程度。
云原生DevOps CI/CD方法使开发者能够快速部署新功能、服务和升级,显著提高上市速度。自动化、松散耦合的微服务和无拘无束的云原生基础设施的使用,都有助于企业领导者更快地实现业务关键绩效指标,同时让他们在云原生应用程序开发中更有效地工作。
云原生应用程序的一个关键优势是能够提升客户体验。这种提升是由于云原生开发提供的灵活性、弹性和独特架构。
云原生应用程序在两个客户体验领域特别出色。
避免停机:所有软件都需要不时进行修复、升级和打补丁。在云启用应用程序中,这些应用程序仍然与物理基础设施和网络相连,因此在进行更改时,停机是常见的,这也会让客户感到沮丧。基于云的应用程序经常会遇到相同类型的停机,但停机的时间和严重程度通常会根据所使用的第三方云提供商的环境而变化。另一方面,云原生应用程序从物理基础设施和网络中抽象出来,这使得停机频率大大降低,持续时间也更短。这提高了客户体验以及应用程序的弹性声誉。
根据客户需求发布产品和功能:当企业采用云原生软件开发并使团队更加敏捷时,一个结果是业务能够更快地响应客户的需求和期望。例如,如果客户对新的工具或服务感兴趣,在云原生环境中,就不再需要重新工作整个应用程序。开发者可以简单地将功能作为一个后台服务添加,并通过各种API或创建一个微服务来部署所需的功能。具有微服务架构的云原生解决方案可以以传统开发时间线的一小部分为客户构建,并且企业可以通过持续交付快速部署它们。
就像任何计算环境一样,网络安全至关重要。对于许多公司来说,网络安全知识和经验并不在组织内部 readily available,但是有各种受人尊敬、经验丰富的公司提供云原生环境中的托管网络安全服务(例如,谷歌、IBM、微软、AWS)。还有像Kubernetes这样的开源组织提供的网络安全服务,对于那些刚开始的企业。因此,企业可以迅速进入云原生应用世界,并利用现成的网络安全服务来维持强大的安全态势。
此外,云原生应用程序还有一些固有的网络安全优势。例如,随着每个微服务的构建,安全性是为那个小程序设计的(例如,“设计即安全”),而不是将一个安全系统应用到大型应用程序上——这从一开始就积极影响了云原生应用程序的安全态势。此外,由于云原生代码由于CICD方法而不断变化,恶意行为者访问、研究和利用代码弱点的窗口更小。
鉴于云原生技术的快速部署、显著的扩展性、易于修改和维护以及安全优势,这种类型的云计算实现成本效益并不令人惊讶。例如,可扩展性意味着云原生应用程序根据需要调整其资源消耗,而不是保持在所需的最高水平。这使成本模型基于消费,可以实现显著的成本节约。此外,由于云原生技术不依赖于传统开发环境,开发团队可以更快地部署云原生应用程序,并以更少的开发工作量对其进行修改或添加新功能。这转化为劳动力和资源成本节约。
随着新技术的增加,创新所需的节奏加快,采用云原生应用程序、服务和技术的企业将处于适应和繁荣的有利位置。由于它们能够轻松扩展、微服务架构和轻松访问后台服务,这些组织将能够快速添加功能,利用新技术并最小化开发工作量来抢占市场份额。此外,它们将能够以最小的更改将新功能集成到各种公共云、私有云或混合云环境中,因为容器保留了微服务运行所需的一切。
当你准备好开始构建自己的云原生应用程序时,第一步是规划。在你开始编码之前,花时间考虑以下问题。
你正在构建的应用程序的目标是什么?它的主要功能元素有哪些?
将任务/功能分解,思考每个如何作为微服务应用,并通过容器镜像软件捆绑进容器。
考虑第三方提供商提供的哪些支持服务可以用来执行您应用程序的一些任务。从头开始构建它们或者添加第三方支持服务更有利吗?例如,是构建文档数据库还是添加MongoDB Atlas作为支持服务更有利?
研究编排层选项,并考虑哪个平台适合您(例如,Kubernetes、AWS Fargate、Google Cloud Run)。
思考您想使用的API和API网关软件,以管理微服务间的通信以及外部设备对您应用程序的访问。
考虑如何利用现代DevOps方法,如CICD和IaC,以提高您应用程序的功能、功能、部署、扩展和维护。
(来源:微软,云原生应用程序简介,2022年4月。)
以下是一个使用常用工具和平台的云原生开发栈示例。
Docker是一个开源平台,用于创建、部署和管理虚拟化容器,并应用一个通用的操作系统。资源隔离允许多个容器在没有问题的情况下使用相同的操作系统。
Kubernetes是一个开源平台,管理并编排Linux容器,确定这些容器将在哪里运行以及如何应用。
Terraform用于实施IaC。具体来说,它将资源定义为代码,并应用版本控制,以便可以轻松地确定哪些资源发生了变化以及何时发生变化。
GitLab CI/CD,正如其名所示,用于实施持续集成和持续开发(CICD)。它使开发者能够自动化软件测试和部署。GitLab还用于安全分析和单元测试。
MongoDB Atlas是一个开发者数据平台,它包含一个灵活、易于使用的文档数据模型,并与现代云原生开发方法保持一致。它提供数据库即服务(DBaaS)功能,MongoDB Atlas可在全球范围内扩展,优化价格和性能,并支持组织对应用程序数据的需求,而无需开发团队和运营团队学习不同的系统、查询语言或部署模式。
Node.js是一个基于JavaScript运行时的平台,用于创建实时微服务。例如,新闻源、聊天功能等。Node.js还常用于创建虚拟服务器,以及定义将微服务连接到外部API的路由。
这个开发栈示例只是众多示例之一。使用不同的工具运行应用程序,以确定它们的优缺点以及如何适合您的开发风格。考虑构建一个简单的支持服务来获得经验。无论您使用什么工具或构建什么平台,加强您的云原生应用程序开发技能都将是对您的简历和专业技能的重要补充。
云原生应用程序(app)是一种其技术、服务和开发从一开始就都构建和存在于云中的应用程序。
云原生架构利用优化用于云环境的软件组件和开发理念。云原生架构的关键组件包括
DevOps方法:一种协作开发和运维方法,旨在比传统软件开发方法更快地创建应用程序。
微服务:微服务将应用程序分解为小型自主软件组件。
容器:容器实际上“包含”应用程序捆绑包及其运行所需的一切,形成一个独立的轻量级单元(称为容器)。
应用程序编程接口(API):API帮助应用程序(接口)相互通信,并促进微服务之间的信息传递。
后端服务:后端服务是指应用程序在完成功能或任务时通过网络接触到的任何东西。后端服务可以由云基础设施中的本地应用所有者或第三方提供商提供。
云原生安全与应用于云环境以进行保护的软件、实例化控制和附加服务相关。这包括保护系统的完整性和应用程序,以及从网络攻击或灾难性损害中保护数据和通信路径。例如,云原生安全中的“安全设计”术语与每个微服务构建时为该小型程序设计安全性的事实相关,而不是将一个安全系统应用于大型应用程序。
通常由云提供商或第三方提供,云原生安全不驻留在本地,并且可以轻松更新以解决云环境的不断变化需求。
云原生技术的关键优势包括
可伸缩性
更快的市场速度
在停机和服务更新影响方面更好的客户体验
通过开源提供商增强的安全资源,以及安全设计的微服务开发
成本效益 适应新技术