云原生软件应用程序采用松散耦合的微服务,这些微服务部署在采用低开销编排、运行时和网络服务的轻量级容器环境中。

什么是云原生?

云原生不是指应用驻留位置,而是指其构建和部署方式。

  • 云原生应用由不同的可复用组件(称为微服务)组成,旨在集成到任何云环境中。
  • 这些微服务充当构建块,通常打包在容器中。
  • 微服务作为整体构成一个应用,但每个微服务都可以单独扩展,不断改进,并通过自动化和编排过程快速迭代。
  • 每个微服务的灵活性都增强了云原生应用的敏捷性和持续改进。

微服务和容器

微服务(也称为微服务架构)是一种架构方法,单个应用由许多松散耦合并且可独立部署的小型组件或服务组成。 这些服务(也称为微服务)通常具有自己的技术栈,包括数据库和数据模型,并通过 REST API、事件流和消息代理的组合相互通信。

因为微服务可以独立部署和重新部署,而不影响彼此或影响最终用户体验,因此它们完美地匹配自动化迭代式交付方法,例如持续集成/持续部署(CI/CD) 或 DevOps。

除了用于创建全新的云原生应用外,微服务还可用于对传统的单体式应用进行现代化改造。

在最近对 IT 主管、开发人员主管和开发人员的调研中,87% 的微服务用户同意值得花费资金和努力以采用微服务。

开发人员通常在容器中部署微服务。容器是轻量级的可执行应用组件,用于将应用源代码 (在本例中,是微服务代码)和在任何环境中运行代码所需的所有操作系统 (OS) 库与依赖关系组合在一起。 容器是现代云原生应用的事实上的计算单元,比虚拟机 (VM) 更小、更高效、移植性更高。

容器通过在混合多云环境(公有云、私有云和本地基础架构)中实现一致的部署和管理体验, 放大微服务的优势。 但随着云原生应用的激增,容器及其管理复杂性也与日俱增。 使用容器化微服务的大多数组织也使用容器编排平台(如 Kubernetes)以大规模自动执行容器部署和管理。

优点和缺点

企业发现自己投入越来越多的精力来改进现有应用,构建新应用以及增强用户体验。 云原生应用通过提高应用性能、灵活性和可扩展性,以满足这些需求。

优势

  • 与传统的单体式应用相比,云原生应用更易于管理,因为可使用敏捷方法和 DevOps 流程进行迭代式改进。
  • 云原生应用由各个微服务组成,可逐步改进,并且可自动持续地添加新的和改进的应用功能。
  • 改进可采用非侵入的方式进行,不会造成宕机,也不会影响最终用户体验。
  • 通过弹性基础架构支持云原生应用,更轻松地进行缩放。
  • 云原生开发过程能够更紧密地匹配当今的业务环境所要求的速度和创新。

缺点

  • 虽然微服务支持迭代式应用改进方法,但也产生了管理更多元素的需求。 云原生应用不再是一个大型应用,需要管理更多小型的不同服务。
  • 云原生应用需要更多工具集以管理 DevOps 管道,取代传统监控结构以及控制微服务架构。
  • 云原生应用支持快速开发和部署,但也需要一种企业文化,以适应创新的步伐。

开发原则

无论是创建新的云原生应用还是更新现有应用,开发人员都遵循一组一致的原则:

  • 遵循微服务架构方法: 将应用分解为单功能服务(称为微服务)。 微服务松散耦合,但保持独立,能够逐步进行自动化和持续的应用改进,而不会导致宕机。
  • 依靠容器实现最大程度的灵活性和可扩展性: 容器软件包及其所有代码和依赖关系位于同一位置,使软件能够随处运行。 这就能够在多云环境中实现最大程度的灵活性和可移植性。 容器还能够使用用户定义的 Kubernetes 编排策略,快速进行缩放。
  • 采用敏捷方法: 敏捷方法有助于加快创建和改进流程。 开发人员可以根据用户反馈快速迭代更新,使运行的应用版本尽可能地满足最终用户的期望。

存储

云原生应用通常依赖于容器。 容器的吸引力在于非常灵活、轻便而且可移植。 早期使用容器的用户往往侧重于无状态应用,无需将用户数据从一个用户会话保存到下一个用户会话。

但是,随着更多核心业务功能移至云端,必须在云原生环境中解决持久存储问题。 这就要求开发人员考虑采用新方法来实施云存储。

正如云原生应用开发采用微服务和模块化方法,必须使用云原生存储。 云原生数据可能位于任意数量的位置 - 如事件日志或系统日志、关系数据库以及文档或对象存储。

数据位置、保留时间要求、可移植性、平台兼容性和安全性仅仅是开发人员在规划云原生存储时必须考虑的几个方面。

云原生应用 vs. 传统应用

云原生 vs. 支持云计算

支持云的应用的开发初衷是部署在传统数据中心内,但后来更改为在云环境中运行。 但是,云原生应用仅在云中运行。 开发人员将云原生应用设计为可扩展、独立于平台以及由微服务组成。

云原生 vs. 云就绪

在云计算的短暂历史中,“云就绪”的含义已多次变化。 最初,该术语适用于旨在通过因特网工作的服务或软件。 现在,该术语更常用于描述在云环境中工作的应用,或已针对云环境重新配置的传统应用。 术语“云原生”的历史要短得多,是指从一开始就是为了仅在云中运行而开发的应用,以及为了利用云架构或已使用云原生原则重构和重新配置的现有应用的特征而开发的应用。

云原生 vs. 基于云

基于云的服务或应用通过因特网交付。 字面上它是适用于任何数量的云产品的通用术语。 云原生是更具体的术语。 云原生描述旨在云环境中工作的应用。 该术语表示依赖于微服务、持续集成和持续交付 (CI/CD) 并可通过任何云平台使用的应用。

云原生 vs. 云优先

云优先描述的是企业战略,组织承诺在启动新的 IT 服务、更新现有服务或更换原有技术时首先使用云资源。 成本节约和运营效率推动这一战略的发展。 云原生应用与云优先战略完美匹配,因为它们仅使用云资源,并且旨在利用云架构的有益特性。