YY直播容器云调度优化及实践:从智能推荐到弹性调度

news/2025/2/24 15:15:09/文章来源:https://www.cnblogs.com/weifegn/p/18734122

Kubernetes作为容器编排领域的领导者,其默认调度器在处理小规模集群时表现出色。然而,随着业务量的增长和种类的多样化,默认调度策略的局限性逐渐显现。YY直播,作为一家大型直播平台,面临着类似的挑战。为了应对这些挑战,YY直播开发了一套容器云调度优化方案,本文将详细介绍这一方案。

YY直播容器云介绍: YY直播拥有自研的容器云管理平台,管理着分布在不同机房的10+自建集群。这些集群包含2000+节点和6w+Pod。为了实现Pod IP的三层互通和支持固定内外网IP,YY直播开发了自研CNI插件。此外,YY直播还采用了Victoria Metrics进行监控,以及阿里Logtail + Loki存储业务日志。

服务资源智能推荐: 为了解决业务方不清楚应该申请多少资源的问题,YY直播采用了VPA的滑动窗口算法。该算法通过监控数据,获取Workload过去一周的CPU和Memory历史用量,并根据这些数据推荐资源。算法考虑了数据的时效性,较新的数据采样点拥有更高的权重。CPU推荐值基于用户设置的目标百分位值计算,而Memory推荐值基于历史数据的最大值。

基于实际负载调度: Kubernetes的原生调度器在处理大规模集群时可能不够灵活。为了增强调度器的可扩展性,YY直播采用了调度框架,并在其中设置了多个扩展点。通过这些扩展点,YY直播实现了基于实际负载的调度。调度过程包括预选策略和优选策略,这些策略通过Prometheus获取的监控数据来筛选和打分节点。

运行中二次调度: 为了应对业务突发导致单节点负载过高的情况,YY直播实现了运行中二次调度。这一功能通过Deschedulse实现,它基于实际负载进行二次调度,驱逐指定的实例。Deschedulse的操作流程包括定时获取节点实际负载,判断实例启动时间,通过Annotations标识哪些实例可被驱逐,以及判断Ready实例数。

弹性调度: YY直播的弹性调度依赖于Virturl Kubelet和Open Kruise。Virturl Kubelet实现了秒级弹性扩容,而Open Kruise则提供了WorkloadSpread功能,将Workload的Pod按一定规则分布到不同类型的Node节点上,实现多区域部署和弹性部署。此外,YY直播还优先部署到自建机房,资源不足时部署到VK,以优化计算资源成本。

效果展示: 通过实施上述调度优化策略,YY直播在容器云平台上取得了显著的效果。优化后的资源使用率得到了提升,低空载率降低,集群调度更加均衡,有效避免了业务突发导致的服务中断。

结论: 容器云调度优化对于应对大规模、多样化业务的挑战至关重要。YY直播通过实施服务资源智能推荐、基于实际负载调度、运行中二次调度和弹性调度等策略,成功提升了容器云平台的效率和稳定性。随着技术的不断进步,未来容器云调度将面临更多的挑战和机遇。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/889040.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink 实战之维表关联

生产应用中,经常遇到将实时 **流式数据** 与 **维表数据** 进行关联的场景。常见的维表关联方式有多种,本文对以下 3 种进行了实现,并对每种方法的优缺点进行了比较:1. 预加载维表 2. 异步 IO 3. 广播维表下面分别使用不同方式来完成维表 join 的实验,附源码和实时动效。F…

Sa2VA环境搭建推理测试

引子 Sa2VA模型通过结合SAM-2和LLaVA,将文本、图像和视频统一到共享的LLM标记空间中,能够在少量指令微调下执行多种任务,如图像/视频对话、指称分割和字幕生成。该模型在视频编辑和内容创作中展现出强大的性能,在相关基准任务中达到了SOTA水平。OK,那就让我们开始吧。一、…

