引言
有个朋友和我探讨“大型云平台如何提高资源利用率,以优化资源成本”,我当时很兴奋,这是云行业走向成熟的标志,为了整理思路我还特地写了一个提纲。
后来我采集行业信息去完善和验证这个议题,我发现几大云都在做资源利用率提升,甚至小巨头们的私有云都在优化利用率,最终我写成了这篇文章。
>> 1. 为何做成本优化 <<
无论公有云还是自用云,云平台做成本优化无外乎三大原因:
1. 大批IaaS资源池(不含带宽)的年销售额已经超过5亿人民币,有优化的必要性。
5亿的销售额需要满载8000台服务器,这个规模并不算太高,业内到这个规模的公有云和自用云快超过10家了。这个量级省下的的钱才够给成本优化团队发工资。
2. 云行业走向成熟,决策层意识到做营收不如做利润。
云厂商从toVC变成了toB,越来越理智。云产品线用注册用户数、负利销售额等行为骗不了金主,自然就要去做正事了。
3. 成熟产品线的产研人员,基于内部压力也要做点“创新之外的事情”。
对于营收占比最大的资源型产品,憋出新功能太伤肝,提高SLA要累个半死,执行层不选“增效”,难道想被“减员”吗。
>>2. 什么是资源<<
每种资源都有不同的收费方式,不同的复用超卖策略,不同的技术改进潜力。
电力和机柜空间:固定付费且不易扩容的自然资源,短期靠规模和修空调,长期靠低功耗设备。
运营商网络:峰值付费的半垄断人为限制,IDC和CDN是省钱的行家,但运营商政策永远是有变数的。
CPU:分时复用的硬件资源,对90%的应用是轻松闲置,但10%的应用是超限的压榨。
内存:无法简单复用和虚拟化,而且很难跨机调度,主要解决资源调度和边角料浪费。
硬盘:分布式块存储的延迟分配技术成熟,但超卖管理、平滑扩容等问题始终有风险。
GPU/其他卡:虚拟化or透传,各有利弊。
其他的资源:采购额太小或者太偏,也没有太大优化空间。
>> 3. 资源浪费的表象 <<
资源浪费的原因和现象很多,我把主要的现象列出:
云产品的软件开销过大,比如分布式块存储的巨大硬件开销,比如只有热存储没有冰存储。
资源池过小容易被客户耗尽资源,只能多预留空闲资源。
资源池过大则表面上复用比例会很高,但能腾挪复用的资源都是隔不开的故障点,为了防止出故障,可能根据水桶原则拖累一堆资源。
新资源池未及时售出,这需要技术上支持分批建设,大节点有大项目预约等等。
容灾性资源保留是有必要的,但是过度备份过多监控,容易出现三个和尚都没水吃,所有监控备份同时失效。
潮汐性资源产品的研发推广力度不够,无法利用各种错峰资源。
细粒度资源产品的研发推广力度不够,无法利用各种边角料资源。
过度推广按需付费产品,且对资源预估计算失误,或弹性扩容能力欠佳。
廉价资源引导不够,比如廉价机房推广不够,专线空闲却走运营商网络。
>> 4. 浪费的本质 <<
底层云资源对上层业务的盲目支撑,这是带来资源浪费的本质原因。无论是技术运营还是产品问题,都是在给盲目支撑能力减负
1. 资源浪费是不可避免的,能杜绝资源浪费的手段只有经常性资源不足,但这带来的商誉损失,还不如浪费点资源。
只有超大客户可以接受经常性(廉价)资源不足,但他们也不给云平台留任何利润。对常规云用户来说,超过一周的资源不足客户就跑路了。对于自建云来说,超过两周的内部资源不足就可以外采资源了。
2.云厂商增强资源核对工作强度,让库存和物流减少盲目支撑。
大部分云平台对提高资源利用率的认识,停在这一个层次就能大幅减肥。
很多大公司都有过疏忽和流程而延期交付的情况,数千台服务器像废柴一样闲置数月,简单的盘点和改进流程就能省下上千万; 但也有些资源池效率已经很高,比如成熟的CDN能优化2%的成本也是突破。之前有个笑话PR稿,某大云的几个小兵很粗糙的控制了一下浪费的资源,标题很唬人的节省了几个亿,但内容简单到无聊,其实这个PR稿应该是辞退过去浪费资源的人。
3. 运营层面的过度承诺盲目支撑,同样会带来巨大的成本压力,这是一个硬核协调问题,需要在客户需求、我方成本和商务销售三点之间,划死线的范围,找动态的平衡。
大部分云平台对用户做过度承诺,浅层原因是是无法分解掉客户需求,深层原因是产研运营容易被自家销售体系攻击伤害。
互联网公司在商务问题上是揣着明白装糊涂,但他们有惊人的灵活性,各种错峰、潮汐、业务改造、停止贴钱服务,双方可以平等的去谈。 而政企类公司是尊重大于解释、重视效果忽略过程,他们对于运 营过程根本听不懂也不关心,但必须给足够的尊重,给保质保量的验收的结果。4. 从节省资源角度做产品和技术设计,该工作的难点是需求和代价模糊。
产品经理可以照抄友商的功能性需求,但怎么照抄友商的优化成本策略哪? 研发有能力实现任何需求,但每个需求都会有新的代价; 研发要怎么想、怎么说、跟谁说,实现降成本需求付出多大代价?>> 5. 执行的方向 <<
分析完问题的现象和本质,大致的执行方向就呼之欲出了。
5.1 首抓成本责任人
资源要做好精细化运营,第一步让所有被闲置的资源,都有焦躁的背负成本的人。
这一块工作CDN最熟练,他们把资源从每周巡检改为每日盘点,让各责任人切实背负成本和分享收益。但CDN是PaaS云,PaaS云的业务可描述和灵活度很高,他们的优化经验并不能直接移植到IaaS云。 当企业里有偶发的资源不足的抱怨时,但背锅方理直气壮的拒绝扩容时,这一步就完成了。5.2 再做产品减负
产品减负,是让产品经理承担起需求和竞品的分析责任,给产品定更有限也更清晰的功能和性能指标;同时公司要压制住低端销售的甩锅行为,客户沾不到便宜自然就会讲道理。
这一段不能举例,太容易对号入座。 如前文所说,谁都可以抄友商的功能和指标,谁都能靠无限承诺倒贴钱去讨好客户,但公司为什么要请产品和销售给自己赔钱哪? 国内云计算行业的无限承诺和烧钱拿单,是腐蚀从业人员素质的根本性原因——在这种游戏规则下,好产品好销售和烂销售烂产品根本看不出来区别。“夫鸡鸣狗盗之出其门,此士之所以不至也。”给产品做减负,是让国内云计算企业锻炼团队的好机会,我们有了精兵强将才能走出国门,我们要和AWS/Azure掰腕子。
5.3 资源复用的突破
一个成本优化负责人,必须理解各种资源的复用特性,读懂实际的资源占用图,还要做出跨产品线的决议,才能制定有可行性的资源复用方案。
做IaaS资源池优化,我们可以限制套餐类型和调整套餐成本,把空置和边角料成本切实算进去,我们还可以变更SLA和产品覆盖区域,重度参与节点新增和裁撤决议等等。
通过潮汐错峰类产品理论上可以提高复用比例,其产品本身设计并不难,主要槽点在市场层面,比如某产品只能卖几个大客户,那大客户就会无限度压价。
再有就是定义一些PaaS型计算产品和各种学生和开发者专用的小粒度资源。这些资源可以很好的填充大资源浪费的空隙,云厂商和大企业做公益,可以近乎免费供给给小开发者,将开发者补贴算做市场营销投入。
此外还有很多细分领域内完成资源复用的案例,但不具备普遍意义,只能单案单谈:比如GPU兼职跑渲染,比如上行带宽闲职就搭售给家用摄像头等等。对这类案例,我的建议就是抓大放小。
5.4. 最后才做技术攻坚
技术攻坚重度依赖技术专家的实力,目标和工期比较难评估,所以我们不要把技术攻坚当做首要工作。 我们越过前几条简单工作直接搞复杂的技术攻坚,只是给管理层放烟幕弹,让工作失去焦点。 技术攻坚大致有如下几点内容:运营数据的统计和监控工作,心明才能眼亮,统计现有的信息才能制定明天的目标。
通过过革新架构和代码来降低软件性能损耗,比如各种虚拟化性能损耗。提高服务健壮性,减少备份容错所消耗的资源,比如降低群集自修复时的资源挤占,比如分批建设资源池需要云服务支持无缝扩容
革新新用户框架,让用户适应使用细粒度资源,比如K8S对docker用户的改造
革新硬件,比如替换高功耗设备,比如自研服务器,比如用FPGA替代GPU。
>> 6. 授权和信任 <<
各公司的权利构成并不相同,成本优化的责任人可能是独立团队,也可能是分散给各个产品经理,但研发、运维、财务等部门,都是要加入和配合成本优化工作。
成本优化团队是个扛雷的黑脸团队,管理层要对成本优化工作保持信任:
我们5年前推广云主机,客户有任何故障都会怀疑是云主机有问题,但云主机坚持下来了。成本优化期间,各种平台故障和销售丢单,内部肯定有人会甩锅到成本优化头上。但这是成本优化的用力过猛,还是暴露出来其他部门的固有问题,需要管理层来中立评估。
负责成本优化的责任人,他们的直属领导的管理压力会很大。
成本优化是要降低过度的用户体验和减少内部操作便利的,如果没人投诉成本负责人,那说明他们的工作不够果断;但如果对所有投诉都置之不理,那成本优化部门会变成一个新的官僚部门,这些员工会打着高尚的大旗偷懒,完全可以不做任何事。
这是难做又有用途的事情,
是值得我们努力的方向。