阿里云李钟:弹性计算控制系统团队的提效之路

news2024/10/7 12:18:50

2023 年 3 月 25 日,“城市领航之夜第一期”活动在上海举行,阿里云弹性计算控制系统技术架构负责人李钟出席了本次活动并带来了《弹性计算控制系统团队提效之路》的主题演讲,为大家详细分享了阿里云弹性计算控制系统团队所面临的挑战、如何通过技术架构提效,以及工程师文化建设等一系列内容。本文根据其演讲内容整理而成。

我从 2011 年开始就入职了阿里巴巴,主要负责 IM 服务端的工作,15 年加入了阿里云,在此期间一直负责业务的开发,2019 年担任了控制系统技术架构负责人,主要完成了阿里云弹性计算单元化架构的升级。今天的分享,我将从问题、技术架构、规范流程和工程师文化四个维度,通过弹性计算的角度以及技术和架构的角度,来分享弹性计算控制系统团队的提效之路。

从问题出发,看当前的挑战

阿里云弹性计算管控系统是一个大型的分布式系统,支持高并发和高可用,除此之外,也有自己独特的复杂度。

  • 规模大:管理全球 50 多个环境,支持 28 个公共云地域,兼容专有云技术和业务,并且已扩展到新的本地云、专属云等分布式云场景,规模非常庞大。以管理全球 50 个以上的环境为例,应用在做配置发布时需要在全球范围内变更 50 余次,这对系统的开发、运维和管理都带来巨大的挑战。
  • 业务复杂:弹性计算的产品类型不断向前发展,我们需要对每种类型都提供支持。且因为云计算底层是物理资源,业务需要对物理资源的限制进行描述和管理,因此业务逻辑也非常复杂。

在这里插入图片描述

对于阿里云而言,所有云产品都基于 ECS 构建,因此稳定性非常重要。但是系统本身还需要进行架构的升级和演进。我们要在技术演进、稳定性以及效能三者之间做到平衡。保持业务和技术的快速演进和升级,同时又要保障不出现稳定性的问题。

最后从团队的规模来看,弹性计算控制系统团队规模持续扩大,近年内已经增长近 6 倍。我们面临的挑战愈发严峻。

技术架构优先,构建效能基座

我们主张优先考虑技术架构的升级和优化来构建效能的基座。总结来说,有下面图中所示的 4 个方面。
在这里插入图片描述

首先,通过短期的方案快速解决问题。主要是三个手段,通过并发的方式投入提高速度,这也意味着会使用更多的资源;通过自动化和工具化的方式降低人力;通过引入标准化的流程来保证正确性。

短期的解决方案能够达到立竿见影的效果,为团队建立信心,让成员知道问题正在被关注和解决,促使每个人都去思考如何解决自己面临的问题,并为长期发展赢得时间。

短期方案临时解决问题之后,就要持续规划架构技术的升级,解决核心问题。这里主要包括三个方面,一是要思考问题的根本原因,从而有效的解决问题,而不是躲避问题。规划架构和技术的持续升级来根据实际情况构建高效的系统。二是坚持使用工具化、可集成、平台化的方式解决问题。保障技术升级的可持续性。最后要持续升级基础服务,中间件和基础组件,在代码不断演进的过程中,享受组件升级带来的性能和效能红利。

第三点,需要优化研发流程,使其灵活有效,避免缺少流程导致出现问题。也要避免流程过多导致系统臃肿的问题,探索新的思路,使用先进的思路和工具提效。

最后,需要不断沉淀和积累,一方面是知识体系的沉淀,同时也要注重构建可复用的系统框架和组件。下面我们重点来看上面提到的第一点,如何通过系统架构升级来构建效能的基座。

在这里插入图片描述

弹性计算管控系统负责处理的业务可以分为两个部分,一方面是要管理底层的物理资源,负责对资源的状态进行管控。另外一方面响应用户 OpenAPI 调用,来完成用户的业务请求处理。

在弹性计算控制系统之前的实现中,这两个部分是相互耦合的。既需要进行资源状态的管理,也需要实现复杂的用户业务。资源状态管理的业务逻辑变化较小,并发度高,对稳定性较为敏感。而用户业务则变化快,实现较为复杂。

