13 | 分布式调度架构之共享状态调度:物质文明、精神文明多手协商抓
该思维导图由 AI 生成,仅供参考
什么是共享状态调度?
- 深入了解
- 翻译
- 解释
- 总结
共享状态调度是一种解决分布式系统全局最优调度问题的调度器架构。相比于单体调度和两层调度,共享状态调度具有更好的可扩展性和全局资源状态信息。该架构通过将单体调度器分解为多个调度器,每个调度器都有全局的资源状态信息,实现最优的任务调度。共享状态调度采用乐观并发调度,通过事后检测来解决资源冲突问题,提高并发度。以Google的Omega为例,该调度架构中的Cell State文件记录着全局共享的集群状态,每个调度器都包含一个私有的Cell State副本,允许多个调度器自由竞争空闲资源。Omega使用事务管理状态的设计思想,将集群中资源的使用和任务的调度类似于基于数据库中的一条条事务一样进行管理。总体来说,共享状态调度架构简化了集中式资源调度模块,提供了更好的并发度和全局最优的任务调度。 共享状态调度的优势在于每个调度器都可以获取集群中的全局资源信息,因此任务匹配算法可以实现全局最优性。然而,由于多个调度器同时调度时可能会产生资源竞争和冲突,因此设计一个好的冲突避免策略是共享状态调度的关键。对于小规模集群来说,其集群规模、任务数量等都不大,使用单体调度就可以满足其任务调度的需求,避免了考虑复杂的冲突避免策略。因此,共享状态调度比较适合大规模、同时存在多种业务类型的场景,不太适合小规模集群。 总的来说,共享状态调度架构在解决分布式系统全局最优调度问题上具有显著优势,但需要注意在实际应用中合理处理资源竞争和冲突的问题。
《分布式技术原理与算法解析》,新⼈⾸单¥59
全部留言(16)
- 最新
- 精选
- 亢(知行合一的路上)单体调度:一个部门经理(调度)给所有下属安排工作; 双层调度:多个项目经理(二层调度)向部门经理(一层调度)申请人力资源; 共享状态:两位部门经理同时给下属安排工作,根据任务优先级解决冲突。
作者回复: 赞,非常有意思,用人力管理来形象介绍单体调度、双层调度和共享状态调度的区别
2020-03-2124 - 上校老师说到omega的缺点,感觉可以用多个Borg管理多个集群,然后不同Borg负责不同的任务类型的执行来解决omega的缺点
作者回复: 多个borg相当于多个集群,如果采用多个集群,又会引入多集群之间的数据一致性、集群可靠性等问题
2020-05-0525 - 南国关于多节点之间的并发冲突问题应该有以下解决方案: 1.应用层做一些调整,使得在每个调度器上的数据申请不同的资源,避免并发问题的最好方法就是不出现并发. 2.乐观的解决方案,多节点一起提交,在资源管理器上收敛于一致状态. 3.分布式锁,这个感觉效率不高,因为每次得到锁得到资源以后还需要一个全局的共识.
作者回复: 1. 避免并发的问题最好的方法就是不出现并发,这个在分布式场景中很难避免的,而且串行的效率一般比较低; 2. 你说的这种情况,其实就是由一个中心资源管理器来解决或协调冲突; 3. 每个算法都是有优点也有其局限的地方,需要根据自己的场景所关注的点进行取舍。
2020-04-171 - 风华笔墨我觉得解决并发冲突,在本地调度计算出资源分配的过程中,找出资源的最大值和最小值作为一个区间划分。同时还需要各个cell state每隔一定时间进行广播比对,使没有交叉的区间先执行。
作者回复: 解决冲突的策略有很多种,你说的是其中一种策略,根据不同的场景和需求,可以采用不同的策略。
2020-05-20 - Eternal感觉这一节超级棒,老师通过事务的例子来解释共享状态的调度很深刻。 我对老师的问题关于共享状态调度的核心解决并发冲突的思考: 一个job由多个task组成,一个job要么全都执行,要么全都不执行,就像老师说的理解成一个事务; 1.job执行执行的时候如果阻塞等待资源,我们可以将阻塞加上超时时间,超时后还不能获取到资源,当前job主动释放自己已经占有的资源,这可以叫做等待超时时间; 2.如果一个job占有了一些资源,正在执行,我们可以给当前job设置一个超时时间,如果job在超时时间内还没把资源执行完,自己主动释放占有的资源,回滚job的所有task,这可以理解成作业超时时间 3.多个job的多个task在抢资源的时候,我们可以设计一个公平和非公平的抢占队列 4.共享状态下的调度有一个特点是每个调度器都有全局的资源,这个可以这样改进一下:每个调度器的资源分为两部分组成,一部分独占,一部分由共享抢占获取,这样减少并发的程度;这让我想到了操作系统的内存模型,一个核心占用一部分固定内存,然后其它的内存是共享的,也就是可以抢占的2019-10-30110
- leslie关于并发其实数据系统中一直很早就在处理这种问题:从早期单机RMDB->读写分离->一主多从->内存库【虽然市面上各种分类众多,可是个人还是偏向这种说法,各种关系太复杂了】。 谈不上什么特别好的解决方案:就谈谈老师课程中提到的Google对此的做法吧MVCC,其实这确实是一条解决的方式和思路,就像内存库就无法做到ACID特性,只能牺牲部分。目前主流其实就是老师文中所说的先锁或者后验证。 前段时间和本地的同行交流发现其实随着现在系统的越来越复杂:操作系统都开始特性化的时代确实感觉定制化的东西已经越来越多的出现在计算机的各个方面,如何从中获得一个相对中立的方案才是关键吧。2019-10-212
- 波波安解决并发冲突的方法就是加锁,在分布式架构中可以采用分布式锁,具体有前面讲到的三种,基于数据库的,基于redis的,基于zookeeper的分布式锁。2019-10-211
- 第一装甲集群司令克莱斯特老师这课后总结,真是一流的。2021-06-02
- 西门吹牛俩种调度方式,就和单机下通过悲观锁和乐观锁访问共享资源一样,这种思想到处可见,要学习思想才能自己设计。 共享的调度,同样的思想,在计算几上也有类似,比如cpu执行指令,会采用分支预测的方式来尽可能提升cpu的利用率,预测对了,那么就节省了cpu等待条件判断的返回的时间,如果条件判断结果出来,发现错了,那就重来,要知道,cpu是很快的,在大的循环里面,只会在最后一次会预测错误,总的来说利大于弊。2020-08-20
- 亢(知行合一的路上)今天又看了一遍,之前都没理解啊😓 看了之后,还得实践,才能加深理解。 现在还不知道调度器的 Cell State 和 State Storage 中的 Cell State 是怎么保持一致的? 新来的 job,调度器根据本地 State 副本进行 task 和资源的映射,完成后,将结果提交到中心?如果无冲突,则将变更同步到本地;如果冲突,也更新,过会再试。 待继续学习……2020-03-18