NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

作业帮的云原生历程与实践

  • 2021-08-13
  • 本文字数:2312 字

    阅读完需:约 8 分钟

作业帮的云原生历程与实践

本文源自作业帮基础架构负责人董晓聪的分享。讲述作业帮的云原生历程,并围绕云原生架构和多云架构两大解决方案进行深入延展。

云原生改造重塑技术体系

 

“之前在传统的互联网公司,大家没法接触到用户,对用户的感知更多的是一个个 UV、PV 数字,但在线教育不一样,我们通过直播等形式面对的是一个个学生,每一次稳定性的事故都可能会影响他们的学业,所以作业帮对稳定性的要求只能更高。”据董晓聪介绍,作业帮在稳定性层面,主要面对以下三大挑战:

 

  • 当出现单机、单机群、单云故障的时候,架构能否很好的应对这些冲击?

  • 当代码变更导致业务中断的时候,能不能快速止损?

  • 除了稳定性外,如何控制成本以及提升效率?

 

作业帮选择通过云原生来解决上述问题。用基础设施接管业务当中大量非功能的逻辑,以此来实现弹性、可观测性、韧性、自动化、可持续等一些相关特性,通过云原生的架构解决了部署层面的问题,然后在此之上实现了一套多云间自由迁移的能力。

 

“即使从今天来看作业帮当时做的这个决定,选择云原生架构,也是很有魄力的,因为它毕竟是一个技术体系重塑。”董晓聪表示,截至目前,作业帮已经完成了 70%左右业务的云原生改造,处于业内领先水平。同时作业帮在弹性扩缩、Serverless、在离线混部等方面都有广泛的应用,在 CPU 调度、GPU 调度、多云管控等方面也有创新型专利产出,解决了开源社区的诸多问题。 

 

在 CPU 调度方面,2020 年上半年,作业帮在完成了一块核心业务的容器化之后,突然发现运维成本增加了。原来在虚机模式下,运维在晚高峰的时候,只需要去做一些稳定性的巡检,运维动作并不多。但容器化后,在晚高峰下需要不断地对一些资源负载比较高的进行封锁,然后把上面的一些比较重的 Pod 进行驱逐,经分析Kubernetes的原生调度器还是以 request 进行调度,会存在一些问题。

 

互联网业务都会有一个明显的波峰波谷,在线教育的波峰波谷会更加剧烈,可能会有两个数量级的差异。当研发在波谷的时候进行一次发布,这时候就会触发容器的一次重新调度,比如当服务有几十个 Pod,可能会有十多个 Pod 调度到一台机器,因为这时候的机器的使用率很低,服务怎么调度其实都可以。

 

但是到了晚高峰的时候,每一个 Pod 资源的使用率就上来了,CPU 使用高了,它的吞吐也高了,这十个 Pod 都在同一个机器上,这台机器就会出现一些资源的瓶颈。原生的调度器只考虑了一些简单的指标,同时也没有考虑未来的变化。基于此,作业帮做了自定义的调度器,对晚高峰进行了预测,将 CPU、内存、各种 IO 等指标都作为因子,同时也会定期的把历史数据进行大数据回归更新。

 

GPU 是一个相对比较贵的资源,通过调研一些方案并和云厂商进行沟通,了解到目前主要推荐的方案是 GPU 虚拟化,但是这会至少带来 15%的性能损耗,这个是没法接受的。大多数的 GPU 服务使用的各种资源相对比较固定。鉴于此,作业帮基于算力和显存去进行了一些策略的调度,也就是比较经典的背包问题,同时夜间也会进行一下预测再重新调度,如果中间出现一些故障,也会执行转移相关的策略。

 

当 Web 业务完成容器化改造之后,团队把一些定时任务迁移到容器平台。这时候又出现了新的问题,很多任务会涉及到密集的计算,容器本身其实并不是一个隔离的机制,还是在做 CPU 时间片的分配。这些计算密集的任务多多少少还是会对 Web 任务造成一定的影响。同时它也会占用主机的 IP 资源,node 上的 IP 资源是有限的,定时任务调度上来之后就会分配 IP,任务销毁时 IP 资源也不会立刻销毁。如果频繁地把定时任务的 Pod 调度到主机群的节点上,就会导致主机群的 Web 服务没有足够的 IP 资源。此外,大规模的创建跟回收定时任务,也会触发一些内核的问题,比如有些定时任务的内存使用比较大,大规模回收会导致陷入内核态,hang 住的时间比较长。

 

这方面作业帮做了一些改造:建立了三个池子,Serverless、任务集群、主机群,优先会把定时任务去调度到 Serverless 上,如果调入失败的话,再依次到任务集群、主集群,Serverless 并不是一种完全可靠的计算模式,而是引入了一种资源预占的方式,比较类似于金融领域为保证事务的两阶段提交,预先去申请相关的资源,当完成预占之后,再把真正的把任务调度过去。

多云架构实现秒级别自动切换

 

