实战案例——作业帮 | 学习笔记

简介: 快速学习实战案例——作业帮

开发者学堂课程【云原生最佳实践案例实战案例——作业帮学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/1052/detail/15275


实战案例——作业帮


内容介绍:

一、技术现状

二、背景和目标

三、成本模型

四、部署挑战

五、解决路径

六、应用层运行态

七、应用层检索

八、容器技术 GPU  共享

九、容器技术 在离线混部

十、容器技术 弹性扩缩

十一、展望

作业帮成立于2015年,以科技为手段致力于教育的公司,主要业务分为两大板块,第一是作业帮APP是一款面相于K12的学习辅助工具平台,是一款典型的流量互联网产品,另一块是作业帮直播课,是一款典型的产业互联网产品,含盖了教育的诸多链条,如教学教研教务辅导等等。


一、技术现状

2015年作业帮主要技术现状分为两点,一点是规模化,另一点是复杂化。规模化是指作业帮线上有数千个应用服务,这么多的服务对应了数万的服务实例,而这些服务实例是跑在数十万计算核心之上。复杂化是作业帮整体技术站,比较多元,更多的模块是Java,C++等进行编写的。作业帮从创业之初就是在云之上,充分享受了云计算的红利,也由于一些原因,建成了一个多元应用架构,高可用,性能快速迭代也是我们的一贯追求。


二、背景和目标

降本增效需要做的更好,有几点原因,第一点是随着互联网红利的消退,企业希望每一分钱利益最大化,另一点是虽然一直在强调降本增效,肯定还是有一些不必要的支出存在,应该被节省。最后一点是作为一个技术人员的追求,希望写出更优质更高性能的代码,在降本增效的过程中需要注意一点,降本不能降质,降低成本同时稳定性、效率、安全均不能打折扣。


三、成本模型

各种各样产品的特性功能映射到计算机的世界后,是一个个的代码模块,它想要work需要各种各样的资源。降本增效应该如何做,在应用模块中,降本增效是主要提升单位承载量,但面临的一个挑战是作业帮技术站太多元了,如何去进行整体提升。在资源模块中,像存储网络这些资源,不是使用比较刚性,就是没有多少利益可以控制。降本的重点在于计算的资源,也就是在提升单位成本算例。一些相关的挑战是如何选择更优的机型,以及选择后如何让业务更加快速平滑过渡。在应用和计算资源中间,还有一块巨大的可提升空间是两者间的匹配。


四、部署挑战

第一个挑战是在线业务资源负载低,要为核心业务留下资源,会有一定的空闲,对于一些低负载业务,往往会产生碎片化。线上的负载率被拉低了。一方面是在线业务负载低,另一方面是大数据离线计算要贴地运行,会有空间不均,还有时间不均。互联网业务会有明显的波峰波谷现象,在线教育会更明显,波峰波谷会差两个数量级。而我们在为波峰进行买单。


五、解决路径

作业帮在应用层面,提升了一个主流技术站的运行性能,对于使用资源最多的检索服务,进行了架构重构,以此来提升性能和效率。在部署层面,通过GPU调度、ECS、在离线混部解决一系列空间时间不均。在机型层面,实现了应用对资源的透明模板,在替换机型的时候变得更加快捷。


六、应用层运行态

对主流技术站进行优化,主要有进行重新的编译,以fastCGI进行运行,对它进行了非线程安全编译以提升效率。另一块是在服务的注册发现,摒弃了传统的名字服务,整体切换到云原生服务,以此大幅度提升性能,为了进一步提升性能和成功率,还做了一层localDNS,在内核层面使用更新的,也和阿里云内核团队进行了相关的优化。来解决性能和成功率问题。最后就是得益于Terway 的容器网络+网络连接持久化,进一步对性能更明显的提升,完成后,框架会有几倍的性能提升。将它提高到业务里面,降本带来43%的收益。


七、应用层检索

检索层作为底层的服务,对其性能要求比较高,在传统架构里,一般是计算和存储里融合在一起,随着文件数量越来越多,单机无法容纳,需要对它进行数据切片,每个切片为了保证高性能,需要多个副本,如此形成了二维的矩阵,在这种情况下,存在的诸多问题,首先要做计算和存储的分离,引入了Fluid做一个关键纽带,它是基于K8S数据编排的系统,解决原生过程中一系列问题。JindoRuntime是用于实现缓存的加速,当我们使用Fluid和JindoRuntime完成整个检索系统重构之后,获得的收益也比较明显,首先数据的更新周期,从小时级别缩短到三分钟之内。运维的提交速度从天级别缩短到小时级别。程序性能也得到了大幅度提升,提升比例由30%带来了万核级别缩减。


八、容器技术GPU共享

作业帮线上有大量的AI推理业务,不论是图像识别或者是云识别和合成。但是之前的计算GPU服务长时间脱离统一运维体系,希望通过改造将其纳管到运维体系中。但是在调研主流的业务方案,或多或少都会对GPU性能损耗,最后选择了阿里云开源方案,实现了一套GPU share的调度方案。我们的GPU服务是用的算例相对比较固定,以此实现了一套资源服务匹配机制,例如经典的背包问题,当完成整体一套后,线上的GPU的资源使用率得到了大幅度提升。


