草庐IT

《分布式技术原理与算法解析》学习笔记Day10

技术修行者 2023-04-19 原文

调度框架:单体调度

什么是调度?

分布式系统架构的目的是将多个服务器资源管理起来,对外提供服务。调度是指为用户任务寻找合适的服务器的过程,它是分布式系统中一个非常重要的组件,提供了多种调度策略,负责完成具体的调度工作。

什么是单体调度?

分布式系统中的单体调度是指一个集群中只有一个节点在运行调度进程,该节点对集群中的其他节点具有访问权限,可以对其他节点的资源信息、节点状态进行统一管理,同时根据用户下发的任务对资源的需求,在调度器中进行任务和资源匹配,然后根据匹配结果将任务指派给合适的节点。

单体调度器具有全局资源视图和全局任务,可以实现对任务的约束并实施全局性的调度策略。

在单体调度框架中,多个Node节点会将本节点的State上报给Master节点。Master节点将Node State信息记录在Cluster State模块中,Cluster State模块用于管理集群中节点的资源等状态。Master节点中的Scheduling Logic模块用于进行Tasks与节点资源的匹配。当Master需要下发任务时,Cluster State模块会将节点的资源状态传送给Scheduling Logic模块,以便Scheduling Logic模块进行Tasks与资源匹配,并根据匹配结果将Task发送给匹配到的节点。

具体结构和流程如下图。

单体调度的特征:

  1. 单体调度器可以很容易实现对作业的约束并实现全局性的调度策略,因此适合作为批处理任务和吞吐量较大、运行时间较长的任务。
  2. 单体调度系统的状态同步比较容易且稳定。
  3. 调度算法只能全部内置到核心调度器当中,因此调度框架的灵活性和可扩展性不高。
  4. 单体调度存在单点故障发生的可能性。

Borg调度设计

Borg是典型的集中式集群管理系统,Scheduler是它的核心组件。

Borg系统中包括作业(Job)和任务(Task):

  • 作业:它通常包括作业名称、作业生产者和作业包含的任务数量,它可以有一些约束来限制作业中的任务运行在指定的机器上,这些约束可以是刚性的,也可以是柔性的。一个作业只能在一个集群中运行。
  • 任务:一组Linux进程,运行在一台机器上的一个容器内或者直接运行在节点上。

一个作业可以包含多个任务,作业类似于用户在一次事务处理或计算过程中要求计算机所做工作的总和,而任务就是一项具体的工作。

多个任务可以在多台机器上同时运行,从而提高系统的并行程度,调度器会来负责将任务分配给合适的机器。

Borg中的调度是以任务为单位的,不是以作业为单位。

Borg调度算法的核心思想是“筛选可行,评分取优”。它分为两个阶段:

  • 可行性检查:找到一组可以运行任务的机器。
  • 评分:从可行的机器中选择一个合适的机器。

两种不同的匹配算法:

  • 最差匹配算法:将任务尽量分散到不同的机器上,以并行的方式提高任务执行的速度,它的问题在于每个机器都会有少量无法使用的剩余资源,称为”碎片资源“。
  • 最佳匹配算法:把同一个机器上的任务塞得越满越好,这样可以空出一些空闲的机器,用于部署计算资源需求大的任务。它类似于”把所有鸡蛋放到一个篮子里“,当对应的服务器发生故障后,运行在这台服务器上的任务会受影响。它不利于有突发负载的应用。

一般来说,对于资源紧缺,且业务流量比较规律,基本不会出现突发情况的场景,可以选择最佳匹配算法, 如果资源比较丰富,且业务流量会经常出现突发情况的场景,可以选择最差匹配算法。

Borg的任务部署机制支持优先级高的任务抢占优先级低的任务资源,如果评分算法选中的机器上没有足够的资源来运行新任务,Borg会抢占该机器上已部署的低优先级任务的资源,从最低优先级的任务开始,逐级向上抢占任务资源,直到可用资源足够运行新任务。其中,被强占的任务会放回到调度器的等待队列中。

有关《分布式技术原理与算法解析》学习笔记Day10的更多相关文章

  1. ruby - 分布式事务和队列,ruby,erlang,scala - 2

    我有一个涉及多台机器、消息队列和事务的问题。因此,例如用户点击网页,点击将消息发送到另一台机器,该机器将付款添加到用户的帐户。每秒可能有数千次点击。事务的所有方面都应该是容错的。我以前从未遇到过这样的事情,但一些阅读表明这是一个众所周知的问题。所以我的问题。我假设安全的方法是使用两阶段提交,但协议(protocol)是阻塞的,所以我不会获得所需的性能,我是否正确?我通常写Ruby,但似乎Redis之类的数据库和Rescue、RabbitMQ等消息队列系统对我的帮助不大——即使我实现某种两阶段提交,如果Redis崩溃,数据也会丢失,因为它本质上只是内存。所有这些让我开始关注erlang和

  2. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  5. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  6. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  7. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  8. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  9. 由于 libgmp.10.dylib 的问题,Ruby 2.2.0 无法运行 - 2

    我刚刚安装了带有RVM的Ruby2.2.0,并尝试使用它得到了这个:$rvmuse2.2.0--defaultUsing/Users/brandon/.rvm/gems/ruby-2.2.0dyld:Librarynotloaded:/usr/local/lib/libgmp.10.dylibReferencedfrom:/Users/brandon/.rvm/rubies/ruby-2.2.0/bin/rubyReason:Incompatiblelibraryversion:rubyrequiresversion13.0.0orlater,butlibgmp.10.dylibpro

  10. ruby - ri 有空文件 – Ubuntu 11.10, Ruby 1.9 - 2

    我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da

随机推荐