作业帮解决多云架构主要面临两大挑战。首先在云间互通的专线选型上,作业帮没有选择裸纤的方案,而选择了供应商的组网方案。董晓聪表示,选择组网方案,一方面因为有一层供应商的保护能力,另一方面是组网有一定弹性扩缩的能力。而在此之外,公司自身也做了双链路。每条链路选择不同的供应商,从不同地域进行接入。在这两条链路上,通过BGP+ECMP 实现了链路的负载均衡,以及当单条线路出现故障的时候,可以实现秒级别的自动切换。

 

“多云还会面临着一个很大的挑战,就是计算资源的管理。”董晓聪说,单个云下就有十几种、几十种机型,多云会直接导致 double、trible 的工作量。作业帮对一些场景进行了建模,标准的负载型机器、专门的大内存、大存储机型,然后再结合网络的安全域,制定具体的业务套餐。

 

“完成了上面的网络、计算的问题之后,作业帮构建出自己的多云架构”。董晓聪说,用户通过 DNS/DoH 分流,落到不同的机房。常态下的业务应用之间的请求是单云闭环,不会去跨云通信。当从机房或者专线出现故障的时候,可以通过 DNS/DoH 把流量切到主机房上。当主机房出现故障的时候,还是同样的流量调度,除此之外,还要将从机房的数据存储,DB、Redis 等进行提主,以此来实现了多云的稳定。

 

“完成云原生、多云改造之后,稳定性从之前的 99.95%提升到了 99.99%,机器故障时间的影响也从分钟级别缩短到秒级。部署的质量也得到大幅度提升。”董晓聪透露,接下来,作业帮的发力重点会在实时音视频的云原生改造,推进无边界云计算,促成云边端应用一体协调。

2021-08-13 15:355155

评论 3 条评论

发布
用户头像
 double、trible 的工作量
2021-09-13 10:42
回复
用户头像
测试

d 资源的使用率就上来了,CP

2021-08-24 17:14
回复
用户头像
测试

用户的感知更多的是一

2021-08-24 17:13
回复
没有更多了
发现更多内容

再谈字节小程序

字节跳动终端技术

小程序 字节跳动 火山引擎

解决网卡“Device eth0 does not seem to be present, delaying initialization”

耳东@Erdong

Linux 10月月更

揭秘!探访百度AI反诈第一线

脑极体

从芯片公司到VR,字节跳动为了元宇宙加码布局

海比研究院

👊【Spring技术实战】分析探究RedisTemplate的序列化和反序列化+泛型机制

洛神灬殇

spring 序列化 RedisTemplate 10月月更

在线文字转图片工具

入门小站

工具

Go语言的设计哲学

不负青春不负己🤘

Go 语言 语言设计

ES索引mpping字段数据类型更改过程

李印

elasticsearch 经验分享

中文字节长度引起的数据丢失

看山

Netty 10月月更

从区块链到元宇宙 Metaverse

devpoint

区块链 元宇宙 10月月更

024云原生之软件部署策略

穿过生命散发芬芳

云原生 10月月更

linux之curl使用技巧

入门小站

Linux

Docker Desktop 如何运行第一个 Docker 项目

HoneyMoose

硝烟弥漫的安全战场,只等一位超级英雄登场

白洞计划

声网发布融合CDN直播等系列新品,拓宽RTE产品边界

ToB行业头条

声网

Stream 操作

风翱

stream 10月月更

实作中的 std::is_detected 和 Detection Idioms (C++17)

hedzr

算法 c++17 Detection Idioms

如何呈现一款软件产品的介绍页面

boshi

创业 学习笔记

欢庆1024程序员节,开源茁壮成长

Zilliz

创业 开源 程序员 成长

北鲲云如何为企业提供混合云解决方案

北鲲云

我的新下属都怀念老领导,我该把他们全部开除吗?

石云升

职场经验 10月月更

利用基数排序LSD方法给等长字符串按字典序排序

Regan Yue

算法 10月月更

HarmonyOS Connect伙伴峰会,车载智慧屏S50正式发布

科技汇

Python 编码规范

不负青春不负己🤘

Python Pythonic 编码规范

官方线索|FATE开源社区1024程序员节福利

石云升

1024我在现场 10月月更

[ 职场 ] 发现问题容易

baiyutang

职场 10月月更

Android 音视频 - EGL 源码解析以及 C++ 实现

声网

android 音视频 OpenGL ES

【得物技术】时间切片的实践与应用

得物技术

架构 性能优化 大前端 性能 业务

面试了一个34岁的Java大佬,感觉到他背过很多面试题,年薪50w面试基本都能答得上

Java java面试 java架构

数字化转型请从一个清晰的定义开始 | DBT What

三少爷的见

人工智能 大数据 数字化转型 数字化 数字经济

Leetcode 题目解析:96. 不同的二叉搜索树

程序员架构进阶

算法 LeetCode 10月月更

作业帮的云原生历程与实践_云原生_作业帮直播课_InfoQ精选文章