九、容器技术 在离线混部

在离线混部一直是工程领域比较经典的问题,一方面是在线集群在波谷的时候有大量空闲资源,另外大数据的离线计算需要海量资源,离线计算对数据的实例要求不高,在小时左右内出数是可以接受的,两者间的结合会有一个双赢的结果。但之前很大的技术瓶颈在于,混在一起,离线计算会大量消耗CPU和网络资源。会使得一些混部的资源成功率,会有大幅度的下降。使用阿里云改造后的CFS来实现了CPU的避让,实现了在线服务和离线计算的平稳混部,截止目前,已经有一个万核级别的离线计算跑在在线集群上。同时为了更进一步维持稳定,在晚高峰时,会做一些实时调度,将计算份额进行缩减。我们得到了一个兼顾稳定性和成本的方案。


十、容器技术 弹性扩缩

作业帮的整体CPU资源会有三个池子,一个是大量的CPU机器,另一块也把机器CPU部分利用起来。第三块是通过数目的加减实现弹性策略,会有一些人工干预策略,也会有一些定时的HPA策略,留下一些AI模块,只有在固定的课程时,才会用到,只需要提前将课表进行导入,在上课前将相关服务启动,为了让线上服务应对一定的突增流量,我们为相关的服务增加了AutoHPA策略。


十一、展望

虽然现在已经将定时任务以及部分的AI计算已经迁到ECS之上,但是我们认为在线服务,部分也可以做到迁到ECS之上,来实现一个真正的在线业务学峰,另一方面是探索更具性价比资源,我们之前也一直在尝试探索,在Redis领域开始使用跟阿里云一些方案的结合,在新的一年希望达到更大规模的落地,在降本增效这一方面还有很大的一块工作量在运营方面,整体的成本运营通过之前的自动化平台化,未来会向AI化更进一步。

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
11月前
|
人工智能
基于qwen2和qwenvl的自动批改作业应用!
针对作业批改中常见的问题,如低质量作业、大量简单作业耗时、需初筛异常作业等,开发了一款自动批改作业的应用。该应用通过备份作业文件、获取文档内容、利用AI生成评语,并保存关键信息与日志,简化了教师的工作流程,提高了效率。应用设计简洁,易于扩展,支持图片转文字处理,适合教育场景使用。
2760 1
基于qwen2和qwenvl的自动批改作业应用!
|
Python
Python网络编程基础(Socket编程) 使用try-except处理网络错误
【4月更文挑战第11天】在网络编程中,错误处理和异常管理是非常重要的部分。网络操作经常因为各种原因而失败,比如网络断开、服务器无响应、地址不正确等。因此,学会如何使用Python的异常处理机制来捕获和处理这些错误,是编写健壮的网络应用的关键。
|
数据安全/隐私保护
App逆向百例|05|某视频App参数分析
App逆向百例|05|某视频App参数分析
479 0
|
3月前
|
JSON 运维 网络协议
做短信接口时,http接口和cmpp接口怎么选?
本文介绍了短信接口中HTTP与CMPP协议的区别及适用场景,帮助开发者根据业务需求选择合适的接口类型。
362 1
|
11月前
|
移动开发 JavaScript 前端开发
html table+css实现可编辑表格的示例代码
html table+css实现可编辑表格的示例代码
328 12
|
11月前
|
Java API
如何在 Java 中动态地添加字符编码支持
本文介绍了在Java中动态添加字符编码支持的方法,通过使用 Charset 和 CharsetProvider 类,可以扩展 Java 的字符编码能力,实现对更多字符集的支持。
232 6
|
数据采集 JavaScript 搜索推荐
我们一起聊聊如何对Vue项目进行搜索引擎优化
【9月更文挑战第4天】Vue 项目的搜索引擎优化(SEO)较为复杂,因其内容默认由 JavaScript 渲染,部分搜索引擎难以索引。为提升 SEO 效果,可采用服务器端渲染(SSR)或预渲染,使用 Nuxt.js 或 Vue Server Renderer 实现 SSR,或利用 Prerender SPA Plugin 预渲染静态 HTML。此外,动态管理 Meta 标签、优化静态内容与 Sitemap、懒加载、图片优化、提升页面速度、设置正确的路由模式、使用结构化数据及构建良好外链均有益于 SEO。
478 11
|
JavaScript 前端开发 安全
JS 混淆解析:JS 压缩混淆原理、OB 混淆特性、OB 混淆JS、混淆突破实战
JS 混淆解析:JS 压缩混淆原理、OB 混淆特性、OB 混淆JS、混淆突破实战
1037 2
|
网络协议 安全 网络虚拟化
超融合网关技术
超融合网关技术
|
JSON Linux API
币安(binance)API接口
原文链接 币安API Rest-API 2018-01-04 基本信息 URL: https://api.binance.com JSON协议 数据默认按ASC(升序)排序,时间早的在上面 所有和时间有关的单位都是毫秒 HTTP 4XX : 请...
11268 1