[黎伟健 焦容 王钢]
移动云盘是重资产业务,消耗大量服务器、存储等资源。随着业务的发展,需要对移动云盘用户节点进行持续扩容。如何科学评估用户节点扩容时所需的服务器数量,使得扩容工作既能满足业务需求,又能最大程度的节约成本,是一个重要的课题。本文建立了移动云盘用户数与服务器数量的数学模型,并据此评估扩容所需服务器数量。
以移动云盘用户节点容量某次扩容的案例为例说明所需资源的评估方法。移动云盘用户节点可支撑3 000 万月活用户,希望扩容至5 000 万月活用户。月活用户指移动云盘的安卓端、IOS 端、PC 端、TV 端等各端的每月活跃总数,当月某用户在多个端多次活跃,按活跃一次计算。用户节点共有用户登录鉴权服务(AAS)、对外服务接口服务(OSE)、定制业务包服务(SAES)、用户管理和套餐管理服务(BMP)、网盘业务接口服务(NDA)、NDMC 等6 个模块,需要评估每个模块各扩容多少台服务器。
凯西·施瓦尔贝[1]说明了帕累托法则的概念,帕累托法则也叫20/80 法则,20%的因素带来80%的影响。实践表明,互联网产品的资源消耗也遵循20/80 法则,也就是说20%的场景消耗80%的性能。互联网产品的场景很多,对每个场景都做详细的资源测算,是一件十分复杂且低效的工作。因此识别出产品的20%关键场景后,就可评估整个系统的容量。
顾炯炯[2]提出了云计算系统的总体性能评价维度,包括I/O 吞吐性能、CPU 利用率等。根据移动云盘的实践,网盘类互联网产品的性能则主要通过接口时延和事务处理能力(TPS)两项指标来度量。接口时延是指一个请求的平均响应时间最长多少是可接受的,事务处理能力是指在接口时延可接受的情况下,系统每秒最大能处理多少事务。网盘类产品的大多数服务器都是CPU 类型,CPU 利用率是主要的资源指标。根据经验值,一般CPU 利用率达到50%左右,即表示到达系统的性能消耗上限,需要扩容。因此,依据接口吞吐量(TPS)和接口时延,在CPU 消耗50%基础下,可以计算资源消耗,从而得到系统容量。
2.2.1 关键接口识别
每个模块都可以用20/80 法则识别出关键接口。以移动云盘用户节点的AAS 模块为例,说明如何识别关键接口。AAS 模块有29 台16C64G 的虚拟机,有11 个接口。某天平均每台服务器最大TPS 取某天每台服务器的最大平均TPS 值,每分钟进行一次采样。如表1 所示。
表1 AAS 所有接口的TPS
根据某天最大TPS 确定前20%的接口,即选取2 个接口。thirdlogin 与querySpecToken 两个接口为关键接口。
2.2.2 现网消耗算力
(1)关键接口性能指标
AAS 模块的thirdlogin 与querySpecToken 两个接口的业务性能指标如表2 所示。
表2 AAS 模块的关键接口性能
最大平均TPS 指某天AAS 接口全部29 台服务器的最大TPS 值,最大平均TPS=表1 的某天平均每台服务器最大TPS*29。移动云盘业务每天上午9 时-11 时为业务量最大的时间段,因此忙时平均时延指移动云盘业务某天这个时间段的接口访问平均时延。
移动云盘用户节点AAS 集群有29 台服务器,现网CPU 平均利用率为29.6%。移动云盘用户节点可支撑3 000万活跃用户,以每台主机CPU 利用率50%为性能上限,计算出整个AAS 集群的目标集群算力,计算过程如下:
①现网TOP20%接口消耗算力
thirdlogin 接口最大平均TPS * 最大平均时延+querySpecToken 接口最大平均TPS * 最大平均时延=522*569+87*32=299 802
② 每台服务器算力值
每台服务器算力值=现网消耗算力/服务器台数=299 802/29=10 338
③现网最大算力
如上所述,CPU 利用率50%表示达到性能极限,现网CPU 平均利用率只有29.6%,因此现网最大算力为:现网最大算力=集群已使用算力*50%/CPU 峰值利用率=299 802*50%/29.6%=506 422
2.2.3 扩容方案
如前所述,移动云盘用户节点从3 000 万月活用户扩容至5 000 万月活用户,需要扩容多少台服务器,可按如下方法计算:
(1)目标集群算力
目标集群算力与目标月活用户数呈线性关系,且系统算力需要保留一定的冗余,冗余系数按90%计算。
目标集群算力=现网消耗算力*(目标活跃用户数/当前活跃用户数)/冗余系数=299 802*(5 000/3 000)/90%=555 189
(2)需要扩容的服务器数量
需要扩容的服务器数量=(目标集群算力-现网最大算力)/单台服务器算力=(555 189-506422)/10 338=4.72≈5(向上取整)
因此月活用户数从当前的3 000 万增加到5 000 万,移动云盘用户节点AAS 部件需要扩容5 台AAS 服务器。
参照AAS 模块的评估方法,可以计算出OSE、BMP、NDA、NDMC、SAES 等其余五个模块的容量从3 000万月活扩容到5 000 万月活所需要的服务器台数。这些模块的TPS、接口时延、CPU 峰值利用率均不相同,但评估方法与AAS 模块相同。用户节点扩容合计需要扩容139台服务器,如表3 所示。
表3 用户节点扩容资源需求
从公开文献看,几乎查不到网盘类互联网产品的容量评估方法,但可以查到一些其他类型的互联网产品容量评估方法,例如滴滴内部某业务根据CPU 利用率与业务流量的关系,预估业务流量增长时需要增加的服务器台数,系统性能衡量指标相对单一。本文提出了网盘类产品的资源评估方法,引入了接口时延、事务处理能力(TPS)、CPU 利用率等复合性能指标进行容量评估,经过了多次实践验证,效果良好。
本文给出了移动云盘的系统容量的评估方法。经过移动云盘用户节点多次扩容检验,通过该评估方法评估出的扩容方案,确实能达到预期容量值,对网盘类业务甚至互联网业务的系统容量评估方法都有较强的借鉴意义。
随着用户行为的变化以及移动云盘技术的发展,系统容量的评估方法需要不断迭代,因此不能一成不变的照搬该评估方法,而是与时俱进的进行优化。