什么是云原生?
云原生是一种应用程序开发方法,它使用微服务、容器、容器编排器和不可变基础设施等技术,在云计算环境中构建、部署、运行和管理响应迅速、可扩展和容错的软件应用程序。
云原生解析
云原生描述了为在云中运行而构建的软件应用程序的设计和运行。云原生加速了数字化转型,因为它最大限度地利用了云交付服务的灵活性、可扩展性和弹性,从而高效地交付易于管理和维护的应用程序。
单片与云原生应用程序:举例说明
想象一下,一家银行需要创建一个新的应用程序。在云计算之前,银行会聘请开发人员构建应用程序,购买本地部署运行应用程序所需的物理基础设施,并在应用程序的整个生命周期内维护这些基础设施。要访问该应用程序,用户需要连接到银行的服务器,由于这些服务器承载着该应用程序提供的每项服务--查询账号、转账等--更新和维护任何一项服务都需要关闭整个系统。
当开发人员开始在云中托管应用程序时,他们将应用程序从本地部署环境中 "移花接木",同时保留了应用程序的整体架构及其局限性。他们不再购买和管理服务器来托管应用程序,而是向云服务提供商(CSP)租用计算资源。但是,平台即服务、容器即服务和 无服务器基础设施等新服务为以极快的速度(相对而言)构建、部署和管理应用程序带来了新的机遇。
云原生的历史
本世纪初,随着虚拟化的出现和亚马逊网络服务( AWS)等 基础设施即服务(IaaS )提供商的出现,本地部署应用程序的做法开始发生转变,开发人员可以在云中配置和管理虚拟机。这为谷歌应用引擎和 Heroku 等 平台即服务(PaaS) 产品的发展铺平了道路,这些产品为构建和部署基于云的应用程序提供了更高级别的抽象层。
但早期的平台缺乏灵活性,开发人员只能使用专有的应用程序接口和工具。为此,出现了一种新的方法,重点是利用开源技术构建专为云设计的应用程序。
这种方法的一个早期例子是 "十二要素应用程序 "方法论,它包括一套用于构建云原生应用程序的原则,这些应用程序经过工程设计,具有可移植性、可扩展性和弹性。这些原则包括使用声明式格式进行配置、依赖无状态进程,以及将后备服务视为附加资源。
大约在同一时间,Docker 容器化技术作为云原生应用程序的关键构件出现了。Docker 使开发人员能够将应用程序和依赖项打包成轻量级容器,轻松部署到不同的云环境中,解决了应用程序的可移植性问题。
2014 年,谷歌发布了开源容器编排平台 Kubernetes。Kubernetes - 为自动化部署、大规模扩展和管理容器化应用程序提供了一套功能强大的工具 - 成为管理云中容器化应用程序的标准。
此后数年,从初创企业到大型企业,各行各业的组织都开始采用云原生方法来构建应用程序,并带动了开源技术、工具和平台生态系统的发展。
什么是云原生应用程序?
从基本层面上讲,云原生应用程序是一种软件程序,其功能被分解成微服务,即相互独立运行的小型、松散耦合的服务。由于这种模块化结构,云原生应用程序比传统的单体应用程序更容易构建和更改。开发人员可以在不中断系统的情况下为应用程序部署新功能和更新。
相比之下,单体应用程序是作为单一代码库构建的,所有组件紧密耦合,并在单一服务器或机器上运行。这意味着应用程序的更改或更新需要对整个应用程序进行重新编译和重新部署。
云原生应用所特有的其他技术和方法包括
- 基于容器的基础架构,通常是使用基于 Kubernetes 协调的 Linux 容器
- 围绕松散耦合的微服务构建的架构
- 敏捷 DevOps 式开发
- 使用持续集成和持续交付(CI/CD)
- 使用开放源代码和程序库
- 无服务器功能和 PaaS
什么是云原生架构?
云原生架构是一种设计方法,它支持快速、灵活的应用开发技术,将云原生应用构建为一组组更小、可组合的片段,便于维护、更改、大规模扩展和迁移。云原生架构的组成部分如下。

