作者 | 许成铭(竞霄)

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 部署效率优化之道的更多相关文章

  1. 从零入门 Serverless | SAE 的极致应用部署效率

    作者 | 文俊 阿里巴巴云原生团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...

  2. QRowTable表格控件(三)-效率优化之-合理使用QStandardItem

    目录 一.开心一刻 二.概述 三.效果展示 四.QStandardItem 1.QStandardItem是什么鬼 2.性能分析 3.QStandardItem使用上的坑 五.相关文章 原文链接:QR ...

  3. Tomcat服务部署及优化

    Tomcat 服务部署及优化 1.Tomcat简介 2.Tomcat 服务安装及部署 3.Tomcat虚拟主机配置 4.Tomcat 优化 1.Tomcat简介: 概述: Tomcat是Java语言开 ...

  4. 18.Tomcat部署及优化

    Tomcat部署及优化 目录 Tomcat部署及优化 Tomcat简介 Tomcat核心组件 Web容器 什么是 servlet? 什么是 JSP? Container 结构分析 Tomcat 请求过 ...

  5. php程序效率优化的一些策略小结

    php程序效率优化的一些策略小结   1.在可以用file_get_contents替代file.fopen.feof.fgets等系列方法的情况下,尽量用 file_get_contents,因为他 ...

  6. jquery选择器效率优化问题

    jquery选择器效率优化问题   jquery选择器固然强大,但是使用不当回导致效率问题: 1.要养成将jQuery对象缓存进变量的习惯 //不好的写法 $('#btn').bind("c ...

  7. php性能效率优化

    [size=5][color=Red]php性能效率优化[/color][/size] 最近在公司一边自学一边写PHP程序,由于公司对程序的运行效率要求很高,而自己又是个新手,一开始就注意程序的效率很 ...

  8. Jenkins Kubernetes Slave 调度效率优化小记

    Jenkins K8S Slave 调度效率优化 by yue994488@126.com 使用kubernetes为测试工具Gatling进行大规模压测,压测期间发现Jenkins调度压测实例较慢, ...

  9. 见招拆招-PostgreSQL中文全文索引效率优化

    * { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...

随机推荐

  1. JDBC中的元数据

    在我编写JDBC代码的时候:出现很多的重复的代码,有没有什么办法让我们能够编写出更加通用的JDBC代码呢?使用元数据,元数据能够让我们编写出更加通用的JDBC代码.什么是元数据呢?(三种元数据)1)连 ...

  2. Struts2框架基本使用

    时间:2017-1-6 16:53 修改struts.xml配置文件不需要重启服务器.Struts2框架    一.        *   介绍Struts2        *   关于Struts2 ...

  3. 微信小程序学习笔记四 页面的生命周期

    1. 生命周期 1.1 对应阶段说明 onLOad(Object query) 1.1 页面加载时触发, 一个页面只会调用一次, 可以在 onLoad的参数中获取打开当前页面路径中的参数 1.2 参数 ...

  4. 高德地图——添加标记的两种方法&删除地标记的两种方法

    添加标记: 1.marker.setMap(map); 2.marker.add([marker]); 删除标记: 1.marker.setMap(null); 2 map.remove([marke ...

  5. Spring Boot +Vue 项目实战笔记(一):使用 CLI 搭建 Vue.js 项目

    前言 从这篇文章开始,就进入真正的实践了. 在前端项目开发中,我们可以根据实际情况不同程度地使用 Vue.利用 Vue CLI(或写成 vue-cli,即 Vue 脚手架)搭建出来的项目,是最能体现 ...

  6. 前端axios请求二进制数据流转换生成PDF文件空白问题(终极解决方案)

    本文章共1570字,预计阅读时间1 - 3分钟. 问题场景: axios请求二进制数据转换生成PDF空白问题,使用axios请求后端接口,后端返回的二进制流文件,需要转换成PDF,但是在postman ...

  7. vue 引入 tcplayer,并且实现视频点播,腾讯点播

    这篇文章仅用于上传到 腾讯的视频点播,上传到腾讯视频请看上一篇文章,话不多说,直接上代码 <template> <div> <video :id="tcPlay ...

  8. 【曹工杂谈】详解Maven插件调试方法

    前言 今年的更新频率简直是降至冰点了,一方面平时加班相对多一些了,下班只想玩手机:另一方面,好像进了大厂后,学习动力也很低了,总之就,很懒散,博客的话,今年都才只更新了不到5篇. 现在慢慢有一点状态, ...

  9. SQL语句之基本使用

    1.sql语法 一些重要的SQL命令: SELECT - 从数据库中提取数据 UPDATE - 更新数据库中的数据 DELETE - 从数据库中删除数据 INSERT INTO - 向数据库中插入新数 ...

  10. 第06课:GDB 常用命令详解(中)

    本课的核心内容: info 和 thread 命令 next.step.util.finish.return 和 jump 命令 info 和 thread 命令 在前面使用 info break 命 ...