因此,我们将状态管理和业务逻辑做了分层。底层是状态管理的集群,集群逻辑简单但体量较大,比较稳定,不需要有太多的发布。而业务逻辑部分被放到上层,由 RPC 调用连接的微服务集群,整个集群类似于 ServiceMesh,服务之间的依赖非常复杂,变化也非常快,且无状态。这使得逻辑上异构的两个部分可以分隔开,解决了稳定性和高并发的问题,同时也满足业务逻辑的高效迭代。

业务逻辑层采用模块化和服务化架构,使得各个系统之间的职责较清晰,各个服务的角色可以定义。各个系统使用标准的公共 API 进行交互,使得系统耦合度降低,服务之间可以独立快速演进迭代。

另外,我们引入了事件驱动架构,通过事件模型将系统里面核心链路和非关键模块解耦,解决非关键模块对核心链路的稳定性影响问题。另外也使得系统的核心链路可以保持清晰有效,提升了系统的稳定性和性能。也使得系统的开发和迭代更加高效。

上面我们通过架构的演进和优化,解决系统快速的演进和迭代的问题,下面来看一下团队是如何通过积累和建设公共的框架和组件,使得业务开发可以事半功倍。

在这里插入图片描述

2015 年 6 月,弹性计算控制系统团队创建了 ecs-common-framework,在业务开发的过程中,将一些通用的组件积累到这个公共库中,其中包含了缓存,幂等,限流,工作流等等功能。到 2021 年,ecs-common-framework 中已经完成了近 230 多个版本的发布,为业务的开发提供了有效支持。到 2021 年,我们对其进行了模块化方式重构,并命名为 yaochi-peento-framework,目前已有多个云产品接入使用。

yaochi-peento-framework 框架由四个部分组成:

  • 基础框架:包含了分布式后端服务开发的公共组件,包括缓存,配置,幂等,序列化等。
  • 业务模块:包含了OnECS的公共业务组件,提供 OnECS 通用支持,包括 Quota,ActionTrail,Tag 等。
  • SpringBoot Stater:整个框架会基于 springboot 进行输出,是的业务方可以非常方便集成和管理。
  • 生命周期管理:提供业务域的生命周期管理,包括应用的初始化,运维等能力。

有了上述的 yaochi-peento-framework,使得业务方开发新的云产品变得非常方便。正是因为在 2015 年创建了 ecs-common-framework,写下第一行代码, 才能在 21 年进行重构和升级。yaochi-peento-framework 使得开发云产品控制系统的效率提升,并且成本大大降低。目前该模块不仅仅是在弹性计算内部使用,也被推广到弹性计算之外的其他云产品团队。
在这里插入图片描述

下面我们来介绍一下在 yaochi-peento-framework 里面,我们是如何设计和实现一个公共的组件。

公共组件方面,标准化和高可用是首要的两个的原则。组件的建设需要提供标准的 API,同时具有完备的文档描述和严谨的 Changelog 跟踪。在高并发方面,一方面只得是组件需要能支持高并发的调用,另外也需要对高并发的业务有特殊的实现,组件应该是高并发分布式系统的最佳实践总结。

另外,可插拔和可扩展也是系统非常关键的原则,弹性计算的部署架构非常复杂,要支持多种不同的部署形态,包括公共云,专有云,分布式云等。在不同环境部署时,依赖往往不一致,因此作为基础组件,需要提供可适配的能力。

yaochi-peento-framework 中的所有的组件都提供通用的 interface,并且做到可以支持多种实现。比如上面图中左边的部分所示,yaochi-pento-cache 模块提供了统一的缓存的 interface,但在同一套 interface 下支持多种缓存的实现,可以做到在不同的部署形态依赖不同的缓存实现,但因为这些缓存系统都实现了同一套 interface 来工作,因此对业务逻辑部分无感,这使得系统往前演进支持更多部署形态的时候会非常便捷。

可观测和可运维的能力也至关重要。所有组件都会有统一的可观察能力输出,全部通过 SLS(阿里云内部的日志系统),最后汇总到 Grafana 上,业务系统接入后即可马上获取到所有的观测数据。同时组件也会默认提供 opsapi 来支持运维能力。

yaochi-peento-framework 累积了系统开发中的最佳实践的组件,对该框架的复用使得新的业务和服务开发可以直接使用现有组件的能力,大大提升了应用开发的效能。

