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