成本降低40%、资源利用率提高20%的 AI 应用产品云原生容器化之路
作者
郭云龙,腾讯云高级工程师,目前就职于 CSIG 云产品三部-AI 应用产品中心,现负责中心后台业务框架开发。
导语
为了满足 AI 能力在公有云 SaaS 场景下,服务和模型需要快速迭代交付的需求,保障服务在不稳定高并发时的高成功率,以及进一步提升资源利用率,AI 应用产品中心进行了一系列的调研与实践,本篇将重点介绍团队在容器化方面的实践经验。
背景和问题
公有云 AI SaaS 产品(如人脸融合)的一般服务流程为:C 端或 B 端客户通过采集设备采集图像、音视频等,经由云 API 等接入方式传入,服务端利用强大的计算能力、充足的资源和相对成熟的算法对客户输入的多媒体内容进行处理。
如上图所示,对于一般流程来说,我们面临着三个挑战。
- 采集质量不稳定:由于采集设备之间存在差异,采集到的质量也会存在差异,拿图像处理来说,大图和小图会给我们的服务带来不同的压力,有时服务会因为集中的大图并发产生失败。
- 短期、高并发需求多:我们的客户会用我们的能力实现不同的玩法,使用人脸融合来进行游戏活动宣传就是一个很常见的运营手段,但是这种活动会给我们的服务带来短期内的高并发压力。
- 模型、服务迭代快:AI SaaS 服务的竞争非常激烈,经常会有客户提出新的需求,加上算法难免会有 badcase,所以我们的服务也要进行很频繁的升级迭代。
我们再来看下我们容器化前的精简架构(如上图所示),物理机的开发部署大背景下,我们的逻辑服务不论是结构上还是基础上都属于大泥球模式,另外算法服务也常有混布的现象存在。
这种架构也导致了忙时服务间抢占资源的情况频繁发生,影响服务成功率及耗时,导致我们没有办法很好的满足客户的需求;而闲时资源利用率非常低,容易造成资源浪费。
以两个实际的例子来说明:
- 升级发布时,我们需要先从LB中剔除一个节点,并在节点上观察没有流量进入后进行服务升级。升级完成后,人工对服务进行成功性检测,检测结果ok后再加回LB中。
- 客户搞活动时提出高并发需求,如果当前物理机/vm资源池不满足,需要向资源同学紧急提物理机需求,资源同学协调到机器后,我们需要人工对机器环境/网络重新初始化,然后执行上述1操作。待活动结束后机器闲置,易造成成本浪费。
为了更好的满足客户不断迭代的需求,减轻研发的运维负担,补齐弹性能力和接入高效的服务管控平台对我们来说是迫切需要的。趁着公司推动上云的时机,我们对架构组件进行了几轮调研和优化。本文主要对容器化过程进行阐述。
容器化过程记录
我们的容器化上云到现在为止可以分为三步:容器化,稳定性提升和利用率提升。
容器化
这里的容器化映射到业务上来说,除了将服务载体由物理机迁移到容器上,更主要是将原来的复杂逻辑解耦,微服务化。
如下图所示,我们先对服务本身做了瘦身微服务化,另外借助于容器的能力,将原来混布的服务彻底分开。如何进行微服务化会因业务的不同存在差异,本篇对此不做赘述。
稳定性提升
在第一步容器化之后,我们很快享受到了飞一般的服务升级和扩容速度。同时对容器化比较浅显的理解也给我们带来了一些新的问题。
- 调用量波动较大的服务由于频繁扩缩容导致业务失败
- 一些客户传的大图在低核容器上处理效率较低
- 集群资源紧缺导致的容器无法按需扩容等。
对于上述三个问题,我们也分别找出了应对方案。
灵活使用探针
起初我们的服务都是没有设置存活和就绪检测(探针 )的,Prestop 给缩容时加上了一层保护,但是并不彻底,而且在扩容时难免会有服务失败。
探针给我们提供了另一种强大的解决方式。一开始时,我们参照链接中的示例,进行简单的端口检查来判断服务是否正常运行。后来我们发现了更多灵活的运用技巧和使用场景。以下列出几个例子供大家参考以及发散出更多有趣实践。
例子1:在一开始时大家经常遇到 LB Agent 启动时获取路由必然失败的情况,我们可以使用就绪探针来进行 LB 的预加载(如下图),即可达到 LB 获取成功后标记服务启动成功的效果。
例子2:由于一些低版本OS的实例存在弱口令的问题,大家需要把所有依赖旧版OS的镜像全部升级,这个工作对我们来说是及其繁重的,于是我们同样利用了探针,在容器标记服务启动前把弱口令全部干掉。
例子3:某个服务比较特殊,内存占用经常波动,当内存小于某个值时,服务会偶现失败,但是端口正常存活。这时我们可以使用 ConfigMap+python 脚本来进行一些复杂的检测:
针对大图进行筛选适配
容器化后,我们发现某个算法在接收到高分辨率图片时,服务成功率会出现波动,原因是算法在对提特征时会出现更多的消耗,这一现象在物理机上部署时被物理机核数多的优势掩盖住了,一旦到了核数较低的容器上就显露了出来。为了解决这个问题,我们在上层逻辑中新增了大图筛选功能(如下图所示),如果检测到是大图,则走回物理机集群(由于初始时 TKEx 提供最高规格容器核数为 8 核,后来才扩充支持了 24 核及以上),如果是一般图片,则走容器集群。
多集群部署
在使用 TKEx 时,我们经常会碰到部署的 workload 会因为整体集群资源不足的原因,无法扩容到指定的 max 值,一度非常苦恼。
TKEx 的同学也是推荐我们在其他的集群复制一份资源,当一个集群扩不出来时,另一个集群充当备份角色。在这么调整过后,我们的扩容成功率逐步上升。
后来又出现了整个地域的资源都比较紧缺的情况,于是我们把一些对时延不那么敏感的服务进行了多地域部署(如下图),最终将集群资源不足的风险进一步降低。
当一地资源不足的情况下使用多地域部署以及 LB 时,一般 LB 都会根据后端响应时间动态调整各节点权重,所以我们应注意以下两点:
- 关闭就近访问
- 根据上下游调整 LB 权重(比如上游服务部署在广州,下游同时部署了南京和广州,这是南京和广州的 LB 权重分别为130,100)
利用率提升
在进行过一轮稳定性提升之后,我们可以更加自信的利用弹性能力,利用率也有了显著提升。不过依旧有两个问题阻碍着我们的利用率更进一步。一个是有些服务模型大,启动慢,流量突增时服务无法很及时的扩容出来,这时我们必须要提前占用一些资源导致利用率提不上去。
针对第一个问题,我们挑选了部分流量有规律的服务。利用 TKE 提供的定时 HPA 能力,在已知流量高峰前定时进行一轮扩容。
成果
优化前 | 优化后 | |
---|---|---|
资源占用 | 1500+CPU 物理机 ( 8w+ 核)800+GPU 物理机 (P4 1600 卡) | CPU 6w 核 T4 1000 卡 |
资源利用率 | 10% | 30% |
成本 | - | -40% |
服务成功率 | 99.9% | 99.95% |
服务扩容效率 | 小规模 (<2000核): 3 小时 大规模: 2天 | 小规模 (<2000核): 10分钟 大规模: 6小时 |
服务升级效率 | 小规模 (<50实例): 6 小时 大规模: 2天 | 小规模 (<50实例): 30分钟 大规模: 6小时 |
当前我们的 AI 服务已经基本完成容器化的升级。成功率高,扩容快,欢迎大家扫码进行体验。
关于我们
更多关于云原生的案例和知识,可关注同名【腾讯云原生】公众号~
福利:公众号后台回复【手册】,可获得《腾讯云原生路线图手册》&《腾讯云原生最佳实践》~
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!
成本降低40%、资源利用率提高20%的 AI 应用产品云原生容器化之路的更多相关文章
- kubernetes 降本增效标准指南| 容器化计算资源利用率现象剖析
作者:詹雪娇,腾讯云容器产品经理,目前主要负责腾讯云集群运维中心的产品工作. 张鹏,腾讯云容器产品工程师,拥有多年云原生项目开发落地经验.目前主要负责腾讯云TKE集群和运维中心开发工作. 引言 降本增 ...
- 作业帮上万个 CronJob 和在线业务混部,如何解决弱隔离问题并进一步提升资源利用率?
作者 吕亚霖,作业帮基础架构 - 架构研发团队负责人.负责技术中台和基础架构工作.在作业帮期间主导了云原生架构演进.推动实施容器化改造.服务治理.GO 微服务框架.DevOps 的落地实践. 别路,作 ...
- kubernetes 降本增效标准指南| 资源利用率提升工具大全
背景 公有云的发展为业务的稳定性.可拓展性.便利性带来了极大帮助.这种用租代替买.并且提供完善的技术支持和保障的服务,理应为业务带来降本增效的效果.但实际上业务上云并不意味着成本一定较少,还需适配云上 ...
- 智能 Request 推荐,K8s 资源利用率提升 252%
作者 王孝威,FinOps 认证从业者,腾讯云容器服务产品经理,热衷于为客户提供高效的 Kubernetes 使用方式,为客户极致降本增效服务. 余宇飞,FinOps 认证从业者,腾讯云专家工程师,从 ...
- 使用Elastic Job的分片配置加速任务执行和提高资源利用率
上一篇,我们介绍了如何使用Elastic Job实现定时任务.解决了使用@Scheduled来实现时候存在的竞争问题,同时也实现了定时任务的高可用执行. 然而,还有一类问题是我们在做定时任务时候容易出 ...
- 如何将离线计算业务的成本降低65%——弹性容器服务EKS「竞价实例」上线
在容器化的应用场景中,大数据计算是其中很大并且业务应用在逐渐增加的一个热门领域,包括越来越多的人工智能企业,都在使用容器技术来支持业务中的大量计算任务.降低成本.提升资源利用率也是当前这部分用户非常期 ...
- 如何提升集群资源利用率? 阿里容器调度系统Sigma 深入解析
阿里妹导读:为了保证系统的在线交易服务顺利运转,最初几年,阿里都是在双11大促来临之前大量采购机器储备计算资源,导致了双11之后资源大量闲置点现象.是否能把计算任务与在线服务进行混合部署,在现有弹性资 ...
- 云原生的弹性 AI 训练系列之三:借助弹性伸缩的 Jupyter Notebook,大幅提高 GPU 利用率
Jupyter Notebooks 在 Kubernetes 上部署往往需要绑定一张 GPU,而大多数时候 GPU 并没有被使用,因此利用率低下.为了解决这一问题,我们开源了 elastic-jupy ...
- 提升资源利用率的MapReduce框架
Hadoop系统提供了MapReduce计算框架的开源实现,像Yahoo!.Facebook.淘宝.中移动.百度.腾讯等公司都在借助 Hadoop进行海量数据处理.Hadoop系统性能不仅取决于任务调 ...
随机推荐
- MySQL-13-日志管理
常用日志参数 经常用到的有错误.快慢查询.二进制等日志 错误日志 1 作用 记录启动\关闭\日常运行过程中,状态信息,警告,错误,排查MySQL运行过程的故障 2 错误日志配置 默认就是开启的: /数 ...
- 【笔记】初探KNN算法(2)
KNN算法(2) 机器学习算法封装 scikit-learn中的机器学习算法封装 在python chame中将算法写好 import numpy as np from math import sqr ...
- DVWA靶场之XSS(Stored)通关
Low: <?php if( isset( $_POST[ 'btnSign' ] ) ) { // Get input $message = trim( $_POST[ 'mtxMessage ...
- WPS:利用数据透视表将数据按指定列进行分组求和
1.场景 如图所示:根据日期计算日期当天的总金额 2.利用数据透视表完成该操作 (1)选择金额列的某一格数据,点击上方插入--数据透视表 !!请确保表格第一行为表头 (2)在弹出的页面中直接点击&qu ...
- Linux搭建Radius服务器
安装环境介绍 以下服务器信息为该文档安装Radius服务环境 服务器信息:CentOS7 内核版本:3.10.0-1062.el7.x86_64 安装软件版本 freeradius-utils-3.0 ...
- 题解 [HNOI2008]GT考试
传送门 这题暴力对拍都难搞,差评 一般的题解里思路是考虑一般DP: 令\(dp[i][j]\)为枚举到第i位时匹配到第j位的方案数,令\(g[k][j]\)为将匹配到k位的情况补到匹配到j位的方案数 ...
- [转]C# 互操作性入门系列(四):在C# 中调用COM组件
传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...
- mfc 常用的知识点
在MFC中引入了文档-视结构的概念,文档相当于数据容器,视相当于查看数据的窗口或是和数据发生交互的窗口.因此一个完整的应用一般由四个类组成:CWinApp应用类,CFrameWnd窗口框架类,CDoc ...
- C#的6种常用集合类
一.先来说说数组的不足(也可以说集合与数组的区别): 1.数组是固定大小的,不能伸缩.虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的 ...
- HttpClient4.3教程 第三章 Http状态管理
最初,Http被设计成一个无状态的,面向请求/响应的协议,所以它不能在逻辑相关的http请求/响应中保持状态会话.由于越来越多的系统使用http协议,其中包括http从来没有想支持的系统,比如电子商务 ...