不可改变的基础设施
不可变基础架构是一种模式,当需要更新、修复或修改某些内容时,服务器和虚拟机(VM)会被替换,而不是更改。如果需要进行更改,就会从通用映像中生成包含这些更改的新组件,而旧组件则会退出生产。这种方法为云原生部署创建了一个可预测的流程。
微服务架构
微服务架构推动了云原生的兴起,这种软件设计模式强调使用可独立部署的服务,每个服务都有特定的业务功能,它们在云原生应用中协同工作。微服务允许开发人员通过组合更小、更易于管理的组件来构建复杂的应用程序,这些组件可以独立地进行大规模扩展和更新。
应用程序接口
API 是云原生应用程序中使用的一种通信工具。它们有助于在独立的微服务之间进行标准、有效的信息传输,使它们能够共享信息,从而作为一个有凝聚力的整体发挥作用。
服务网格
服务网格是云原生架构中的一个层,用于管理微服务之间的通信。服务网格还可以为服务添加流量管理、安全和其他功能,而无需添加新代码。
集装箱
容器允许将微服务与它们的依赖项(代码、资源文件、系统工具和系统库)一起包在自足的环境中,以便它们在任何情况下都能始终如一地运行。这样,开发人员就可以轻松重现或分析和隔离服务。由于 容器容纳 了应用程序运行所需的一切,因此云原生应用程序可以部署在本地或云中的任何地方。
每个微服务部署在一个容器中,各组容器作为一个系统或 "堆栈 "协同工作,形成完整的本地应用程序。动态协调系统会自动监控每个容器,根据用户需要启动和关闭它们,从而提高可扩展性和效率。
什么是云原生应用程序开发?
云原生应用程序开发是为在私有云、公有云或混合云中运行而构建稳定、可扩展应用程序的过程。常见的云原生开发实践包括
持续集成
持续集成(CI)是一种将代码变更自动构建、测试和集成到中央存储库的做法。这有助于确保代码更改经过全面测试,并与应用程序代码库的其他部分集成。在云原生开发中,CI 通常与容器化结合使用,后者允许开发人员将代码、依赖关系和配置打包成一个独立的单元。
持续交付
持续交付(CD)是 将在 CI 流程中创建的应用程序交付 到类似生产环境的过程,在生产环境中, 应用程序将 通过额外的自动测试,以消除意外的性能问题。CD 允许对生产中的应用程序进行更多增量更新,有助于降低交付变更的成本、时间和风险,使开发人员能够以更快的速度和更高的频率构建、测试和发布高质量软件。在云原生开发中,CD 通常与自动化和 DevOps 实践结合使用,这有助于简化软件开发和部署流程。
DevOps
DevOps 是一种将软件开发和 IT 运营相结合的方法,旨在提高软件开发和交付的效率、速度、质量和安全性。
在云原生开发中, DevOps 通常用于实现软件开发和部署过程中许多方面的自动化。注重快速迭代的方法与云原生模式相一致,有助于组织快速交付应用程序和服务。这使企业能够为客户提供更好的服务,并更有效地参与行业竞争。
无服务器
无服务器计算与微服务结合使用,是一种云原生开发模式,允许开发人员编写和部署代码,而无需管理底层云基础设施。由于资源是按需动态分配的,无服务器计算可以降低成本,提高可扩展性。
云原生应用程序开发的优势
云原生实践为推动数字化转型和业务增长提供了最佳机会。本地应用程序开发具有成本效益,可通过持续集成/持续交付(CI/CD)轻松更新和维护应用程序。它还能帮助组织打破开发、运营和安全方面的孤岛,在整个应用程序开发生命周期内提供一致的体验。
云原生应用程序开发的其他优势包括
提高速度
云原生应用程序采用敏捷开发流程进行开发,各个服务独立开发和部署,这样可以更快速地迭代和部署新功能或更新。
提高质量和可靠性
通过云原生应用程序开发,开发人员可以专注于在应用程序中提供价值,因为云提供商管理着底层基础设施。这也提高了运行环境的一致性和可靠性。
经济高效的运营
云原生应用程序旨在实现横向扩展,可按需动态添加或移除资源。相反,单体应用程序通常是纵向大规模扩展的,即在服务器或机器上增加额外的资源,以处理增加的需求。这种方法可能既昂贵又低效,因为它往往要求超量配置资源以应对高峰需求。
更好的适应性和可扩展性
云原生应用程序开发可以轻松跟上客户和业务不断变化的需求,因为它提供的应用程序由松散耦合的微服务组成,易于实时更新、更改和大规模扩展。
增强复原力
云原生应用程序开发提高了复原力,因为它使用的是可以隔离的微服务。如果单体应用程序的一个组件出现故障,就会导致整个系统瘫痪。但容错云原生应用程序的设计目的是,即使个别服务出现故障,也能持续运行。
供应商锁定风险最小化
由于云原生应用程序开发使用容器在不同供应商的基础设施之间传输微服务,因此组织不会受到特定供应商的束缚。他们可以使用多个云提供商的服务,并选择最适合其业务的选项。
简化故障排除
云原生应用程序开发简化了故障排除工作,因为其微服务架构可以轻松跟踪问题到源服务,并在服务器不停机的情况下解决问题。
减少攻击面
云原生应用程序是为安全而设计的,各个服务之间通常是相互隔离的。这就减少了传统单体应用程序的攻击面,因为传统单体应用程序由紧密耦合的组件构成,攻击者更容易访问敏感数据。
什么是云原生堆栈?
云原生堆栈是指开发人员用于构建、管理和运行云原生应用程序的各层工具和技术。云原生堆栈的层级包括
基础设施层
基础设施层是云原生堆栈的基础。它由云原生应用程序开发的支持组件组成,包括操作系统、存储、网络和其他计算资源。基础设施层由第三方云提供商管理。
配置层
云原生堆栈中的配置层由用于创建和确保基础设施安全的工具组成。这包括扫描和存储容器映像以及启用策略设置和执行的工具。
运行时层
运行时层包含容器在云原生环境中运行所需的一切。这包括用于启动容器的代码和为容器提供持久存储的工具。
协调和管理层
协调和管理层类似于操作系统,负责将云组件整合在一起,使它们能够作为一个有凝聚力的整体共同工作。Kubernetes、Docker 和 OpenShift 等协调工具使开发人员能够部署、管理和大规模扩展容器化应用程序。
应用程序定义和开发层
应用定义和开发层由开发人员用来构建应用的所有技术组成,包括数据库、消息系统、容器映像和 CI/CD 管道。
可观测性和分析工具
可观测性和分析工具可观测云原生堆栈中的所有层,以监控和评估云应用程序的健康状况,确保应用程序的服务质量不受干扰。它们分为日志、监控和跟踪三大类,用于监控 CPU 使用率、延迟和内存等指标。
云原生安全挑战
由于云环境和云原生环境具有不同的架构,依赖于不同的技术,因此 云安全 和云原生安全也有所不同。云安全要求采用广泛、全面的安全方法,因为它涵盖了一系列资产和应用。 而云原生安全则要求采用专门的方法,考虑到云原生应用程序和基础设施独特的安全问题。
常见的云原生安全挑战包括
缺乏可见度:云环境的复杂性使其难以获得完全的可见性,从而造成了安全风险滋生的盲区。
多种威胁:云威胁参与者在创建安全解决方案的同时,也在快速寻找创造性的攻击路径和变通办法。
无法执行一致的政策:一个组织的云原生基础架构通常包含多个云服务提供商和不同的安全工具,因此很难集中管理安全策略并统一应用。
配置错误:在应用程序开发过程中一直缺乏安全集成,这就为配置错误和开源代码漏洞留下了空间,可能导致数据暴露和未经授权的 工作负载 访问。
安全进程缓慢:维护高速 CI/CD 管道所要求的合规性和安全性会降低云计算固有的灵活性、敏捷性和速度。
不安全的默认设置:CSP 提供的许多云原生工具都提供灵活的设置,包括可能导致违反安全规定的不安全默认设置。
软件供应链漏洞:开源软件中未修补的漏洞增加了软件供应链的脆弱性。
有了正确的工具,安全小组就能应对云原生安全挑战。 云原生应用程序保护平台 (CNAPP) 将在单一仪表板中提供持续的可视性,并在整个云环境中持续执行安全策略。