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为表明的容器技术,这些所带来的,本质是一种应用交付模式的变革。而为了真正可以使业界、社区所倡导的新兴应用交付模式落地到实际的企业环境,咱们须要一个以应用为中心的平台来进行承载,贯穿应用运维的各项生命周期。less
围绕“云原生”这个关键词,其实在社区和业界已经有了很是多的交流和资料,围绕Docker/K8S的最佳实践、DevOps CICD、容器网络存储设计、日志监控对接优化等等等等,而咱们今天的分享,主要想表达的是咱们围绕在K8S之上塑造一个PaaS平台的产品价值主张。Kubernetes是一个很是好的编排和调度框架,它核心的贡献是让应用的编排和资源的调度更加的标准化,同时提供了一个高度可扩展的架构,方便上层进行各类控制器和调度器的定制。可是,它并非一个PaaS。PaaS底层能够基于Kubernetes去实现,可是在上层要补足很是多的能力才能真正把Kubernetes用于生产环境,特别是金融行业的生产环境。运维
金融场景须要“稳妥创新”分布式
生产环境落地云原生须要着重考虑哪些挑战?微服务
咱们以前作过一些调研和客户访谈。就如今2020年来讲,绝大多数金融机构都展示出了对Kubernetes、容器等技术的极大兴趣,有很多机构也已经在一些非关键的业务、或开发测试环境搭建了开源或商业版的集群。驱动力很简单,金融机构很是但愿这一整套新的交付模式帮助到业务飞速迭代。然而对比落差很是明显的是,真正勇于在核心生产环境落地云原生架构的,又少之又少。由于金融业务创新的前提,是要保障稳妥。
咱们团队在服务蚂蚁内部业务、外部金融机构的过程当中,总结了以上这几个方面,事实上这六大方面也是咱们内部SRE不断挑战的几点。咱们在今天以及将来的分享中,会逐步总结深化应对这些挑战的产品思路。
咱们今天分享的一个核心内容,就是咱们如何在产品层面作应用变动的风险保障的。并围绕此话题向你们介绍变动“三板斧”的背景、K8S原生部署能力、咱们产品围绕变动需求作的扩展并向你们介绍咱们在开源方面的规划。
需求背景:变动“三板斧”
所谓“三板斧”就是可灰度、可监控、可应急。这是蚂蚁内部运维的一条红线准则,全部的变动,都必需要听从这个规则,即便再细小的变动,再严密的测试,也不能忽略这条规则。为了知足这个需求,咱们在PaaS产品层设计了各类各样的精细化发布策略,好比分组发布、beta发布,灰度发布,蓝绿发布等。这些发布策略跟咱们在作传统运维时用的手段是很是类似的,但不少使用容器的用户认为在k8s里实现会很是的困难。
有些时候,因为对业务连续性的极高要求,也很难接受原生 K8S 模型标准化模式,好比原生 deployment 作灰度或者金丝雀发布时,默认状况下在Pod变动和流量治理层面的管控还稍显不足,没法彻底作到无损发布或按需过程管控。所以,咱们在PaaS产品层面作了定制,在Kubernetes层面作了自定义资源的扩展,目的是可以在云原生的场景下,依然对整个发布过程实现精细化管控,使得大规模集群发布、灰度、回滚时更加优雅,符合技术风险三板斧原则。
Kubernetes原生发布能力
咱们先来回顾一下K8S的原生Deployment对象,及其背后的ReplicaSet,其实已是在最近好几个大版本中已经逐渐的稳定了。 简单的来讲,最多见的K8S发布场景,咱们会经过Deployment的对象,声明出我但愿的发布模式以及Pod Spec定义。在运行时,会有ReplicaSet对象来管理Pod数量的预期,默认状况下会提供滚动发布或重建发布能力。
这幅图的下半部分,是围绕Deployment做滚动发布时的示意图,这里再也不作过多的展开,它的本质根据用户根据咱们的运维需求设定好必定的步长,建立新的Pod,销毁旧的Pod,所以能作到整个应用版本的变动和发布过程当中,都能有对应的容器对外提供服务。 对大部分场景来讲,它是够用的,并且整个过程也是很是好的理解,事实上在K8S体系,你们除了Pod/Node,看的最多的就是Deployment了。
CafeDeployment:感知底层拓扑和领域模型
回顾完Deployment,咱们能够再给你们看一下咱们根据实际需求做的CRD扩展,CAFEDeployment。CAFE是咱们SOFAStack PaaS产品线的名称,本文的最后会做一些介绍。
CafeDeployment有一个很重要的能力,就是可以感知到底层拓扑,这个拓扑是什么意思呢?可以知道我想把个人Pod发布到哪里,哪边的Node,不仅是基于亲和性的规则做绑定,而是真正能把高可用、容灾、以及部署策略等场景息息相关的信息,带到整个围绕发布的领域模型中。对此,咱们提出了一个叫部署单元的领域模型,他是一个逻辑概念,在yaml中简单的叫作Cell。在实际使用中,Cell的背后,能够是不一样的AZ不一样的物理机房,不一样的机架,一切都是围绕着不一样级别的高可用拓扑。
CafeDeployment:精细化分组发布扩容
感知到了底层拓扑,咱们再看一下CafeD的典型发布过程。这也是后面会经过产品控制台和命令行来演示的内容。这幅图所展示的过程,是一个精细化的分组发布,目的是可以让容器实例层面的变动,作到足够的可控和灰度。每个阶段都能暂停、验证、继续或回滚。
以图上这个例子进行说明,咱们的目标是发布或变动10个Pod,且须要让这10个Pod可以均匀分布在两个可用区,确保在应用层面是高可用的。同时,在发布的过程,咱们是须要引入分组发布的概念,即每一个机房都要先仅仅发布一个实例,暂停验证以后,再进行下一组的发布。因而第0组,就变成两边各1个实例,第1组各两个,第2组则是剩下的2个。在实际的生产环境中,围绕容器大规模变动会配合业务监控及更多维度的观察,确保每一步都是符合预期、验证经过的。这样在应用实例层面的精细化管控,为运维提供了可以及时刹车回滚的机会,是线上应用发布的一个重要的保险绳。
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项目提供了一套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 云应用引擎
说到这里,终于能够解释下前面提了不少的CAFE是什么意思了。CAFE, Cloud Application Fabric Engine 云应用引擎,是蚂蚁金服SOFAStack 云原生应用PaaS平台的名称,不只具有Kubernetes标准化的云原生能力,更在上层把通过生产检验的应用管理、发布部署、运维编排、监控分析、容灾应急等金融级运维管控能力开放了出来。同时,与SOFAStack 中间件、服务网格ServiceMesh、阿里云容器服务ACK 作了深度集成。
CAFE提供的关键差别化能力,是为应用生命周期管理提供具备技术风险防控保障(包括变动管控,容灾应急能力),并随之提供可演进的单元化混合云能力。是金融场景下落地分布式架构,云原生架构,混合云架构的关键底盘。
SOFAStack 金融分布式架构
最后一页,其实才是今天真正的主题。今天所介绍的CAFE,是 SOFAStack金融分布式架构产品中的一部分。当前SOFAStack已经在阿里云上商业化发布了,你们能够来申请试用,并与咱们做进一步的交流。你们能够经过搜索引擎、本文提供的产品连接、阿里云官网了解更多。
PPT连接:https://files.alicdn.com/tpsservice/a921197711869c4db7d9060b831df999.pdf