在这里插入图片描述

除了分布式系统碰到的问题之外,在弹性计算控制系统的场景里,还会有多地域管理的复杂度问题,这是因为地域管控的环境非常多(目前已经有 50 多个环境),中间件提供的控制台的能力已经无法满足我们的管理需求。使用 API,工具化和自动化的方式是唯一的选择,这里我们引入了近几年较为流行的平台工程(Platform Engineering)的概念。我们希望中间件提供 API,而不是控制台给我们,将所有 API 汇集,通过单元化的运维服务输出,然后由全局的运维服务平台整体集成。这样,运维多个地域时,不再需要切换控制台逐个操作,而只需要通过总的运品台进行管理运维即可。

运维 API 的集成能力还使得采用自动化,流程化的平台方案成为可能。

在这里插入图片描述

最后,在技术方案,我们想讨论一下中间件和基础技术组件的升级。弹性计算控制系统内部设计了一个框架和组件的升级流程。组件的引入策略,引入之后有流程进行跟踪,评判组件状态,每个组件都会有相应 owner,负责了解组件的情况,比如是否有大的 bugfix,或大的能力更新等,并按照实际需要进行主动升级。我们并不一定会对每一次更新都进行升级,但能够做到对每一版本都了如指掌。

一方面这样做是的我们可以及时了解组件或者框架在功能,安全性和性能方面的升级,能及时评估并安排升级,获得相应的红利。另外一方面,当出现相关的安全性漏洞风险,需要进行升级时,也会对相关的影响面较为了解,升级影响评估充分,风险降低。

一句话来说,有准备的升级,相比较临时评估升级,效率要更高。

规范流程制定,建立效能脉络

在这里插入图片描述

了解完技术方面的内容,我们来看一下流程。在弹性计算控制系统团队,我们的流程分为规划设计、编码测试、发布以及运维等几个阶段。

在每一个阶段,实际上我们都会有较为严格的流程,在这里,我想分享的是几个我认为较为有效的流程或者工具。

第一个是 RFC 机制,RFC 的全文是“Request For Comments”,意思是让大家来评审。规划设计阶段,RFC 是一种重要方式。我们鼓励同学记录下所有灵光一现的想法,并在日常对其进行不断补充扩大,直至它能够成为一个完整的方案,才会最终被呈上供团队进行讨论和决策,提高讨论效率,避免浪费时间。

另外在技术文档方案,但对于开发人员而言,写文档是一件极具挑战的事。因为系统在不停的变化,今天写下的文档,可能在很短的时间之后就失效了。因此,在弹性计算控制系统团队内部,我们采用的方式是让开发人员在开发的每一步都将评审和方案做到足够详尽完善,最后我们输出的是当前方案的详细技术文档,这样等于我们记录了对系统每一次变更的详细方案,新的同学并不是通过学习一个大而全的文档,而是学习系统每一次更新的方案,来了解系统的全貌。

工程师文化建设,丰富效能氛围

在这里插入图片描述

最后我们来看一下弹性计算内是如何来进行工程师文化的建设。

在考虑这个问题的时候,我也去问了一下 ChatGPT,它给的答案是“好的工程师文化应该是大家共同拥有的目标,有共同的价值思考,有共同的实践”。

在我们团队内部,为了营造良好的工程师文化,会在内部举行定期的技术分享,比如每周四晚上举行的“Hack Thursday”分享活动。另外有新的方案或有方案评审时,我们会鼓励大家做直播。不论直播效果如何,工程师准备直播的过程也是一种自我促进。

同时,我们会举办内部的技术比赛,促进工程师之间的相互交流与学习。

最后,我们还推行了一项名为 feature marke 的工作,会将一些探索性的、重要但不紧急的工作作为员工平时的赛马项目,同时也作为实习生项目,调动实习生思考和探索的积极性,也得到了良好的效果。
在这里插入图片描述

最后我们来看一下高能效团队的展望。

首先我们需要拥抱云原生技术,因为现在很多软件工程和架构的创新都是基于云原生的技术来完成的,虽然弹性计算是一个 IaaS 层的基础服务,但是我们也需要积极采用云原生的技术,就像编译系统一样,实现自举能力。

