技术破局:如何实现分布式架构与云原生?| 含 ppt 下载

简介: 本文根据 蚂蚁金服 SOFAStack 产品专家俞仁杰,在蚂蚁金服数字课堂直播间分享的云原生应用 PaaS 平台的建设实践内容整理,以下为演讲整理全文。

2月19日-2月26日,蚂蚁金服开展了“共战‘疫情’,技术破局”数字课堂线上直播,邀请资深专家从“云原生”、“研发效能”、“数据库”三方面分享蚂蚁金服的实践经验并在线答疑,解析 PaaS 在金融场景的落地建设实践,解析支付宝移动端弹性动态架构,分享 OceanBase 2.2版本的特性和实践。

本文根据 蚂蚁金服 SOFAStack 产品专家俞仁杰,在蚂蚁金服数字课堂直播间分享的云原生应用 PaaS 平台的建设实践内容整理,以下为演讲整理全文:

大家好,欢迎来到蚂蚁金服数字课堂直播间。今年 2 月,SOFAStack 金融分布式架构产品已经在阿里云上完成了商业化发布,为了让更多朋友了解到我们的产品的能力、定位以及背后的设计思路,后续我们会有一系列的直播分享。我们今天想分享给大家的话题叫《云原生应用 PaaS 平台的建设实践》,主要会围绕 PaaS 产品能力在一些需要稳妥创新的金融场景下的落地思路,并且能够更好地与云原生架构做好链接。

金融场景云原生落地面临挑战

云原生是业务快速变化背景下的必然技术趋势

回顾 IT 的发展史,云计算分类为 IaaS PaaS 和 SaaS 已经有十几年了。而事实上,整个云计算行业的发展,我们能够明显看到企业在落地云计算战略的时候经历的三个阶段,Cloud-Based, Cloud-Ready, Cloud-Native。这三个阶段其实是因为业务的变化越来越敏捷,要求企业关注重心上移,把更多的精力和人才投入到业务逻辑的建设上,而把下层自已并不擅长并且越来越复杂的基础设施、中间件逐渐交给云计算厂商去实现,专业的人做专业的事。

这本质是社会分工的进一步细化,也符合人类社会发展的规律。在云原生时代,业界所提出的容器技术,Service Mesh 技术,Serverless 技术都是希望让业务研发与基础技术更加的解耦,让业务创新和基础技术创新都更容易的发生。

云原生是业务快速变化背景下的必然技术趋势

容器技术带来的是一种应用交付模式的变革

云原生就是业务快速变化背景下的必然技术趋势。而这个趋势背后的实质载体,就是我们所说的云原生、Kubernetes 以及以 Docker 为代表的容器技术,这些所带来的,本质是一种应用交付模式的变革。而为了真正能够使业界、社区所倡导的新兴应用交付模式落地到实际的企业环境,我们需要一个以应用为中心的平台来进行承载,贯穿应用运维的各项生命周期。

围绕“云原生”这个关键词,其实在社区和业界已经有了非常多的交流和资料,围绕Docker/K8S 的最佳实践、DevOps CICD、容器网络存储设计、日志监控对接优化等等等等,而我们今天的分享,主要想表达的是我们围绕在 K8S 之上塑造一个 PaaS 平台的产品价值主张。Kubernetes 是一个非常好的编排和调度框架,它核心的贡献是让应用的编排和资源的调度更加的标准化,同时提供了一个高度可扩展的架构,方便上层进行各种控制器和调度器的定制。但是,它并不是一个 PaaS。PaaS 底层可以基于 Kubernetes 去实现,但是在上层要补足非常多的能力才能真正把 Kubernetes 用于生产环境,特别是金融行业的生产环境。

金融场景需要“稳妥创新”

生产环境落地云原生需要着重考虑哪些挑战?

金融场景需要“稳妥创新”

