文章

云原生(一):云原生是什么?

云原生的官方定义是:

云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。

这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。

云原生强调:

  • 微服务架构:将一个复杂的应用拆分成多个小而独立的服务,每个服务都可以独立部署和扩展。这种架构提高了系统的灵活性和可维护性。
  • 容器化部署:通过容器技术将应用及其依赖环境打包,确保在不同环境中拥有一致的运行表现。
  • 持续集成/持续交付(CI/CD):通过自动化测试和部署工具,实现代码的快速集成和持续交付,缩短开发周期,提高交付质量。
  • 基础设施即代码(IaC):使用代码来管理和配置基础设施,确保环境的一致性和可重复性。

总而言之,在我看来云原生是:一个快速构建、部署和管理高度可扩展、灵活且具有弹性的现代应用程序的架构设计思想

它意味着我们的应用程序天然就“生在云上,长在云上”;其次,能够最大化地发挥云的能力,使得我们的应用程序和“云”能够天然地集成在一起,发挥出“云”的最大价值。

当业务从实现阶段转变到加速发展和增长的战略阶段的时候,业务系统也变得越来越复杂,用户要求也越来越高。 业务一旦发生故障,可能会造成用户流失等后果。所以企业希望实现业务快速部署、快速回滚和零故障。

基于云计算平台的弹性能力,云原生技术支持快速、频繁地更新、回滚业务,而不会影响服务交付。同时还提供动态扩容业务的能力,便于应对流量突发的情况,提供积极的客户体验。

云原生技术组件:

云原生全景图

我们将其类别抽离出来之后:

image-dqra.png

如图,大致分为四层,每层都有自己的子类别。从最底层Provisioning提供了构建云原生基础设施的工具。往上,你可以开始添加运行和管理应用程序所需的工具,比如运行时Runtime和编排与管理层Orchestration & Management。在最上层App Definition and Development,有定义和开发应用程序的工具,比如数据库、镜像构建和 CI/CD 工具。

供应层 (Provisioning)

供应指的是为云原生应用准备标准基础环境所涉及的工具。它包含了基础设施的创建、管理、配置流程的自动化,以及容器镜像的扫描、签名和存储等。供应层通过提供设置和实施策略,在应用程序和平台中构建身份验证和授权,以及处理密钥分发等等的工具,也拓展到了安全领域。

供应层包括:

  • 自动化和配置工具:帮助工程师在无需人工干预情况下即可构建计算环境;
  • 容器注册表:存储应用程序的可执行文件;
  • 不同安全领域的安全和合规框架
  • 密钥管理解决方案:通过加密确保只有授权的用户才能访问特定的应用程序。

运行时层(Runtime)

狭义上讲,运行时是特定机器上准备运行应用程序的沙盒——也就是保障应用程序正常运行所需的最低配置。广义上讲,运行时是运行一个应用程序所需的所有工具。

运行时层包括:

  • 云原生存储:为容器化应用提供虚拟磁盘或持久化存储;
  • 容器运行时:为容器提供隔离、资源和安全;
  • 云网络:分布式系统的节点(机器或进程)通过其连接和通信。

编排和管理层(Orchestration and Management)

这是云原生的核心部分,主要负责容器和微服务的编排、部署、扩展和监控等操作。编排工具(如 Kubernetes)可以根据预定义的规则和策略,自动地管理容器的生命周期,包括容器的创建、调度、更新和删除等。同时,还包括对应用的整体管理,如配置管理、资源管理和故障管理等。

这一层包含:

  • 编排和调度:部署和管理容器集群,确保它们具有弹性伸缩能力,相互之间低耦合,并且可扩展。事实上,编排工具(绝大多数情况下就是 Kubernetes)通过管理容器和操作环境构成了集群;
  • 协调和服务发现:使得服务(应用程序组件)之间可以相互定位和通信;
  • 远程进程调用(RPC):使跨节点服务间通信的技术;
  • API 网关:一个抽象层,外部应用可通过 API 网关进行通信;
  • 服务代理:服务间通信的中介。服务代理的唯一目的就是对服务之间的通信进行更多控制,而不会对通信本身添加任何内容。
  • Service Mesh:它是应用程序进行通信的专用基础架构层,提供基于策略的内部服务间通信。此外,它还可能包含流量加密、服务发现、应用程序监控等内容。

应用定义和开发层 (Application Definition and Developement)

这个层涵盖了从应用的架构设计(如采用微服务架构)到具体的代码开发的整个过程。在云原生环境下,应用定义强调将应用分解为适合云环境的组件(如微服务),并且定义这些组件之间的接口和交互方式。开发过程则要考虑如何利用云原生的工具和技术,如容器开发工具、API 网关等,来构建高效的应用。

这一层包括:

  • 数据库:使应用程序能以有序的方式收集数据;
  • 流和消息传递:使应用程序能发送和接收消息(事件和流)。它不是网络层,而是让消息成为队列并处理消息的工具;
  • 应用程序定义和镜像构建:用于配置、维护和运行容器镜像(应用程序的可执行文件)的服务;
  • 持续集成和持续交付(CI/CD):使开发者可自动测试代码是否与代码库(应用程序的其余部分)兼容。如果团队足够成熟,甚至可以自动部署代码到生产环境。

可观察性和分析(Observability and Analysis)

为了限制服务中断并降低解决问题的平均时间(MRRT),我们需要监控和分析应用层序的方方面面,以便在出现异常时可立即发现并纠正。复杂环境中容易出现故障,这些工具可快速识别并解决故障,从而降低故障带来的影响。由于这一类别贯穿并监控各层,因此它在侧面,而不是嵌入到某一层中。

这包含:

  • 可观测性:一种衡量系统能够被有效监控和理解其内部状态的能力。它主要通过收集和分析系统运行过程中产生的数据来实现,包括日志(Logs)、指标(Metrics)和追踪(Tracing);
  • 持续优化:强调对软件系统和其运行环境进行持续的改进和调整,以提高系统的性能、效率、可靠性等各种关键指标;
  • 功能标记:用于在软件应用中控制新功能的发布和可见性;
  • 混沌工程(Chaos Engineering):一种通过主动向系统中引入故障(如网络延迟、服务崩溃、磁盘故障等)来测试系统韧性和恢复能力的实践;
License:  CC BY 4.0