20-bluecms代码审计、thinkphp相关知识cve和cnvd编号申请

1、对bluecms进行代码审计,分析复现文件上传、ssti模板注入、文件删除等漏洞 文件上传审计admin/tpl_manage.php 文件发现,在do_edit模块有三个参数(act = do_edit、tpl_name = 写入文件名称、tpl_content = 写入内容,且代码中未对文件名过滤,导致可以上传任意文件。查看对…

ios SDK AB 开关切换

在数据库的这个服务器 然后再ctest1数据库新建编辑器然后查询select* fromapp_config ac whereaccess_no = 12100186 //这个是应用IDand module = abSwitchand param_name = export_otel_ab查到后,把param_value改为B,或者A,然后回车,然后点击图中的保存 保存后等两分钟,…

CS Course Learning

【李宏毅】2024大语言模型课程 课程学习课程链接:https://speech.ee.ntu.edu.tw/~hylee/genai/2024-spring.php Bilibili相关视频链接:https://www.bilibili.com/video/BV1XS411w7qrGPT: Autoregressive model In-context LearningChain of Thoughts (CoT) Tree of Thoughts …

跟着狂神学markdown作业01天

markdown学习 标题 一共可以做六级标题 格式为#+空格+标题 几级标题就打几个空格 字体 粗体:hello,world 两边各加两个*号 斜体:hello,world 两边各加一个*号 粗体+斜体:hello,world 两边各加三个***号 删除效果:hello,world 引用选择狂神说java,走向人生巅峰(用>…

java知识面试day4

1.常见的关键字有哪些static:静态变量,静态变量被所有对象共享,在内存中只有一个副本。具有静态变量,静态方法块,静态代码块(在类加载时候被指执行一次),静态内部类:非静态内部类需要依赖外部实列,但静态内部类不需要。final 基本数据类型用final修饰不能修改,引用对象被…

[QOJ 8366] 火车旅行

毒瘤边化点,有人说非排列只需要加一些细节,但是这个题毒瘤在于非排列。 statement 给定一个长度为 \(n\) 的序列 \(a_i\)。 对于位置 \(x\) 和 \(y\):若 \(y < x\) 且 \(max_{y < i < x} a_i < min(a_x, a_y)\) 则位于 \(x\) 的棋子可以花费 \(L_x\) 的代价跳到…

uipath更新到最新版本2025.0.161出现严重问题

uipath更新到最新版本2025.0.161出现严重问题:1. 打开既有项目,会报CS0246错误2. 无法创建新项目,一直报无权限访问尝试办法:1. 重新安装uipath,未解决2. 删除项目重新添加,未解决3. 给账户添加最高权限,未解决 workaround:把项目从默认文件夹复制到其他盘(除了C盘外…

Python正则表达式之re.compile函数

​在Python编程语言中,re.compile函数是正则表达式模块(re)中的一个核心组件,它负责将文本形式的正则表达式编译成一个正则表达式对象。这个对象随后可以被用来执行高效的模式匹配操作,如查找、替换或者分割字符串等。理解并有效利用 re.compile对于编写高效且可维护的正则表…

Unity Addresable打包总结第二弹

前言 前文介绍了Addressables在本地打包是怎么使用,这里介绍下怎么打远程包,并且怎么做到打增量包,Lets Go! 远程包新建一个Group,将它的 BUild & Load Paths 改为Remote,并将RemoteRes资源文件夹塞入Remote Group,其中包含一个Capsule.prefab资源:在Addressabvles …

BUUCTF-RE-[2019红帽杯]easyRE

这道题很难,但是并不难在他的解题要用到的方法和技巧上,而是难在它的题目设计。做的过程中真的有一种闯关的感觉,非常有趣 首先我们通过对字符的定位我们可以来到sub_4009C6函数 __int64 sub_4009C6() {__int64 result; // raxint i; // [rsp+Ch] [rbp-114h]__int64 v2; // …