Serverless X OpenKruise 部署效率优化之道
作者 | 许成铭(竞霄)
Serverless 作为云计算的最佳实践、云原生发展的方向和未来演进趋势,其核心价值在于快速交付、智能弹性、更低成本。SAE(Serverless 应用引擎)作为首款面向应用的 Serverless PaaS 平台,实现了 Serverless 架构与微服务架构的完美结合,使存量应用也可以零代码改造享受 Serverless 赋予的技术红利,目前正在增强多语言特性,向多负载类型多元化场景方向演进。作为 Serverless 平台,高效的应用部署效率无疑是产品的核心竞争力,也是弹性伸缩、智能托管的基础。更快的部署效率,意味着更好的用户体验,更低的用户成本,更极致的弹性能力。SAE 极致弹性项目,力求提升应用端到端启动速度,保证用户在突发场景下的快速扩容效率和系统稳定性 SLA 。
Serverless 应用引擎:https://www.aliyun.com/product/aliware/product/sae
项目背景
SAE 底层使用 Kubernetes 架构,使用神龙裸金属安全容器、 ECI 两种资源池,用户在 SAE 中运行的应用会映射到 Kubernetes 中相应的资源。
通过采集线上全量 K8s 事件,整个 Pod 的创建生命周期进行分节点、分阶段的耗时统计分析,以神龙节点为例,各阶段比例如图:
从图中可以看出,整个 pod 的创建生命周期包括调度,拉取并创建 init 容器,拉取用户业务镜像,创建和启动容器等。其耗时主要集中在调度和拉取用户镜像上。究其原因在于 SAE 神龙节点调度链路整体耗时较长,而镜像耗时主要在于拉取镜像与解压镜像的时长,特别是在大容量镜像部署的情况下尤为突出。
实施方案
SAE 团队从长期架构规划,使用场景通用性等多个方面进行方案调研分析, 考虑采用原地升级的部署策略代替重建升级策略,避免部署过程中重调度,减少整体耗时。
所谓原地升级,即只更新 Pod 中某一个或多个容器版本、而不影响整个 Pod 对象、其余容器的升级,而且在升级过程中保证 ip、node 不发生改变。在阿里巴巴内部,绝大部分电商应用在云原生环境都统一使用原地升级的方式做发布,这种原地升级的模式极大地提升了应用发布的效率,节省了调度,分配网络,挂载磁盘以及拉取镜像的耗时。通过分析线上 SAE 用户历史部署记录,发现只更新镜像/程序包部署应用的占大多数,也就是说原地升级能力非常适合在 SAE 产品中落地。
原地升级给 SAE 带来的优势在于:
- 避免重调度,避免 sidecar 容器重建,整个部署耗时只需要拉取和创建业务容器;
- 无需调度,可以预先在 Node 上缓存新镜像,提高弹性效率;
- 可以保持 ip 不变,避免因 ip 变化导致依赖组件如注册中心感知的延时;
- 减少重建 pod 对调度器,注册中心,业务上下游的压力。
与此同时,OpenKruise 项目已经将原地升级能力通过 CloneSet / AdvanceStatefulSet 贡献于开源。CloneSet 是 OpenKruise 中提供的核心 workload 之一,它主要面向无状态应用,提供了更加高效、确定可控的应用管理和部署能力,支持优雅原地升级、指定删除、发布顺序可配置、并行/灰度发布等丰富的策略,可以满足更多样化的应用场景。CloneSet 与原生 Kubernetes workload 功能对比如图:
OpenKruise 项目:https://openkruise.io/
SAE 决定采用 CloneSet 作为新的应用负载,一方面借助其原地升级的能力提升应用整体部署效率,另一方面也结合 OpenKruise 开源的力量,共同打造通用标准的无状态应用负载的大规模使用实践。针对于增量应用, SAE 会默认采用 CloneSet 进行用户应用的部署,并结合最大不可用实例数和优雅升级时长来保证发布的流量无损,而对于存量应用, SAE 将采用基于有限状态机的滚动升级进行在线迁移操作。
方案上线后效果显著,在一个月的时间内,已经有近千个应用使用 CloneSet 进行部署,且原地升级次数为重建升级的两倍,部署效率比原生 K8s 提升 42% ,结合镜像缓存,用户部署应用到容器启动在秒级内完成。SAE 后续会对更多 OpenKruise 的高级能力产品化,同时结合用户场景,不断打磨稳定性与最佳实践回馈于开源。
云原生 K8s 部署应用重建升级策略 VS SAE 部署应用原生升级策略:
未来展望
在追求部署效率的道路中,SAE 正在探索更多维度,更细粒度的解决方案。相信在不久的将来,SAE 的极致弹性,无论在弹性效率,弹性规模,还是智能精准等方面都会大放异彩。
Serverless 技术公开课
Serverless 具体产品形态如何?如何在生产中使用?在落地过程中有哪些深坑?10 位阿里巴巴 Serverless 领域技术专家共同打造最适合开发者入门的 Serverless 公开课,3 个阶段 ,10 个课时,让你轻松上手,即学即用。
点击即可观看免费课程:https://developer.aliyun.com/learning/roadmap/serverless
Serverless X OpenKruise 部署效率优化之道的更多相关文章
- 从零入门 Serverless | SAE 的极致应用部署效率
作者 | 文俊 阿里巴巴云原生团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...
- QRowTable表格控件(三)-效率优化之-合理使用QStandardItem
目录 一.开心一刻 二.概述 三.效果展示 四.QStandardItem 1.QStandardItem是什么鬼 2.性能分析 3.QStandardItem使用上的坑 五.相关文章 原文链接:QR ...
- Tomcat服务部署及优化
Tomcat 服务部署及优化 1.Tomcat简介 2.Tomcat 服务安装及部署 3.Tomcat虚拟主机配置 4.Tomcat 优化 1.Tomcat简介: 概述: Tomcat是Java语言开 ...
- 18.Tomcat部署及优化
Tomcat部署及优化 目录 Tomcat部署及优化 Tomcat简介 Tomcat核心组件 Web容器 什么是 servlet? 什么是 JSP? Container 结构分析 Tomcat 请求过 ...
- php程序效率优化的一些策略小结
php程序效率优化的一些策略小结 1.在可以用file_get_contents替代file.fopen.feof.fgets等系列方法的情况下,尽量用 file_get_contents,因为他 ...
- jquery选择器效率优化问题
jquery选择器效率优化问题 jquery选择器固然强大,但是使用不当回导致效率问题: 1.要养成将jQuery对象缓存进变量的习惯 //不好的写法 $('#btn').bind("c ...
- php性能效率优化
[size=5][color=Red]php性能效率优化[/color][/size] 最近在公司一边自学一边写PHP程序,由于公司对程序的运行效率要求很高,而自己又是个新手,一开始就注意程序的效率很 ...
- Jenkins Kubernetes Slave 调度效率优化小记
Jenkins K8S Slave 调度效率优化 by yue994488@126.com 使用kubernetes为测试工具Gatling进行大规模压测,压测期间发现Jenkins调度压测实例较慢, ...
- 见招拆招-PostgreSQL中文全文索引效率优化
* { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...
随机推荐
- spring动态切换数据源(一)
介绍下spring数据源连接的源码类:| 1 spring动态切换连接池需要类AbstractRoutingDataSource的源码 2 /* 3 * Copyright 2002-2017 the ...
- js函数和封装
$就是jquery对象,$()就是jQuery(),在里面可以传参数,作用就是获取元素 js对象与jQuery对象的区别:jQuery对象是一个数组,jQuery对象转为js对象:[0] 取第一个即可 ...
- 使用let实现循环小例子
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- eh-admin一套前后端一体的轻量级后台管理系统
https://gitee.com/DawnYang/eh-admin 主要技术 后端技术:Spring Boot,Apache Shiro,MyBatis-Plus等: 前端技术:Jquery,La ...
- 2020最精细的Java学习路线图
在吾爱破解发布的Java学习路线图自我感觉良好,之后看到动力节点Java学院的这份学习路线图感觉专业的东西还得专业的人来做,这份专业的学路线图把我上次的Java学习路线图秒成渣,虽然内容差不多,上份是 ...
- JavaScript——字符串——模板字符串
JavaScript--字符串--模板字符串 字符串可以用反引号包裹起来,其中的${expression}表示特殊的含义,JavaScript会将expression代表的变量的值和反引号中的其它普通 ...
- 多个mysql同时运行
一.准备 mysql下载地址 https://dev.mysql.com/downloads/mysql/ 1.下载 2.解压缩 3.创建my.ini [Client] port = 3307 [my ...
- 20200713晚 noip14
考场 很紧张,上午考太烂了 开场看到"影魔",想起以前看过(但没做),心态爆炸,咆哮时被 hkh diss 了 T1 一开始想建边跑最长路,每个点在记录一下 \(\min\{a\} ...
- 传递集合参数以及SpringMVC和Struts2的区别
一.传递集合参数 二.和Struts2的区别 Struts2是基于类封装请求参数,SpringMVC是基于方法封装参数:
- Vue设置全局cookies样式
''' 配置全局cookies样式 下载:cnpm install vue-cookies import cookies from 'vue-cookies' Vue.prototype.$cooki ...