我们之前做过一些调研和客户访谈。就现在 2020 年来说,绝大多数金融机构都展现出了对 Kubernetes、容器等技术的极大兴趣,有不少机构也已经在一些非关键的业务、或开发测试环境搭建了开源或商业版的集群。驱动力很简单,金融机构非常希望这一整套新的交付模式帮助到业务飞速迭代。然而对比落差非常明显的是,真正敢于在核心生产环境落地云原生架构的,又少之又少。因为金融业务创新的前提,是要保障稳妥。

我们团队在服务蚂蚁内部业务、外部金融机构的过程中,总结了以上这几个方面,事实上这六大方面也是我们内部 SRE 不断挑战的几点。我们在今天以及未来的分享中,会逐步总结深化应对这些挑战的产品思路。

K8S 体系下的应用变更与发布管控

我们今天分享的一个核心内容,就是我们如何在产品层面做应用变更的风险保障的。并围绕此话题向大家介绍变更“三板斧”的背景、K8S 原生部署能力、我们产品围绕变更需求做的扩展并向大家介绍我们在开源方面的规划。

K8S 体系下的应用变更与发布管控

需求背景:变更“三板斧”

所谓“三板斧”就是可灰度、可监控、可应急。这是蚂蚁内部运维的一条红线准则,所有的变更,都必须要遵从这个规则,即使再细小的变更,再严密的测试,也不能忽略这条规则。为了满足这个需求,我们在 PaaS 产品层设计了各种各样的精细化发布策略,比如分组发布、beta 发布,灰度发布,蓝绿发布等。这些发布策略跟我们在做传统运维时用的手段是非常相似的,但很多使用容器的用户认为在 K8S 里实现会非常的困难。

有些时候,由于对业务连续性的极高要求,也很难接受原生 K8S 模型标准化模式,比如原生 Deployment 做灰度或者金丝雀发布时,默认情况下在 Pod 变更和流量治理层面的管控还稍显不足,无法完全做到无损发布或按需过程管控。因此,我们在 PaaS 产品层面做了定制,在 Kubernetes 层面做了自定义资源的扩展,目的是能够在云原生的场景下,依然对整个发布过程实现精细化管控,使得大规模集群发布、灰度、回滚时更加优雅,符合技术风险三板斧原则。 

需求背景:变更“三板斧”

Kubernetes 原生发布能力

我们先来回顾一下 K8S 的原生 Deployment 对象,及其背后的 ReplicaSet,其实已经是在最近好几个大版本中已经逐渐的稳定了。 简单的来说,最常见的 K8S 发布场景,我们会通过 Deployment 的对象,声明出我希望的发布模式以及 Pod Spec 定义。在运行时,会有 ReplicaSet 对象来管理 Pod 数量的预期,默认情况下会提供滚动发布或重建发布能力。

image.png

这幅图的下半部分,是围绕 Deployment 作滚动发布时的示意图,这里不再做过多的展开,它的本质根据用户根据我们的运维需求设定好一定的步长,创建新的 Pod,销毁旧的 Pod,因此能做到整个应用版本的变更和发布过程中,都能有对应的容器对外提供服务。 对大部分场景来说,它是够用的,而且整个过程也是非常好的理解,事实上在 K8S 体系,大家除了 Pod/Node,看的最多的就是 Deployment了。

CAFEDeployment:感知底层拓扑和领域模型

CAFEDeployment:感知底层拓扑和领域模型

回顾完 Deployment,我们可以再给大家看一下我们根据实际需求作的 CRD 扩展,CAFEDeployment。CAFE 是我们 SOFAStack PaaS 产品线的名称,本文的最后会作一些介绍。

CAFEDeployment 有一个很重要的能力,就是能够感知到底层拓扑,这个拓扑是什么意思呢?能够知道我想把我的 Pod 发布到哪里,哪边的 Node,不只是基于亲和性的规则作绑定,而是真正能把高可用、容灾、以及部署策略等场景息息相关的信息,带到整个围绕发布的领域模型中。对此,我们提出了一个叫部署单元的领域模型,他是一个逻辑概念,在 yaml 中简单的叫做 Cell。在实际使用中,Cell 的背后,可以是不同的 AZ 不同的物理机房,不同的机架,一切都是围绕着不同级别的高可用拓扑。

