《云原生架构白皮书》读书笔记

1. 为什么需要云原生架构?

在企业数字化转型的今天,越来越多的业务演变成数字化业务,数字化对于业务渠道、竞争格局、用户体验、降本增效等诸多方面都带来更加严苛的要求。基于云原生架构,可以充分利用云计算优势,释放云计算的技术红利,让业务更敏捷、成本更低的同时,具备更灵活的又可伸缩性。

2. 云原生架构的定义

从技术的角度,云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的 非业务代码部分进行最大化的剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、 可观测性、灰度等),使业务不再有非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点。

由此带来的几个大的变革:

云原生架构的几大原则:

云原生架构的几大主要架构模式:

3. 主要云原生技术

3.1 容器技术

容器作为标准化软件单元,它将应用及其所有依赖项打包,使应用不再受环境限制,在不同计算环境 间快速、可靠地运行。容器技术让开发所需要的灵活性、开放性和运维所关注的标准化、自动化达成相对平衡。

容器技术的三个核心价值:

容器编排

容器编排的事实标准:Kubernetes。Kubernetes 提供了分布式应用管理的核心能力:

Kubernetes 在容器编排中有几个关键设计理念:声明式 API、可扩展性架构、可移植性。

3.2 云原生微服务

微服务模式将后端单体应用拆分为松耦合的多个子应用,每个子应用负责一组子功能。这些子应用称为“微 服务”,多个“微服务”共同形成了一个物理独立但逻辑完整的分布式微服务体系。

在云原生时代,云原生微服务体系将充分利用云资源的高可用和安全体系,让应用获得更有保障的弹性、 可用性与安全性。

微服务设计的约束:

云原生微服务典型架构:

主要微服务技术:Apache Dubbo 、Spring Cloud、Eclipse MicroProfile、Tars(腾讯将其内部使用的微服务框架 TAF(Total Application Framework))、SOFAStack(Scalable Open Financial Architecture Stack)、Dapr(Distributed Application Runtime)。

3.3 Serverless

Serverless服务的几大特征:

函数计算(Function as a Service)是 Serverless 中最具代表性的产品形态。下面是传统的弹性计算服务、基于容器的 Serverless 应用服务和函数计算的对比:

Serverless的几个主要场景:

Serverless模式的几个技术关注点:

3.4 开放应用模型(OAM)

2019 年末,阿里云联合微软共同发布了 Open Application Model (OAM) 开源项目,其主要目标是解决从 Kubernetes 项目到“以应用为中心”的平台之间最关键环节 —— 标准化应用定义。(这是阿里主动制定行业规范的一个非常棒的开始。)

通过OAM,建立对应用和它所需的运维能力定义与描述的标准规范。OAM 的描述模型是基于 Kubernetes API 的资源模型(Kubernetes Resource Model) 来构建的,它强调一个现代应用是多个资源的集合,而非一个简单工作负载。

OAM的核心概念:

一个基于 OAM 构建的 Kubernetes 应用管理平台示意图:

3.5 Service Mesh 技术

Service Mesh 是分布式应用在微服务软件架构之上发展起来的新技术,旨在将那些微服务间的连接、安全、流量控制和可观测等通用功能下沉为平台基础设施,实现应用与平台基础设施的解耦

通过Service Mesh化,开发者无需关注微服务相关治理问题而聚焦于业务逻辑本身,从而提升应用开发效率并加速业务探索和创新。同时,因为大量非功能性从业务进程剥离到独立进程中,Service Mesh 以无侵入的方式实现了应用轻量化。

下图展示了 Service Mesh 的 典型架构:

3.6 DevOps

DevOps 就是为了提高软件研发效率,快速应对变化,持续交付价值的的一系列理念和实践,其基本思想就是持续部署(CD),让软件的构建、测试、发布能够更加快捷可靠,以尽量缩短系统变更从提交到最后安全部署到生产系统的时间。

IaC 和 GitOps

DevOps 所面对的矛盾就是开发和运维团队之间的矛盾。因为两个团队的关注点完全不同,或者说 是冲突的。在这种背景下,IaC(Infrastructure as Code) 提出系统建设的核心理念,兼顾高效和安全,让运维系统的建设更加有序。

运维平台的两类实现方式:

声明式接口是一种和云计算时代相契合的思维范式。几个主要优势:幂等性、变更审核简单明了、复杂性抽象。

GitOps 作为 IaC 运维理念的一种具体落地方式,就是使用 Git 来存储关于应用系统的最终状态的声明式描述。GitOps 的核心是一个 GitOps 引擎,它负责监控 Git 中的状态,每当它发现状态有改变,它就负责把目标应用系统中的状态以安全可靠的方式迁移到目标状态,实现部署、升级、配置修改、回滚等操作。

和 GitOps 配套的一个基本假设是不可变基础设施,所以 GitOps 和 Kubernetes 运维可以非常好的配合。

云原生时代的 DevOps

一个完整开发流程涉及到很多步骤,而环节越多,一次循环花费的时间越长,效率就越低。微服务通过把巨石 应用拆解为若干单功能的服务,减少了服务间的耦合性,让开发和部署更加便捷,可以有效降低开发周期,提高 部署灵活性。Service Mesh 让中间件的升级和应用系统的升级完全解耦,在运维和管控方面的灵活性获得提升。 Serverless 让运维对开发透明,对于应用所需资源进行自动伸缩。FaaS 是 Serverless 的一种实现,则更加简化 了开发运维的过程,从开发到最后测试上线都可以在一个集成开发环境中完成。无论哪一种场景,后台的运维平台的 工作都是不可以缺少的,只是通过技术让扩容、容错等技术对开发人员透明,让效率更高。

3.7 云原生中间件

在云原生时代,传统中间件技术也演化升级为云原生中间件,云原生中间件主要包括网格化的服务架构、事件驱 动技术、Serverless 等技术的广泛应用。云原生中间件最大的技术特点就是中间件技术从业务进程中分离,变成与开发语言无关的普惠技术,只与应用自身架构和采用的技术标准有关。

微服务架构一般包含下列组件:服务注册发现中心、配置中心、服务治理、服务网格、API 管理、运行时监控、 链路跟踪等。随着 Kubernetes 的流行,Kubernetes 提供的基础部署运维和弹性伸缩能力已经可以满足多数中小 企业的微服务运维要求。微服务与 Kubernetes 集成会是一个大趋势。

服务注册发现和配置中心的功能主要致力于解决微服务在分布式场景下的服务发现和分布式配置管理两个核心问题。随着云原生技术的发展,服务发现领域出现了两个趋势,一个是服务发现标准化(Istio),一个是服务下沉 (CoreDNS);配置管理领域也有两个趋势,一个是标准化(ConfigMap),一个是安全 (Secret)。

提到事件驱动就必须先讲消息服务,消息服务是云计算 PaaS 领域的基础设施之一,主要用于解决分布式应 用的异步通信、解耦、削峰填谷等场景。消息服务提供一种 BaaS 化的消息使用模式,用户无需预先购买服务器 和自行搭建消息队列,也无需预先评估消息使用容量,只需要在云平台开通即用,按消息使用量收费。

事件驱动架构:由于 IoT、云计算技术的快速发展,事件驱动架构在未来将会被越来越多的企业采纳,通过事件的抽象、异步化,来提供业务解耦、加快业务迭代。在过去事件驱动架构往往是通过消息中间件来实现,事件用 消息来传递。

4. 阿里巴巴云原生架构设计

ACNA(Alibaba Cloud Native Architecting)架构设计方法。ACNA 是一个 「4+1」 的架构设计流程,「4」 代表架构设计的关键视角,包括企业战略视角、业 务发展视角、组织能力视角和云原生技术架构视角;「1」 表示云原生架构的架构持续演进闭环。示例图如下(非常高屋建瓴的感觉):

5. 阿里巴巴云原生产品介绍

阿里巴巴云原生产品家族包括容器产品家族、微服务产品家族、Serverless 产品家族、Service Mesh 产品家族、消息产品、云原生数据库家族、云原生大数据产品家族等。大图如下(进入广告时间):

6. 各个行业面临的挑战及解决方案

不同行业采用阿里云的云原生技术、云原生架构,助力企业的技术创新和企业的数字化转型。

给了几个例子:申通(物流)、完美日记(电商)、特步(零售)、中国联通(通信)、Timing App(App)。

7. 云原生架构未来发展趋势

3.1 容器技术发展趋势

传统意义的操作系统和云原生操作系统的对比:

3.2 基于云原生的新一代应用编程界面

Kubenetes 已经成为了云原生的操作系统,而容器成为了操作系统调度的基本单元,同时定义了应用交付的标准。但是对于应用开发者来说,这些还远没有深入到应用的架构,改变应用的编程界面。

几个主要的变革:

包括生命周期管理、运维管理、配置范围和扩展和管理、以及语言无关的编程框架,一起构成了崭新的应用与云之间的编程界面。

3.3 Serverless 发展趋势