TCS 弹性计算平台:像工匠一样耕耘云计算

序言

2016年腾讯架构平台部相继推出了两朵云 -- 云存储和云接入,在公司内外打造了良好的口碑同时,资源量也得到了增加,依托于部门海量的存储资源,建设了TCS(Tencent ComputeServices)-弹性计算平台。截至目前,弹性平台运营的计算力,服务了公司图片压缩、视频转码、离线计算和AI计算等多个计算场景,前不久平台服务的AI 绝艺围棋获得了第十届UEC比赛的冠军。平台强大的计算并非直购设备堆积,而是未增加任何预算成本,默默挖矿耕耘,不断优化逻辑细节所得。

平台演变

2012年图片上传下载量剧增,为扛住海量图片压缩,平台快速上线直接混部策略,存储和压缩同机部署,虽然服务了业务的增长,但运营困难,资源抢占的问题日显,给运维带来了繁巨的工作量,为解决资源抢占等问题,平台启动重构,取消直接混部,改用KVM虚拟机,平台维护虚拟机生命周期,截至2016年,虽稳定服务了图片压缩、视频转码,但资源静态不可弹性调度,利用率低。2016年被AI引爆,大数据计算更是指数级增长,虚拟机的静态资源策略已不适用,需要一个弹性可调度平台盘活部门整体和公司闲置资源的计算力,TCS-弹性计算平台应运而生。

整体设计

弹性平台对外提供名字化服务供用户接入,并在服务中集成了负载均衡、容灾逻辑,用户无需自主设计架构,即可享受到集群化服务。针对某些已有管理系统的业务,平台也提供了资源租赁策略,用户无需改动,便可快速接入。 平台借助docker技术,并解决了负载的监控调度、资源的弹性伸缩和分布式镜像管理等方面的问题。

3.1.监控调度:秒级反馈,预先调度

1)CPU监控:打造自主的CPI(Cycles PerInstruction)监控指标,结合定制化内核cpu优先级策略,当高优先级的容器cpu指令延时增加,自动调节低优先级容器的cpu-quota值,保障业务服务正常。若低优先级的quota值低于阈值,会触发母机替换,高优先级容器可全占母机。 2)内存:pressure_level预先调度和优先级oom兜底;借助内核pressure_level技术,当pressure_level event触发,依据容器的优先级,调度低优先级容器到其他母机,若出现调度不及时触发oom,则会按照cgroup对oom优先级配置,将低优先级的容器快速回收,释放内存;然后低优先级容器会被调度到其他容器,继续服务。 3)IO监控:引入tlinux 内核的buffer-io限速方案,对每个上架的容器配置带宽限制,xfs quota限制配额。

3.2.弹性伸缩:水平伸缩和垂直伸缩

1)水平伸缩:基于业务负载状况,业务低峰期自动缩减容器量,高峰期自动扩容,业务上削峰填谷,资源所见即所得,维持资源高使用率的同时,也缓解了业务突发运维扩容的压力。 2)垂直伸缩:针对有状态的逻辑,每次的水平伸缩都会打乱原路由表,甚至会导致并发写脏数据的问题,平台使用单机资源垂直伸缩方案,在维护原路由信息的前提下,对单机资源做加减容器操作,盘活不可伸缩的母机低峰期的计算资源。

3.3.镜像服务:镜像和配置分离

1)镜像分发:借助部门的cos云存储平台搭建的分布式镜像服务,实现了标准镜像预先分发,资源服务秒级上线。 2)配置隔离:一个镜像,多套配置,配置变更不会变动镜像,尽可能的减少对业务影响

价值依归

4.1.服务场景

平台当前服务多个业务,根据业务场景和计算的实时性划分了3种类型,每种类型都有相应的模型,作为监控调度、资源抢占的服务基础。

弹性平台优先保证在线服务型和在线计算型业务,尤其在节假日高峰期,平台会自动腾挪离线类型业务资源服务用户请求;针对离线计算业务,平台采用核时量化,实时水平和垂直伸缩业务计算力,资源上互补在线型业务。

4.2.CPU提升

基于弹性伸缩的功能,平台维持资源使用率稳定的前提下,资源量可随着请求变化波动,摒弃了资源量恒定状态中,资源使用率随请求波峰波谷波动的使用方式;后者的资源量因业务峰值而定,使用率较前者低许多。当前平台整体cpu均值使用率(全天24小时求平均)36%,相比去年提升显著。

展望

TCS-弹性计算平台2017年底将全面服务AI计算、游戏类场景模拟等新兴的计算需求,资源调度可定制化,持续提升cpu使用率,并且以弹性平台为基础,搭建TCS-云函数计算平台、FPGA函数计算,在云计算领域继续挖矿耕耘。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

SqlTransaction事务使用示例

using System; using System.Data; using System.Data.SqlClient; using System.Co...

1988
来自专栏跟着阿笨一起玩NET

GB2312转换成UTF-8与utf_8转换成GB2312

2331
来自专栏飞扬的花生

日志帮助类

 1.代码 using System; using System.Collections.Generic; using System.Linq; using S...

2039
来自专栏c#开发者

解决msmq接收远程主机私有队列消息的问题!

通过调用windows\system32\mqoa.dll 这个Message Queuing ActiveX Interface API函数就可以做到; 下面...

5357
来自专栏菩提树下的杨过

MSDN官方的ASP.Net异步页面的经典示例代码

示例1.演示异步获取一个网址的内容,处理后显示在OutPut这一Label上 using System; using System.Web; using S...

2135
来自专栏听雨堂

想修改CSS

      下载了一个“通用”的CSS文件,本来想偷懒的,结果发现有问题,就是它用的颜色是变量定义的,无法识别。我又找不到在哪里可以定义。 BODY{     ...

22210
来自专栏码匠的流水账

聊聊spring cloud的AbstractLoadBalancingClient

本文主要研究一下spring cloud的AbstractLoadBalancingClient

1102
来自专栏成长道路

JDBC动态SQL语句连接orcale数据库的工具类

import java.sql.Connection; import java.sql.DriverManager; import java.sql.P...

2700
来自专栏xingoo, 一个梦想做发明家的程序员

windows程序设计-第四章 system1.c

/*---------------------------------------------------- SYSMETS1.C -- System M...

26810
来自专栏谈补锅

记录C#常用的代码片段

using Newtonsoft.Json; using Newtonsoft.Json.Linq;

1202

扫码关注云+社区