RASE分布式计算系统

RASE分布式计算系统1 引入 ranking and selection engine RASE 是一个特定的分布式计算框架 用于通过 ranking and selection 算法进行的分布式 simulation 计算 通过一个例子简单介绍一下 RASE 的作用 现在有 1000 名乒乓球运动员 我们需要从他们中选出一名实力较强的运动员代表国家去比赛

大家好,我是讯享网,很高兴认识大家。

1.引入

        ranking and selection engine(RASE)是一个特定的分布式计算框架,用于通过ranking and selection算法进行的分布式simulation计算。

        通过一个例子简单介绍一下RASE的作用,现在有1000名乒乓球运动员,我们需要从他们中选出一名实力较强的运动员代表国家去比赛。如何看谁的实力强呢?我们需要进行一些比赛,从比赛结果来看他们的实力情况。最笨的方法就是让他们两两打比赛,最后找出胜场最多的。但是显而易见,这样是很费时费力的,我们可以一边让他们打比赛一边将一些实力相对来说不强的人淘汰,这样在较快的时间内就可以找到最终需要的那个人,并且在淘汰的时候使用概率论中的置信区间理论,使得淘汰的情况是理论上可控制的。这就是ranking and selection的基本思想。

        RASE需要输入一些alternative(如运动员数据),一个simulation的算法(如比赛的算法)和一个PK算法(如淘汰的算法)。在系统运行时,让这些alternative循环进行simulation计算,得到相应的计算数据(如选手得分),在比赛的同时,通过PK算法将那些显然实力比较差的alternative给PK掉,踢出总的alternative列表。这样经过一段时间的运行,可以最终得到一个最优的alternative。

 

2.系统分析

         根据上面的描述,RASE系统需要至少两个线程,一个线程进行simulation的计算,一个线程进行PK的计算,两个线程并发,需要共享alternative的数据,这是一个简单的模型。但是根据实际情况来看,这个系统的使用场景常常需要大量的simulation次数,需要运行的时间用天来度量。这时就需要一些改进,因为simulation和simulation之间是可以同时进行的,就好像乒乓球比赛可以很多场比赛同时进行一样,这样就可以有多个线程同时进行simulation,也就是说simulation这个计算是可以横向扩展的,当然PK的计算也是可以横向扩展的(这个有一定的数学理论支持)。这样原来的两个线程变化成了现在的两种线程,每种都可以进行多线程的横向扩展。我们想利用起我们已有的尽可能多的机器来进行计算,这时就涉及到一个分布式的技术。

 

3.系统描述

         经过多次的设计与修改设计,最后完成了一个较好的分布式解决方案,下面就来描述一下这个系统的结构。


讯享网

         系统由一个Master和多个Agent组成,Master由一台机器担任,其余的所有机器都各自有一个Agent。Master的主要功能是数据中心,向Agent分发alternative数据,从Agent获取计算alternative的结果,对alternative进行PK,淘汰掉一部分的alternative。Agent的作用是从Master获取alternative数据,进行simulation计算,将结果返回给Master。

         Master上的数据结构中首先是一个mainList数组,保存着所有的alternative的原始参数以及simulation结果,然后是一个mainQueue和一个preQueue,这两个队列里面保存了mainList的索引信息。Master上还有一个master线程和多个selector线程。Master在启动的时候将所有mainLIst中所有的alternative放入mainQueue。通过master线程将mainQueue中的数据发送给Agent,通过master线程接受Agent的simulation结果,并放入preQueue。同时所有的selector线程从preQueue中获取simulation结果,将结果加入mainList中对应的alternative中,并与mainList中其他还存活的alternative数据进行PK,如果能够存活就将其放到mainQueue中,等待下一次的simulation计算。

         Agent上的数据结构是由AltQueue和SampleQueue两个队列组成,AltQueue存储着从Master发送来的alternative数据,SampleQueue存储着simulation结果。Agent上有一个agent线程和多个slave线程。Agent在启动的时候通过agent线程从Master获取alternative数据,将数据放入AltQueue,同时通过agent线程将simulation的结果传给Master,在此同时Slave线程从altQueue获取数据,进行simulation计算,然后将结果放入SampleQueue。

         关于网络数据通信,Master的master进程会开启多个端口的service,由Agent的agent进行进行数据拉去和计算结果推送。为了保证各Agent之间的负载均衡,在agent拉取数据量上是这样实现的,设定一个阈值,每过一个时间段进行一次检测,向Master拉取(阈值-当前值)数量的数据。这样能者多劳,使得计算负载均衡。

4.设计优势

1)一定程度上的顺序执行

         通过队列机制,使对于所有alternative来说,在一定程度上是顺序执行的,在PK的时候各个alternative之间完成simulation的次数是相差不大的。这样使得PK的算法在理论上能够得到证实。

2)多线程并发

         Slave和Selector的线程都是多线程并发的,Slave的并发较为简单,因为各个alternative在做simulation的时候是相对独立的,Selector的并发虽然线程间有一定的关系,但是这样的并发方式通过数学的可以得到证实的。并发的优点在于使得多核CPU能够最大限度的提高使用率。

3)异步传输,使得CPU使用率最高

         因为系统最耗时的地方在于Slave线程做simulation的过程和Selector线程做PK的过程,这两个是系统的瓶颈。通过队列机制实现系统的异步,让Slave线程和Selector线程不需要等待网络数据的传输,做到一刻不停的运行。

4)索引队列

         mainQueue和preQueue是使用链表实现的,因为其需要频繁的添加删除节点,mainList是用数组实现的,因为数组的遍历速度要远快于链表,在PK的时候需要对mainList中所有的alternative进行遍历。索引队列是指在mainQueue和preQueue中存储mainList的索引,能够通过索引很快的获取到数据,这样的索引队列的实现方式充分发挥了链表和数组的特点,使得效率提高。

5.设计弊端

simulation和PK的平衡性问题


        因为该系统在一定程度上是顺序的,即Master上的preQueue,mainQueue,Agent上的altQueue,sampleQueue,这四者之间形成一个环,数据在这个环上按照顺序传输。如果Selector做PK的速度大于Slave做simulation的速度,数据将堆积在mainQueue中,无法及时的进行simulation,而preQueue的数据将越来越少,导致Selector等待,降低Master的CPU使用率。如果Selector做PK的速度小于Slave做simulation的速度,数据将堆积在preQueue中,无法及时的进行PK,而mainQueue的数据将越来越少,导致Slave等待,降低Agent的CPU使用率。只有通过调整参数,使得simulation和PK达到一定的平衡性才能最大限度的提高CPU使用率。但是随着一些alternative被淘汰出局,alternative的总量发生变化,整个平衡性也会发生变化,使得系统的效率有所下降,所有这个问题还有待进一步解决。

小讯
上一篇 2025-02-08 08:19
下一篇 2025-01-08 14:30

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/127225.html