分布式技术原理与算法解析
聂鹏程
智载云帆 CTO,前华为分布式 Lab 资深技术专家
39663 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 43 讲
分布式技术原理与算法解析
15
15
1.0x
00:00/00:00
登录|注册

13 | 分布式调度架构之共享状态调度:物质文明、精神文明多手协商抓

不太适合小规模集群
共享状态调度适合大规模、多种业务类型的场景
解决了Borg的问题,但可能存在资源冲突
共享状态调度:多个调度器共享全局资源信息
两层调度:资源管理和任务调度分为两层
单体调度:中央调度器管理整个集群
乐观锁机制解决资源冲突问题
任务与资源的多对多匹配
事务管理状态的设计思想
乐观并发控制来调解资源冲突问题
每个调度器都有对整个集群资源的访问权限
支持多种任务类型,提供更好的可扩展性
每个调度器都有全局的资源状态信息
将单体调度器分解为多个调度器
第二层调度无法实现全局最优调度
由中央调度器管理,全局状态一致性,但可扩展性差
任务的调度和执行状态
资源的分配和使用状态
如何解决并发冲突问题?
适用场景
Omega系统的优势和缺点
单体调度、两层调度、共享状态调度的区别
Omega共享调度工作原理
Omega调度架构
共享状态调度
两层调度
单体调度
集群中需要管理的对象
思考题
总结
共享状态调度设计
什么是共享状态调度?
共享状态调度

该思维导图由 AI 生成,仅供参考

你好,我是聂鹏程。今天,我来继续带你打卡分布式核心技术。
在上一篇文章中,我们一起学习了两层调度。在两层调度架构中,第二层调度只知道集群中的部分资源,无法进行全局最优调度。那么,是否有办法解决全局最优调度的问题呢?
答案是肯定的,解决办法就是我今天要带你打卡的共享状态调度。
接下来,我们就一起看看共享状态调度到底是什么,以及它的架构和工作原理吧。

什么是共享状态调度?

通过我们前两篇文章的讲述,不难发现,集群中需要管理的对象主要包括两种:
一是,资源的分配和使用状态;
二是,任务的调度和执行状态;
在单体调度中,这两种对象都是由单体调度器管理的,因此可以比较容易地保证全局状态的一致性,但问题是可扩展性较差(支持业务类型受限),且存在单点瓶颈问题。
而在两层调度中,这两种对象分别由第一层中央调度器和第二层 Framework 调度器管理,由于 Framwork 调度器只能看到部分资源,因此不能保证全局状态的一致性,也不容易实现全局最优的调度。
为了解决这些问题,一种新的调度器架构被设计了出来。这种架构基本上沿袭了单体调度器的模式,通过将单体调度器分解为多个调度器,每个调度器都有全局的资源状态信息,从而实现最优的任务调度,提供了更好的可扩展性。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

