Alan Zeichick | 高级撰稿人 | 2025 年 10 月 8 日
云原生计算是一种充分利用云技术平台功能的应用设计、创建、部署和运行方法。在此之前,传统软件(有时被称为“单体软件”)虽然在原有的数据中心运行模式外发展出了公有云运行模式,但却无法充分利用云环境的可扩展性和成本效率优势。
在这一背景下,云原生计算诞生了。相比安装在服务器上的单体应用,云原生软件是由数十、数百,甚至数千个小型软件组件编译而成的。这类组件被称为微服务,位于安装在云服务器上的容器中。微服务彼此之间通过安全的高速网络通信,协作解决业务问题。
这种模块化方法有哪些优势?优势有很多,我们将在本文中逐一探讨。以下是其中四项最显著的优势。
以下将带您更深入了解云原生计算及其相关概念和术语。
“云原生”是指以一种充分利用分布式云计算优势的方式来设计、构建、部署、运行和管理应用,以此方式构建的云原生应用旨在充分利用云技术平台特有的可扩展性、弹性和灵活性优势。
以上就是云原生计算基金会 (CNCF)(一个管理众多云原生开放标准的独立组织)对“云原生”的定义。
云原生技术支持组织在公有云、私有云和混合云等现代化、动态环境下构建和运行可扩展应用,其中的典型代表包括容器、服务网格、微服务、不可变基础设施和声明式 API。
云原生技术能够协作构建弹性、可管理、可观测、松散耦合的系统,还能在强大的自动化技术的加持下帮助工程师频繁、可预测、尽可能轻松地做出巨大改变。
在这里,我们有必要细细拆解“云原生”这个概念,探究它的各种相关术语。
其中,可扩展应用是指无需重写或重新设计就能有效应对工作负载增长的应用;动态环境是指云计算平台,例如 Oracle Cloud Infrastructure (OCI) 和来自所有其他主要服务提供商的公有云、私有云和混合云。
此外,容器负责对微服务打包;服务网格基础设施负责通过支持安全性、可观测性、策略实施和服务发现功能的高速网络联结容器;不可变基础设施意味着一旦部署完毕,容器将不可更改,只能通过高度可控的方式予以替换,还意味着分布式应用可预测和可复制,保证一个容器/微服务的所有副本都完全一致。
最后一个非常重要的概念是“松散耦合”。它意味着当相互协作时,微服务之间通过清晰定义的协议通信。这种协作被称为“声明式 API”,负责精心描述相关微服务的职责、请求何种数据以及将在完成自身工作后返回何种数据。此外,“松散耦合”还意味着微服务自身内部的运作方式是隐藏的,而且可以随时在不影响应用其他部分的前提下予以修改。这就为整个应用赋予了出色的弹性、可扩展性和更新简易性。
云原生应用可在所有云架构下运行,包括公有云、私有云、混合云和多云。其中,公有云架构下,数据通过互联网在云技术应用和最终用户/企业数据中心间传输;私有云架构下,数据完全在安全网络(例如一项部署在一个数据中心内部的云技术服务)中传输;混合云是公有云、私有云和企业数据中心的结合体;多云部署则涉及一个以上的商用云技术服务提供商,例如应用的一部分基于 OCI 运行,另一部分基于 Microsoft Azure 运行。
关键要点
云原生应用由相互独立的微服务构成,微服务将被打包为轻量、自包含的容器,而容器具有高度的可移植性,支持快速地按需扩展或缩减。通过将微服务封装进容器种,云原生技术能够在各类运行环境(包括数据中心和商用云技术服务)中无缝部署,并可在各种类型的服务器(如 Linux 和 Windows)上运行。
在最常见的云原生设计中,应用功能被拆分为数十、数百,甚至数千项分别执行一项特定任务的微服务。在编写完毕后,微服务将被封装到一个容器映像(一种可被加载到服务,然后执行的交付载体)中。目前,最流行的容器标准是 Docker,这是来自 CNCF 的一种开源格式,已获得当今几乎所有云技术服务提供商的支持。
一个完整的企业应用可能由数千个 Docker 容器构成。如何将所有这些容器部署到云技术服务上,通过合适的安全机制和高速网络将它们连接起来,确保来自某个微服务的消息能被路由到正确的接收方,并处理好扩展性问题以及偶尔出现的服务故障?这就轮到开源的 Kubernetes 平台上场了。与 Docker 一样,Kubernetes 同样背靠 CNCF,也已成为了一项行业标准。关于 Kubernetes,一言以蔽之,它能够有效处理和自动执行大型云原生应用在运行、管理和扩展上的所有复杂工作。
简而言之,通过使用 Docker 容器封装微服务,再使用 Kubernetes 在云技术服务上部署 Docker 容器,您就可以获得一个全面、可扩展、弹性的云原生应用。
与云原生应用相对的是基于单一代码库,通常由单一开发团队开发的传统/单体应用。它们由开发团队编写和测试,然后被交付至运营团队,由其部署到服务器。当发现软件缺陷时,开发团队将查找问题,进行修正,然后向运营团队交付新版本软件,最后由运营团队停用原始版本软件,安装并重启新版本软件。当需要添加新的软件特性时,开发团队和运营团队将重复这一过程,替换和重启软件。
相比之下,云原生应用是以众多微服务集合的形式编写的,每个微服务都是独立的软件单元。这些软件单元可独立进行设计、编码、测试和部署,不会影响应用的其他部分,从而使修订过程更高效、更新更流畅。开发人员可以为自己构建的特定微服务,选择最合适的工具(包括编程语言)。
我们打个比方:想象一下,您家里客卫的水龙头开始漏水了。要修好它,您需要搬出 House 4.1,用水龙头不漏水的 House 4.2 替换 House 4.1,然后再搬回去。想把单水槽更换为双水槽?那就再搬出去,安装 House 4.3。这就是单体架构(传统软件模式)。您会这么做吗?当然不会!因为一个水管工就可以为您更换水龙头,一个承包商就可以为您重新设计客卫而不影响您家里的其他设施。这就是云原生模式。
云原生计算的出现,同时带来了一系列全新的概念和术语,这些内容对于理解该模式的优势至关重要,具体包括:
Kubernetes 旨在实现高可用性 (HA),它提供的用于修复故障容器的自动化特性是云原生模式的核心支撑。这类轻量、自包含的程序包(通常由 Docker 创建)包含应用在不同计算环境中稳定运行所需的全部依赖项。这种容器化实现了应用的可移植性,有助于快速部署应用。
归根到底,容器提供了一种标准化的隔离环境,它能够降低依赖关系间的冲突风险,使应用独立运行。这种隔离还能将潜在安全漏洞的影响限制到单个容器内,从而提升安全性。此外,容器的轻量化特点也有助于提高资源利用率。
微服务是将复杂应用拆分为多个更小的、独立的服务。每个服务专注于特定功能,这使并行开发成为可能,能够加快开发速度。
微服务架构提升了敏捷性和灵活性。每个微服务都可以独立开发、部署和扩展,支持快速更新和新功能发布。这种模块化设计还能改善故障隔离,使得单个服务出现问题不会影响整个应用。
不可变基础设施是指资源在部署后绝不直接修改的架构理念。所有变更都通过创建配置已更新的新实例来实现,这能保证环境一致性,并简化回滚流程。对此,基础设施即代码 (IaC) 工具可自动化基础设施的供应,提升效率和可重复性。
IaC 允许以代码的形式来定义基础设施,从而实现更出色的版本控制、自动化测试以及在不同环境间的一致部署。该理念将基础设施视作应用的核心组成部分,对其采用与代码库同等严格的管理和管控标准。
自动化是云原生的关键环节,旨在实现大规模部署,而这类部署如果依靠人工管理将难以完成。对此,容器编排工具(如 Kubernetes)可以自动化管理和部署容器化应用。这些工具提供高可用性、高效的资源分配和简化的缩放能力,让复杂的分布式系统更易于管理。
自动化和编排对于实现云原生系统所具备的可扩展性、容错性和自我修复能力至关重要。例如,Kubernetes 云技术服务支持动态资源分配,有助于应用按需扩展和进行自动化故障恢复。
云原生应用在设计时就充分考虑了可观测性,这意味着开发人员能够更好地理解系统的内部运行状态。这方面包括收集和分析指标、日志和追踪,从而深入了解应用性能、资源使用情况和潜在问题。
高级监控工具可实时洞察应用的健康状况和性能表现。这些工具支持主动式问题排查,帮助开发人员在问题影响用户之前就发现并解决问题。总之,可观测性和管理服务对于优化应用性能和资源分配至关重要。
弹性有助于云原生系统从故障中恢复和维持稳定,是云原生系统的关键特性。这一特性通过副本、负载均衡和自动恢复机制等策略来实现。自我修复能力,能够在无需人工干预的情况下检测并修复问题,维持高可用性。
云原生应用的一大设计理念是优雅地处理故障,尽可能减少停机时间。对此,自我修复机制可以自动检测并解决问题,确保应用平稳运行。这种弹性对于关键业务运营至关重要,并能带来可靠的用户体验。
相较于运行传统单体应用,云原生方法能够为企业带来显著优势。这些优势包括:
以下是云原生计算的一些关键特性和优势。
| 特性 | 优势 |
|---|---|
| 微服务架构 | 当企业应用以小段代码形式编写,每段代码实现不同的业务功能(即微服务)时,应用的构建速度更快、更易管理、扩展性更强、弹性更高,且升级和增强也更为简便。 |
| 容器和容器化 | 微服务通常被打包到容器中,这些容器可以轻松部署到云服务器上。由于容器经过精心构建和定义,它能够在云技术服务中任何兼容的服务器上运行。如有需要,您甚至可以部署多个容器副本来应对重型工作负载,只需将旧容器替换为升级版本,而不会影响应用的其他部分。 |
| 持续集成和持续交付 (CI/CD) | CI/CD 是一种流程,开发团队通过管道方式对微服务进行设计、构建、测试并部署到容器中,再将这些容器部署到云服务器。CI/CD 能够加快发布周期、提升开发人员生产力,并适配自动化工作流以加快软件部署速度。 |
| 不可变基础设施 | 容器等不可变组件在部署后绝不被修改。当需要更新时,直接替换容器即可。其优势在于软件环境保持一致、发布流程简化,并且能够轻松将应用复制到新的云数据中心,甚至新的服务提供商。 |
| DevOps 实践 | DevOps 是指将传统的开发团队与运维团队合并为一个整体。DevOps 团队负责编写软件、测试软件,随后进行部署并管理部署后的运行。当 DevOps 与 CI/CD 和自动化相结合时,新软件能够快速上线,且由于责任明确,问题可以得到快速解决。 |
| 可观测性和监控 | 可观测性有助于 DevOps 团队了解应用运行时的内部状态。监控是指查看日志文件并分析性能指标的实践。两者结合能够帮助团队更快地发现和修复问题、调优性能,同时满足服务等级要求,确保应用达到承诺的可用性和响应速度。 |
| 云技术平台 | 云技术平台(例如 OCI)通常会提供运行云原生应用所需的一切支持,包括可托管 Docker 容器的服务器、安全的高速网络、预安装的 Kubernetes 引擎,以及支持可观测性和监控的各种工具。此外,云原生应用的可扩展性有助于提高效率,并降低云原生软件的运营成本。 |
云原生计算听起来可能很复杂。而事实也确实如此,尤其是对于那些刚刚接触云技术、且多年甚至数十年来一直构建传统单体软件环境的企业而言。以下是企业首次全面采用云原生计算时面临的一些挑战。
没有任何两家企业会采用完全相同的云原生转型路径。但您会发现,大多数企业都会遵循以下七项优秀实践。
Oracle 提供构建和部署云原生应用所需的一切,包括工具、服务和自动化技术,使开发团队能够快速构建应用,同时减少运维工作负担。
Oracle 云原生服务运行于 Oracle Cloud Infrastructure (OCI) 之上,该平台基于标准构建,相比其他云技术服务提供商不仅性能更高,而且成本更低。通过采用基于开源和开放标准的服务,OCI 使开发人员无需重构即可在任意云技术平台或本地环境运行应用。这种灵活性让团队能够专注于构建和创新,例如借助强大的生成式 AI(乃至预构建的 AI/机器学习服务),为现有应用注入新功能和智能。
云原生应用开发所产出的应用,是否真的远优于传统开发的应用?是的,其优势显而易见:云原生应用具备可扩展性,因为其功能被拆分为微服务并可独立管理。此外,云原生应用支持高度分布式运行,不仅保持独立性,而且可以根据应用需求分配资源。
最后,云原生应用可以跨私有云、公有云和混合云环境提供一致的体验,有助于企业推进业务战略和创造更多价值。利用响应迅速、可靠且可扩展的云原生应用,企业可以充分发挥云计算的优势。
想要深入了解云原生架构?请下载我们的免费电子书,了解为何当下所有组织都可以采用云原生开发策略。
云原生架构与传统应用架构有何不同?
云原生架构将大型、复杂的业务应用拆分为多个微服务,每个微服务实现一项业务功能。这些微服务通过高速网络相互通信、协同完成任务,应用由此正常运行。每个微服务都独立定义、设计、开发、测试、部署、管理和升级,从而实现更快的部署和更高的可扩展性。例如,当某个微服务面临高负荷运行时,云原生应用可以自动在另一台服务器上创建该微服务的副本,并在两者之间分担工作负载。与之相对,传统应用架构采用单一软件代码库(即单体应用),它作为一个整体进行设计、开发、测试和部署。漏洞修复或升级都需要修改整个单体应用,之后必须重新部署。因此,软件发布通常速度缓慢,扩展性也面临挑战,往往需要重新架构(重写)软件,或安装在更快、更昂贵的服务器上。
企业应如何有效地将现有应用转型为云原生应用?
现有的单体应用可以通过重构改造为云原生应用。具体流程是:先识别出能够拆分为微服务的代码部分,通常从最容易分离或造成性能瓶颈的代码模块开始。通过一次只处理一个模块,单体应用就能逐步获得云原生方法带来的诸多优势。
什么是 CNCF?
CNCF 即云原生计算基金会 (Cloud Native Computing Foundation),是 Linux 基金会旗下的一个厂商中立的开源组织。CNCF 的目标是推广云原生技术,并为众多项目和行业标准提供关键支持,例如 Docker 容器格式以及 Kubernetes 容器自动化和编排平台。包括 Oracle 在内,很多云技术服务提供商均为 CNCF 的工作做出贡献,并采用其标准来提升云生态系统之间的互操作性。
云计算和云原生有什么区别?
云计算指由 Oracle 等商业服务提供商提供的托管计算服务,包括各类服务器、高速网络、存储系统、高级计算函数库(如 AI 和安全相关库),甚至业务应用。您通过网页浏览器访问的几乎所有网站或应用,其全部或部分都部署在云端;其余则运行在企业数据中心中。很多手机应用也依赖云计算来提供基本功能。
云原生则是一种构建业务应用的方法,它将应用拆分为数十甚至上百个微服务,每个微服务封装一项关键业务功能。这些微服务通过安全的高速网络相互协作,各自承担一部分工作负载,共同完成业务处理。云原生应用充分利用云技术服务提供商的资源,实现应用的可扩展性、高效性和弹性。
注:为免疑义,本网页所用以下术语专指以下含义: