近日,2021腾讯数字生态大会在武汉召开。在大会云原生专场,腾讯云联合中国信通院、作业帮等联合发布《降本之源·云原生成本管理白皮书》(以下简称白皮书),系统性呈现云原生成本优化方法论和最佳实践路径。作业帮基础架构负责人董晓聪在会上分享作业帮云原生成本优化实践之路。
为什么要降本增效?
作业帮成立于2015年,是一家致力于用科技手段助力教育普惠的公司。董晓聪介绍,作业帮技术现状主要有两大特点,一个特点是规模化,当前作业帮有数千个应用服务,对应着数万的服务实例,这些实例部署在数十万计算核心之上。另一个特点是复杂化,作业帮的技术栈极为丰富,使用最多的语言为PHP和Golang,约能占到60%以上,除此之外还有大量的系统使用NodeJs、Java、C++、lua、python编写等。
董晓聪说,作业帮从创立之初就是构建在云之上的,充分的享受了云计算的红利。随着这些年的高可用建设,实现了多云的架构。高可用、快速迭代、极致性能也是作业帮一贯的技术要求。
为什么要进行降本增效呢?董晓聪说,这个工作之前一直也在做,但今天的要求会更高。首先,随着互联网的红利消退,公司的每分钱都需要产生更大的价值,要实现成本效益的最大化。其次,成本管控,不必用的支出是应该节省的。最后,也是一个技术从业人员的追求,作为程序员,还是想要写出更好更高性能代码。“在追求降本的同时,还要明确一点,降本不降质,稳定性、研发/运维效率、安全等不应该为此打折扣。”董晓聪表示。
业务快速发展平台架构面临挑战
随着业务的发展,作业帮的 IT 系统面临挑战。现有基础平台架构无法满足快速增长的业务需求,业务对快速迭代、急速弹性、调用链追踪、统一的监控日志平台、提升计算资源利用率等需求迫在眉睫。
2019年下半年,作业帮开始规划并调研容器化解决方案,“但面临诸多挑战”。董晓聪说,首先是应用性能有待提升。对于企业主流使用的语言,如PHP、Golang,从框架入手,但应用框架的理论性能和实际业务的性能往往有很大差距,多为业务架构缺陷或者数据存储设计的不合理导致。同时应用框架随着功能的不断迭代和更高的要求,自身性能上也需要优化。
其次,应用部署模式差,带来计算资源的浪费。对于高并发业务,虚机下机器峰值负载常规在10%-20%,极限可提升到30%-40%。高流量业务一般代表着公司核心业务,一方面为了稳定性的考虑,整体水位不能控制得过低。另一方面,为了应对一些突增流量,要预留一定缓冲。低负载业务一般碎片化比较严重,而这些服务比较长尾,进而拉低了整体负载。
同时,还存在时间空间不均的问题。从时间上看,互联网业务普通有明显的波峰波谷,波峰和波谷的实际资源使用量至少有一个数量级差距,且真正的最高峰只有不到一个小时。企业不得不为这一个小时的用量而付出一天的成本。在空间上,一方面是在线集群波谷空闲了大量计算资源,另一方面是大数据离线计算需要大量计算资源。从整个公司视角来看,资源使用极不均衡。
作业帮的云原生降本实践
“面对这么多挑战,我们该怎么解呢?”董晓聪说,针对每一个细分问题深耕并不系统,所以作业帮选择走云原生的道路,和云厂商一起来充分释放云的潜力。
在应用层,作业帮着手对典型场景进行重点攻克。对于模块数量最多的PHP业务进行优化运行态优化,对资源使用最多的检索服务进行架构优化。在部署调度上依托K8S,实现了CPU、GPU、任务的自定义调度器。同时,使用在离线混部解决空间不均的问题,使用弹性扩缩+serverless解决时间不均的问题。而在资源这部分,K8S通过CRI、CSI、CNI等实现了对应用的透明,便于选择更优的机型。
董晓聪说,检索系统是一个复杂的系统,作为最底层且需要高性能的服务,一般是存储和计算耦合。随着数据量越来越大,就需要对数据进行切片,每个节点只存储一部分的数据。由于高并发高可用的要求,单片数据节点还需要有多个副本。由此形成的一个二维矩阵。当需要进行数据更新时,由于数据量比较大,几百TB。
“作为容器改造最难啃的骨头,为了解决这些问题,我们决定进行计算和存储的分离,因为只有引入计算存储分离架构,才能从根本上解决系统复杂度的问题。”董晓聪说,经过多方调研比对,作业帮最终选用Fluid作为整个新架构的关键纽带,并采用JindoRuntime作为缓存加速引擎。
董晓聪表示,PHP框架经过一系列的优化,压测下单核可支撑800QPS,较之前有倍数级别提升。应用在具体线上业务,带来43%的资源使用降低。数据同步周期从小时级别降低到分钟级别,一般在8分钟内就可以完成。运维成本也大幅度降低,交付周期从天级别讲到到小时级别。性能提升了30%,节省了万核级别的资源使用。
对于作业帮的云原生实践,董晓聪表示,现在定时任务、AI类业务都大量的使用serverless,后面希望更大规模的在线业务也可以跑在serverless上,实现业务的真正削峰。未来,作业帮也将探索更多更优的机型,以及在部分特定场景下AMD机型的应用。此外,运营工作经历先靠人再靠运维平台的过程,其中涉及较多的数据分析工作,未来要将其BI化,AI化,实现成本问题的自动发现。
关键词: 调度器 JindoRuntime lua PHP 计算资源