共享状态调度是一种解决分布式系统全局最优调度问题的调度器架构。相比于单体调度和两层调度,共享状态调度具有更好的可扩展性和全局资源状态信息。该架构通过将单体调度器分解为多个调度器,每个调度器都有全局的资源状态信息,实现最优的任务调度。共享状态调度采用乐观并发调度,通过事后检测来解决资源冲突问题,提高并发度。以Google的Omega为例,该调度架构中的Cell State文件记录着全局共享的集群状态,每个调度器都包含一个私有的Cell State副本,允许多个调度器自由竞争空闲资源。Omega使用事务管理状态的设计思想,将集群中资源的使用和任务的调度类似于基于数据库中的一条条事务一样进行管理。总体来说,共享状态调度架构简化了集中式资源调度模块,提供了更好的并发度和全局最优的任务调度。 共享状态调度的优势在于每个调度器都可以获取集群中的全局资源信息,因此任务匹配算法可以实现全局最优性。然而,由于多个调度器同时调度时可能会产生资源竞争和冲突,因此设计一个好的冲突避免策略是共享状态调度的关键。对于小规模集群来说,其集群规模、任务数量等都不大,使用单体调度就可以满足其任务调度的需求,避免了考虑复杂的冲突避免策略。因此,共享状态调度比较适合大规模、同时存在多种业务类型的场景,不太适合小规模集群。 总的来说,共享状态调度架构在解决分布式系统全局最优调度问题上具有显著优势,但需要注意在实际应用中合理处理资源竞争和冲突的问题。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式技术原理与算法解析》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • 亢(知行合一的路上)
    单体调度:一个部门经理(调度)给所有下属安排工作; 双层调度:多个项目经理(二层调度)向部门经理(一层调度)申请人力资源; 共享状态:两位部门经理同时给下属安排工作,根据任务优先级解决冲突。

    作者回复: 赞,非常有意思,用人力管理来形象介绍单体调度、双层调度和共享状态调度的区别

    2020-03-21
    24
  • 上校
    老师说到omega的缺点,感觉可以用多个Borg管理多个集群,然后不同Borg负责不同的任务类型的执行来解决omega的缺点

    作者回复: 多个borg相当于多个集群,如果采用多个集群,又会引入多集群之间的数据一致性、集群可靠性等问题

    2020-05-05
    2
    5
  • 南国
    关于多节点之间的并发冲突问题应该有以下解决方案: 1.应用层做一些调整,使得在每个调度器上的数据申请不同的资源,避免并发问题的最好方法就是不出现并发. 2.乐观的解决方案,多节点一起提交,在资源管理器上收敛于一致状态. 3.分布式锁,这个感觉效率不高,因为每次得到锁得到资源以后还需要一个全局的共识.

    作者回复: 1. 避免并发的问题最好的方法就是不出现并发,这个在分布式场景中很难避免的,而且串行的效率一般比较低; 2. 你说的这种情况,其实就是由一个中心资源管理器来解决或协调冲突; 3. 每个算法都是有优点也有其局限的地方,需要根据自己的场景所关注的点进行取舍。

    2020-04-17
    1
  • 风华笔墨
    我觉得解决并发冲突,在本地调度计算出资源分配的过程中,找出资源的最大值和最小值作为一个区间划分。同时还需要各个cell state每隔一定时间进行广播比对,使没有交叉的区间先执行。

    作者回复: 解决冲突的策略有很多种,你说的是其中一种策略,根据不同的场景和需求,可以采用不同的策略。

    2020-05-20
  • Eternal
    感觉这一节超级棒,老师通过事务的例子来解释共享状态的调度很深刻。 我对老师的问题关于共享状态调度的核心解决并发冲突的思考: 一个job由多个task组成,一个job要么全都执行,要么全都不执行,就像老师说的理解成一个事务; 1.job执行执行的时候如果阻塞等待资源,我们可以将阻塞加上超时时间,超时后还不能获取到资源,当前job主动释放自己已经占有的资源,这可以叫做等待超时时间; 2.如果一个job占有了一些资源,正在执行,我们可以给当前job设置一个超时时间,如果job在超时时间内还没把资源执行完,自己主动释放占有的资源,回滚job的所有task,这可以理解成作业超时时间 3.多个job的多个task在抢资源的时候,我们可以设计一个公平和非公平的抢占队列 4.共享状态下的调度有一个特点是每个调度器都有全局的资源,这个可以这样改进一下:每个调度器的资源分为两部分组成,一部分独占,一部分由共享抢占获取,这样减少并发的程度;这让我想到了操作系统的内存模型,一个核心占用一部分固定内存,然后其它的内存是共享的,也就是可以抢占的
    2019-10-30
    1
    10
  • leslie
    关于并发其实数据系统中一直很早就在处理这种问题:从早期单机RMDB->读写分离->一主多从->内存库【虽然市面上各种分类众多,可是个人还是偏向这种说法,各种关系太复杂了】。 谈不上什么特别好的解决方案:就谈谈老师课程中提到的Google对此的做法吧MVCC,其实这确实是一条解决的方式和思路,就像内存库就无法做到ACID特性,只能牺牲部分。目前主流其实就是老师文中所说的先锁或者后验证。 前段时间和本地的同行交流发现其实随着现在系统的越来越复杂:操作系统都开始特性化的时代确实感觉定制化的东西已经越来越多的出现在计算机的各个方面,如何从中获得一个相对中立的方案才是关键吧。
    2019-10-21
    2
  • 波波安
    解决并发冲突的方法就是加锁,在分布式架构中可以采用分布式锁,具体有前面讲到的三种,基于数据库的,基于redis的,基于zookeeper的分布式锁。
    2019-10-21
    1
  • 第一装甲集群司令克莱斯特
    老师这课后总结,真是一流的。
    2021-06-02
  • 西门吹牛
    俩种调度方式,就和单机下通过悲观锁和乐观锁访问共享资源一样,这种思想到处可见,要学习思想才能自己设计。 共享的调度,同样的思想,在计算几上也有类似,比如cpu执行指令,会采用分支预测的方式来尽可能提升cpu的利用率,预测对了,那么就节省了cpu等待条件判断的返回的时间,如果条件判断结果出来,发现错了,那就重来,要知道,cpu是很快的,在大的循环里面,只会在最后一次会预测错误,总的来说利大于弊。
    2020-08-20
  • 亢(知行合一的路上)
    今天又看了一遍,之前都没理解啊😓 看了之后,还得实践,才能加深理解。 现在还不知道调度器的 Cell State 和 State Storage 中的 Cell State 是怎么保持一致的? 新来的 job,调度器根据本地 State 副本进行 task 和资源的映射,完成后,将结果提交到中心?如果无冲突,则将变更同步到本地;如果冲突,也更新,过会再试。 待继续学习……
    2020-03-18
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部