CAFEDeployment:精细化分组发布扩容

感知到了底层拓扑,我们再看一下 CafeD 的典型发布过程。这也是后面会通过产品控制台和命令行来演示的内容。这幅图所展现的过程,是一个精细化的分组发布,目的是能够让容器实例层面的变更,做到足够的可控和灰度。每一个阶段都能暂停、验证、继续或回滚。

CAFEDeployment:精细化分组发布扩容

以图上这个例子进行说明,我们的目标是发布或变更 10 个 Pod,且需要让这 10 个 Pod 能够均匀分布在两个可用区,确保在应用层面是高可用的。同时,在发布的过程,我们是需要引入分组发布的概念,即每个机房都要先仅仅发布一个实例,暂停验证之后,再进行下一组的发布。于是第 0 组,就变成两边各 1 个实例,第 1 组各两个,第 2 组则是剩下的 2 个。在实际的生产环境中,围绕容器大规模变更会配合业务监控及更多维度的观察,确保每一步都是符合预期、验证通过的。这样在应用实例层面的精细化管控,为运维提供了能够及时刹车回滚的机会,是线上应用发布的一个重要的保险绳。

CAFEDeployment:优雅摘流无损发布

讲完整个精细化的发布,我们再讲一个精细化的摘流。无损发布需要确保南北和东西向的网络流量都能被优雅摘除,确保在容器停机、重启、缩容的时候能够对线上业务无感。

CAFEDeployment:优雅摘流无损发布

这张图展示了一个 Pod 作变更发布时的控制流程规范。时序图中包括了 Pod 以及其相关联的各组件控制器,着重是和网络相关的如 Service Controller、LoadBalancer Controller 作配合,进行切流、流量回复检查等操作以实现无损发布。

在传统经典运维场景基于指令式的运维习惯下,我们可以通过依次执行命令每个组件进行原子操作,确保入口流量、应用间流量都能完全摘除后,再执行实际的变更操作。而在云原生 K8S 场景下,这些复杂的操作都留给了平台,运维人员只需作简单的声明即可。我们在部署时把应用所关联的流量组件(不限于 Service loadbalancer/ RPC/ DNS...) 都透传到 CAFEDeployment,添加对应的“finalizer”,并通过 ReadinessGate 来做 Pod 是否可以承载流量的标识。

以原地升级控制器 InPlaceSet 控制下的 Pod 为例,在做指定 Pod 更新时,会设置 ReadinessGate=false,相关联的组件感知到变化后,逐个注销对应的 IP,触发实际摘流动作。在等待相关 Finalizer 都被摘除之后,进行升级操作。待新版本部署成功后,设定 ReadinessGate=true,在依次触发各关联组件的实际流量挂在动作。待检测到 finalizer 和实际 CAFEDeployment 中声明的流量类型全部一致后,当前 Pod 才算发布完成。

开源版本介绍:OpenKruise - UnitedDeployment

我们再回到 PPT 的一个讲解,其实刚刚说的 CAFEDeployment,它在我们整个 CAFED 的一个商业化的产品,事实上在整个商业板的同时,我们也在做一些社区的开源,而在这个里面我想介绍一下 OpenKruise 项目,OpenKruise 源于整个阿里巴巴经济体的大规模云原生运维实践,我们把许多基于 K8S 体系下的自动化运维运维操作通过 K8S 标准扩展的方式开源出来,对原生 Workload 无法满足的能力作了强有力的补充,解决应用的自动化,包括部署、升级、弹性扩缩容、Qos 调节、健康检查、迁移修复等场景问题。

开源版本介绍:OpenKruise - UnitedDeployment

当前 OpenKruise 项目提供了一套 Controller 组件,其中的 UnitedDeployment 可以理解为 CAFEDeployment 的开源版本。除了基本的副本保持和发布能力,他还包含了 CAFEDeployment 的主要功能之一,多部署单元的 Pod 发布能力。 同时,由于UnitedDeployment 是基于多种类型的 workload(目前支持社区的 StatefulSet 和 OpenKruise AdvancedStatefulSet)实现对 Pod 的管理,因此它还能保留相应 Workload 的特性。 

UnitedDeployment 的核心贡献者吴珂(昊天) (Github:wu8685) 来自于 SOFAStack CAFE 团队,主导了整个 CAFEDeployment 的设计与开发。当前我们正在努力把更多能力在经过大规模验证之后,通过标准化的方式整合进开源版本中,逐步减少两个版本的差异,使之趋于统一。

展望与规划

主流分布式云平台终将向云原生架构演进

讲到这里,因为时间关系,围绕一些细节的技术实现就先分享到这里了。回顾一下前面关于 CAFEDeployment 关于整个发布策略的内容介绍,我们产品设计的一个关键价值主张就是,能够为应用和业务在拥抱新兴技术架构的时候,提供一个稳妥演进的能力。无论是虚拟机为代表的经典运维体系,还是规模化容器部署的云原生架构,都需要精细化的技术风险管控。同时,在宏观上,又能往最先进的架构上演进。

实践参考:某互联网银行容器应用交付演进路线

实践参考:某互联网银行容器应用交付演进路线

以某个互联网银行的容器化演进路线为例。在成立之初,就确定了以云计算基础设施之上构建微服务分布式体系。但从交付模式上看,一开始采用的还是基于经典虚拟机的 PaaS 管控模式,从 2014 年到 2017 年,业务都是通过 Buildpack 把应用包发布到虚拟机上。这种运维模式虽然持续了三年,但是我们在这个过程中帮助完成了同城双活、两地三中心、到异地多活单元化的架构升级。

在 2018 年,随着 Kubernetes 的逐渐成熟,我们在底层基于物理机和 K8S 构建了底盘,同时,用容器模拟 VM,完成了整个基础设施的容器化。但于此同时,业务并不感知,我们通过实际在底层 K8S 之上的 Pod,以“富容器”的方式为上层应用提供服务。而从 2019 年到 2020 年,随着业务的发展,对于运维效率、扩展性、可迁移性、精细化管控的要求更是驱使着基础设施往更加云原生的运维体系演进,并逐渐落地 Service Mesh、Serverless、单元化联邦集群管控等能力。

云原生单元化异地多活弹性架构

云原生单元化异地多活弹性架构

我们正在通过产品化、商业化的方式,把这些年来积累的能力开放出来,希望能够支持到更多金融机构也能够在互联网金融业务场景下快速复制云原生的架构能力并为业务创造价值。

大家可能在很多渠道了解到蚂蚁的单元化架构、异地多活的弹性和容灾能力。这里我给到大家一张图,是我们当前在建设,且马上在几个月内在一家大型银行作解决方案落地的架构抽象。在 PaaS 层面,我们在 K8S 上建设一层联邦能力,我们希望每一个机房都有独立的 K8S 群,因为一个 K8S 集群直接进行跨机房、跨地域部署是不可行的,无法满足容灾需求。进而通过多云联邦的管控能力,这同样需要我们 PaaS 层产品针对 Kubernetes 做一些扩展,定义逻辑单元,定义联邦层资源等等,最终达成多机房多地域多集群的单元化架构。结合之前分享中我们提到的,CAFEDeployment、ReleasePipeline,还有一些 Fedearation 层的联邦对象,我们做了大量扩展,最终目的是在这些复杂的场景中为业务提供统一的发布管控和容灾应急能力。

SOFAStack CAFE 云应用引擎

SOFAStack CAFE 云应用引擎

说到这里,终于可以解释下前面提了很多的 CAFE 是什么意思了。CAFE, Cloud Application Fabric Engine 云应用引擎,是蚂蚁金服 SOFAStack 云原生应用 PaaS 平台的名称,不仅具备 Kubernetes 标准化的云原生能力,更在上层把经过生产检验的应用管理、发布部署、运维编排、监控分析、容灾应急等金融级运维管控能力开放了出来。同时,与 SOFAStack 中间件、服务网格 Service Mesh、阿里云容器服务 ACK  做了深度集成。

回顾与展望

CAFE 提供的关键差异化能力,是为应用生命周期管理提供具有技术风险防控保障(包括变更管控,容灾应急能力),并随之提供可演进的单元化混合云能力。是金融场景下落地分布式架构,云原生架构,混合云架构的关键底盘。

SOFAStack 金融分布式架构

SOFAStack 金融分布式架构

最后一页,其实才是今天真正的主题。今天所介绍的 CAFE,是 SOFAStack金融分布式架构产品中的一部分。当前 SOFAStack 已经在阿里云上商业化发布了,大家可以来申请试用,并与我们作进一步的交流。大家可以通过搜索引擎、本文提供的产品链接、阿里云官网了解更多。

在【金融级分布式架构】微信公众号后台回复“CAFE”,即可下载完整PPT。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
25天前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
23天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
7天前
|
设计模式 存储 算法
分布式系统架构5:限流设计模式
本文是小卷关于分布式系统架构学习的第5篇,重点介绍限流器及4种常见的限流设计模式:流量计数器、滑动窗口、漏桶和令牌桶。限流旨在保护系统免受超额流量冲击,确保资源合理分配。流量计数器简单但存在边界问题;滑动窗口更精细地控制流量;漏桶平滑流量但配置复杂;令牌桶允许突发流量。此外,还简要介绍了分布式限流的概念及实现方式,强调了限流的代价与收益权衡。
45 11
|
9天前
|
设计模式 监控 Java
分布式系统架构4:容错设计模式
这是小卷对分布式系统架构学习的第4篇文章,重点介绍了三种常见的容错设计模式:断路器模式、舱壁隔离模式和重试模式。断路器模式防止服务故障蔓延,舱壁隔离模式通过资源隔离避免全局影响,重试模式提升短期故障下的调用成功率。文章还对比了这些模式的优缺点及适用场景,并解释了服务熔断与服务降级的区别。尽管技术文章阅读量不高,但小卷坚持每日更新以促进个人成长。
36 11
|
10天前
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
45 11
|
12天前
|
自然语言处理 负载均衡 Kubernetes
分布式系统架构2:服务发现
服务发现是分布式系统中服务实例动态注册和发现机制,确保服务间通信。主要由注册中心和服务消费者组成,支持客户端和服务端两种发现模式。注册中心需具备高可用性,常用框架有Eureka、Zookeeper、Consul等。服务注册方式包括主动注册和被动注册,核心流程涵盖服务注册、心跳检测、服务发现、服务调用和注销。
48 12
|
24天前
|
消息中间件 架构师 数据库
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
45岁资深架构师尼恩分享了一篇关于分布式事务的文章,详细解析了如何在10Wqps高并发场景下实现分布式事务。文章从传统单体架构到微服务架构下分布式事务的需求背景出发,介绍了Seata这一开源分布式事务解决方案及其AT和TCC两种模式。随后,文章深入探讨了经典ebay本地消息表方案,以及如何使用RocketMQ消息队列替代数据库表来提高性能和可靠性。尼恩还分享了如何结合延迟消息进行事务数据的定时对账,确保最终一致性。最后,尼恩强调了高端面试中需要准备“高大上”的答案,并提供了多个技术领域的深度学习资料,帮助读者提升技术水平,顺利通过面试。
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
|
23天前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####
|
20天前
|
存储 算法 安全
分布式系统架构1:共识算法Paxos
本文介绍了分布式系统中实现数据一致性的重要算法——Paxos及其改进版Multi Paxos。Paxos算法由Leslie Lamport提出,旨在解决分布式环境下的共识问题,通过提案节点、决策节点和记录节点的协作,确保数据在多台机器间的一致性和可用性。Multi Paxos通过引入主节点选举机制,优化了基本Paxos的效率,减少了网络通信次数,提高了系统的性能和可靠性。文中还简要讨论了数据复制的安全性和一致性保障措施。
34 1
|
28天前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
61 8