嘉宾 | 董晓聪
【资料图】
出品 | CSDN云原生
2022年9月1日,在中国信通院、腾讯云、FinOps产业标准工作组联合发起的《原动力x云原生正发声 降本增效大讲堂》系列直播活动第7讲上,作业帮基础架构负责人董晓聪分享了作业帮的云原生降本增效实践。本文整理自董晓聪的分享。
作业帮的技术现状可以归纳为两点,分别是规模化和复杂化。
规模化:数千个应用服务,对应数万个服务实例,运行在数十万计算核心之上;
复杂化:技术栈极为丰富,涵盖多种主流语言。
作业帮于2020年初开始走一条云原生的道路,来解决发展过程中所遇到的稳定性、成本、效率及安全方面的问题。通过云原生的改造,用基础设施接管业务当中大量的非功能逻辑,以此实现弹性、可观测性、韧性、自动化及可持续性。
为什么要进行降本增效?
随着互联网红利的消退,企业希望能够实现成本效益最大化;
资源浪费现象普遍存在,节省不必要的浪费;
从技术人员的角度来看,期望写出更优质、更高性能的代码。
在降本增效的过程中,我们需要明确一点:降本但不能降质,在降低成本的同时,稳定性、效率、安全等均不能为此打折扣。
在多种限制条件存在的情况下,该如何开展降本增效的工作呢?
应用层首先要做的是提升性能,即提升单位资源能够支撑的业务并发量。对于作业帮来说,多元的技术栈给应用层的效能提升带来了挑战。
资源层降本增效的重点在于计算层面的优化,存在两大挑战:
寻找更优机型,提升单位成本的算力;
拥有合适的机型后,实现业务平滑无感地切换。
资源调度层有着巨大的优化空间,同样也面临诸多挑战:
在线资源负载不高,对于高并发业务,为了应对频繁的流量突增,需保证一定的Buffer,同时低流量业务通常长尾,进一步拉低了在线资源的利用率;
资源空间不足,在线资源利用率一般在30%,而大数据通常100%负载;
资源时间不均,互联网业务资源的使用存在明显的波峰、波谷。
应用技术栈改造
起初,作业帮采用PHP为服务端的主要开发语言,并使用ODP框架,能够有效地支撑新业务的快速构建及发展迭代。但随着业务的发展,以ODP为代表的PHP服务端技术栈遇到了诸多问题:
性能瓶颈,PHP缺乏线程与协程的支持,在单位的并发下,资源使用率、业务成本高;
欠缺微服务支撑,ODP框架下,服务之间可以使用RPC进行调用,也支持混部后进行本地调用,服务之间边界模糊、权责不清等问题开始显现;
云原生适配不足,云原生带来诸多技术红利,如容器化、服务治理、DevOps等,但PHP适配性较低,无法与其结合。
于是我们选择使用Go语言代替PHP作为服务端的主要开发语言。Go语言框架ZGIN基于GIN衍生而来,是面向Web服务的开发框架,提供了开箱即用的常见组件和功能,侧重通用性和稳定性,兼顾性能和时延。