12月19日-20日,由腾讯主办的2020 Techo Park开发者大会在京举行,全球200余位顶级技术专家以及数千位参会者在大会现场就云计算、大数据和人工智能等前沿技术话题展开深度交流。

作业帮基础架构部架构方向负责人吕亚霖受邀出席本次大会的“企业IT架构云原生的必经之路”容器分论坛,并在现场发表《作业帮容器化探索和落地实践》主题演讲,分享作业帮容器化背景、目标、落地、收益及未来规划,深入剖析容器在教育行业落地所面临的问题、挑战以及相应的高效解决方案。

云原生技术架构是有效手段,K8S及其生态是重要抓手

随着云原生技术的成熟和普及,金融、教育、游戏等各个领域越来越多的企业IT架构正在向云原生架构转型。在此背景下,作业帮在技术和实践中所取得的一系列进展与成绩,成为教育领域企业云原生上云转型的一大代表,为行业提供了可供借鉴的成功案例。

吕亚霖在演讲中首先分享了作业帮技术体系现状,他表示,作业帮自2015年成立至今,一直保持高速增长,尤其是在今年更是实现了规模的成倍增长,发展到现在已拥有数千个业务应用、数万个应用实例、数十万计算核数,未来一段时间内将会依然保持增长势头。

而在规模化加速发展的同时,作业帮的复杂度也在急剧增加。吕亚霖表示,作业帮已从最开始的拍照搜题工具类型应用,演化成教研、工具一体并覆盖整个教学领域,涵盖了从低幼、K12到成人教育的全阶段,技术栈则由PHP、C++演化成涵盖了现在所有主流语言的多语言栈,由此也面临着高可用、极致性能、高并发的一系列问题,在可用性和性能的要求上比大部分互联网业务要求更加苛刻。

在业务的极速扩张下,控制其架构复杂度同时保证业务服务稳定性、成本以及效率成为作业帮容器化的核心问题。对此,吕亚霖指出,用云原生技术架构,基础设施接管业务中大量非功能逻辑,实现弹性、可观测、韧性、自动化、可持续等特性是有效手段,K8S以及其生态是重要抓手。

吕亚霖进一步阐述了作业帮容器化层级和其背后的技术思考,“在虚拟机时代,应用直接运行在资源上,所以底层资源的变更对上层应用是有感知的,应用通过服务治理手段来保证业务的高可用、性能和可扩展性,但是建立和运维这种体系的成本高昂。而在容器化体系下的云原生架构,K8S通过对下游资源的抽象,来抹平资源差异和变更,由此资源对上层服务透明,上层服务不关系底层资源的细节和变化。同时,对上层应用做服务化,用应用框架落地规范和标准,降低接入成本。”

图片1.jpg 

CPU高峰调度应根据未来使用量,日志检索针对元数据

吕亚霖强调,在容器化落地进程中,首先明确业务服务构建容器的原则是很重要的,一是避免陷入重大问题缺陷,二是有利于容器生态的快速接入。

“容器化落地的内核主要是集中在IPVS和Cgroups,内核上我们遇到了很经典的ipvs reuse mode问题,也有在高并发下网络毛刺的问题,我们通过腾讯tlinux内核团队协作解决了这些问题。”吕亚霖在大会现场分享了容器化落地的内核以及原生K8S优化等内容。

“K8S默认调度器有很多不足,比如高峰调度不均衡问题,我们先后做过均衡调度,真实调度,优化后发现在业务deployment时,其实是均衡的,但是到了高峰时段,又变得不均衡,因为大部分业务场景下CPU高峰增量不是线性的,所以我们的建议是做高峰预测调度,不要根据现在的使用量来调度,而是要根据未来的使用量。”

接下来,吕亚霖进一步从容器化落地服务发现注册的控制面和数据面进行了详细说明,他表示,在容器化过渡期间,虚拟机和容器会并行很长一段时间,所以需要解决老的虚拟机和容器化互通的问题,从控制面上来看,通过一个控制组件,来监听虚拟机的名字服务,将服务注册到K8S集群的service里,监听其变更,将变更同步到容器。而在数据面,容器通过service直接访问虚拟机,service来做负载均衡,虚拟机访问容器化,则通过一个东西向的ingress服务,访问容器内的服务单元。

此外,Service Mesh对于像作业帮等使用多语言的公司来说优势非常明显。吕亚霖指出,其优势一是低入侵,业务几乎无感,二是多语言支持,三是与服务感知的结合较好。

资源弹性调度+在离线混合部署,部分业务成本下降43%

作为资源弹性调度的重要参考背景,作业帮容器化落地过程中的时间周期特性十分明显,高峰时段是平峰时段的20倍,是低峰时段的上百倍,同时流量上升曲线较陡,凌晨到5点前流量较少。此外,遇到寒暑高峰或者期中、期末考试,也会有很大的资源使用量。

基于这一特性,吕亚霖和团队主要通过两种HPA来扩缩POD,一个是定时HPA,较为适合时间点明确的业务,另一个是autoHPA,用来应急扩缩,防止服务出现容量问题。同时,底层资源层面则有两个池子,一个是固定池,里面是裸金属服务,长时间使用,另一个是动态池,由一批按需的虚拟机构成,平时处于关机状态,当资源紧张时则会开机加入集群,用来应对非预期的峰值。

除此之外,在离线业务容器化混合部署则成为成本节约优化的一大利器。据吕亚霖介绍,正常在线业务有大量的低负载时段,作业帮把大数据离线和视频音频转解码服务均容器化,统一在K8S调度,部署到在线K8S集群,由此带来的收益是非常大的,而这里面主要的技术则是利用tlinux的cpu隔离策略。

而从异构计算来看,在GPU服务的容器化方面,作业帮的主要策略是gpu-share方案,通过显存和算力进行POD调度,从上游流量入口侧对算力进行隔离,来保证GPU服务稳定性,同时实现资源利用率的最大化。“在我们的场景下,大规模使用GPU几千卡,比较常见的情况是卡故障,这时候就需要做故障转移和资源下线操作。”吕亚霖称。

此外,作为可用性保证的重要环节之一,在多云K8S建设方面,作业帮在多个云厂商部署独立的K8S集群,实现统一K8S的管理调度层,云内流量闭环,数据存储专线同步,源头DNS/HTTPDNS切流。

图片2.jpg 

在多重举措的合力推动下,作业帮容器化的收益显著,同样业务迁移前后,使用了HPA和在离线混合部署后,成本下降43%,稳定性提升到99.995%,接口响应提升10%。由此,有效支持了作业帮业务的快速迭代,秒级急速扩缩容,服务运行态规范落地和统一的运维环境,多云的环境统一,提升服务可用性。这也便于云间相互自由迁徙,实现单云故障的应急预案,通过优化资源碎片,在离线混合部署,自动扩缩容,整体成本进一步下降。

在演讲最后,谈及对于容器化未来的规划展望时,吕亚霖提出四大方向,包括更大规模和全时段的在离线混合部署,K8S与Serverless的结合是未来的趋势,中间件容器化,以及大数据服务容器化。