另外一个就是人工智能技术,主要是下面的几个方案:

  • 首先,可以帮助进行知识系统的建设,文档的生成和维护等;
  • 其次,可以通过人工智能来进行编码辅助;
  • 第三是可以通过 AI 来实现智能技术支持;
  • 最后,我们也希望能够利用 AI 帮助团队做决策,但想要利用人工智能辅助架构和技术设计,前提是先让人工智能理解我们的技术和数据。

阿里云李钟:弹性计算控制系统团队的提效之路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/516479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业论文选题推荐|软件工程|系列五

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)遥感图像的居民…

言之画: AI绘画平台

【产品介绍】 言之画是出门问问推出的AI绘画平台。支持二次元、蒸汽朋克、插画等 8 种创作风格。用户只需输入文字,「言之画」就能一次性生成 8 张光影逼真、细节丰富的 2K 高分辨率图像。 除了以文生图,它还拥有以图生图、动图生成、个性头像生成等 AI …

MATLAB 之 常用内部函数,运算,字符串和结构数据与单元数据

文章目录 一、常用内部函数1. 常用数学函数2. 矩阵的超越函数2.1 矩阵平方根2.2 矩阵对数2.3 矩阵指数2.4 普通矩阵函数 二、MATLAB 运算1. 算术运算1.1 基本算术运算1.2 点运算 2. 关系运算3. 逻辑运算 三、字符串1. 字符串的表示2. 字符串的操作2.1 字符串的执行2.2 字符串与…

ChatGPT下的自动化工具Auto-GPT、AgentGPT、BabyAGI和GodMode

ChatGPT 对于一个大目标来说,他是不知道怎么一步一步的帮我们构建出来。有了Auto-GPT、AgentGPT、BabyAGI和GodMode 这些自动化工具,我们只需要输入一个大目标,这些自动化工具能够帮我们一步一步轻松实现。 1.Auto-GPT 网址:htt…

C/C++每日一练(20230512) 成绩打印、补齐数组、水仙花数

目录 1. 成绩打印 ※ 2. 按要求补齐数组 🌟🌟🌟 3. 水仙花数 ※ 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 成绩打印 一个班有10个同学&am…

airserver7.2.7最新中文版下载及功能介绍

最近开会打算把手机投屏到自己的Mac上演示用,于是就打算用下听了很久好用但是一值没有使用的AirServer!十分简单的操作就可以完美的投屏到Mac电脑,而且不用像Mac自带的QuickTime用线连接手机!它可以把AirPlay / AirTunes上的音频、视频、照片、幻灯片还有…

母亲节祝福html源码,母亲节祝福html代码,母亲节表白妈妈代码,母亲节祝福网页代码

母亲节祝福html源码&#xff0c;母亲节祝福html代码&#xff0c;母亲节表白妈妈代码&#xff0c;母亲节祝福网页代码 运行截图 核心代码&#xff1a; <!DOCTYPE HTML> <html lang"zh-Hans"> <head><meta charset"utf-8"><meta…

我们选择护眼台灯的标准是什么?护眼台灯的国家标准

小时候在学校&#xff0c;父母跟老师经常强调“眼睛是心灵的窗户”要保护好眼睛&#xff0c;不管是在学校上学还是在家写作业时&#xff0c;都会很突然的听见“头抬高点”、“眼睛离远点”等类似的劝导&#xff0c;刚开始还不以为然&#xff0c;直到视力下降&#xff0c;带上了…

ctf_BUUCTF_web_总结(待更新)

文章目录 SQL注入文件上传漏洞文件包含漏洞php反序列化RCE模板安全问题&#xff08;SSTI&#xff09;XXE代码审计杂七杂八的知识点正则表达式CTF做题总结 SQL注入 [极客大挑战 2019]EasySQL[SUCTF 2019]EasySQL[强网杯 2019]随便注[极客大挑战 2019]BabySQL[BJDCTF2020]Easy MD…

雪浪云算力开发者大赛

1赛题背景 汽车生产工艺复杂&#xff0c;一辆汽车的制造需要完成焊装、涂装、总装三大工艺&#xff0c; 经过焊装车间、涂装车间、总装车间。各车间存在上下游关联关系&#xff0c;每个车间有自己的优化排序目标&#xff0c;需要综合考虑多种复杂的排序规则及工艺约束&#xf…

9.100ASK_V853-PRO开发板支持E907小核开发

0.前言 ​ 100ASK_V853-PRO开发板的V853芯片集成Arm Cortex-A7和RISC-V E907 双CPU&#xff0c;玄铁E907 是一款完全可综合的高端 MCU 处理器。它兼容 RV32IMAC 指令集&#xff0c;提供可观的整型性能提升以及高能效的浮点性能。E907 的主要特性包括&#xff1a;单双精度浮点单…

centos7设置时区,时间+时间同步的三种方式

centos7设置时区&#xff0c;时间时间同步的三种方式 1.centos7设置时区 1.1查看当前时区&#xff1a; timedatectl 1.2查看时间命令&#xff1a; date1.3选择时区命令 [rootlocalhost test]# tzselect Please identify a location so that time zone rules can be set co…

第五十六章 Unity 音频播放

Unity可以导入大多数标准音频文件格式&#xff0c;精通于在3D 空间中播放声音&#xff0c;还可根据需要提供其他效果。虽然播放声音是一件非常简单的事情&#xff0c;但是为了模拟现实直接中的各种声音效果&#xff0c;Unity会提供各种各样的组件来实现。 首先&#xff0c;我们…

创意无限,场景惊喜:让你的描述变成现实(Skybox Labs)

你是否曾经想象过能够用文字来创造出一个全新的世界&#xff1f;你是否曾经想过能够用一句话来生成一个令人惊叹的360天空盒&#xff1f;如果你的答案是肯定的&#xff0c;那么你一定要试试Skybox Labs&#xff0c;这是一个由Blockade Labs开发的AI-powered解决方案&#xff0c…

最全的免费SSL证书申请方式

在SSL广泛普及的今天&#xff0c;申请一张免费的SSL证书是一件非常容易的事情。这里为大家总结当前阶段(2023年)拥有一张免费SSL证书的方式。首推的方式为来此加密网站&#xff0c;文章后面会有详细的介绍。 下面介绍几种获取免费SSL证书的方式&#xff0c;大家可以根据自己的…

【运维知识进阶篇】集群架构-Nginx常用模块(目录索引+状态监控+访问控制+访问限制)

这篇文章给大家介绍Nginx常用模块&#xff0c;包括Nginx目录索引&#xff0c;Nginx状态监控&#xff0c;Nginx访问控制&#xff0c;Nginx访问限制。熟悉使用模块&#xff0c;才能给Nginx增加色彩。 目录索引模块 Nginx不允许列出整个目录浏览下载&#xff0c;可以用模块自己做…

QT窗体之间值的传递,多种方法实现

QT窗体之间值的传递&#xff0c;多种方法实现 前言[1] QT窗体之间值的传递&#xff0c;多种方法实现1、新建工程2、全局变量extern3、公共成员函数public4、信号与槽singnals5、总结与工程分享主窗口.cpp文件主窗口头文件子窗口.cpp文件子窗口头文件 [2] Qt在子窗口接收父窗口的…

Node.js版本管理工具,我选择n

文件收录&#xff1a; 个人网址&#xff1a;https://linglan01.cn/ Github&#xff1a; https://github.com/CatsAndMice/blog/issues 为什么要管理Node.js版本&#xff1f;这是我们要先明白的点。 假设我电脑Node.js版本为v14.x&#xff0c;日常工作中可能会遇到以下场景&…

c#入门教程(有一定计算机基础的人看)

废话不说&#xff0c;有一定基础的人看&#xff0c;如java等程序员 c#是什么&#xff1f; 开发语言&#xff0c;为什么要学&#xff1f;主流游戏是用这个开发 c#怎么运行? c#微软做的&#xff0c;微软做了个.net framework&#xff0c;c#运行在这个之上。windows自带.net …

8. 100ASK_V853-PRO开发板支持MPP媒体处理平台

0.前言 ​ MPP 系统控制模块&#xff0c;根据芯片特性&#xff0c;完成硬件各个部件的复位、基本初始化工作&#xff0c;同时负责完成 MPP&#xff08;Media Process Platform 媒体处理平台&#xff09;系统各个业务模块的初始化、去初始化以及管理 MPP 系统各个业务模块的工作…