然后这个套面叫Building MongoDB Represents,一个framework,它是一个,怎么说呢,我们今天会讲到一个,从一个from scratch嘛,因为从很初步的用方式,怎么样去Build一个framework。我不知道今天有多少人对framework了解,并且是创建过,能不能修复一下。不多了,显然还在,那是有的讲,然后那个,有多少人从北京过来的,怎么样那个,杭州的雾霾,和对面的味儿一样嘛,倒多好,OK,显然那个,长话短说话,反正今天我会跟刘超一起来deliver this session,说一下目的吧,因为那个,在中国这边关于d4s,这边那个framework的幅画,实际上有一些过程,然后,我们是在三个月前幅画的,叫MongolDB的一个framework,然后在这个其中的话,给大家说一下这边的一些经验,然后与此同时去普及一下,因为在Mongol和d4s里面framework,是一个非常重要的一个概念,也是一个需要去普及的一个这些,PgCoop,D4s,这些东西而言,那还有就是,提倡大家参与这个社区的贡献,尤其是在d4s这个社区了,那增强这个,开发了一个框架framework的一些意识了,然后明确一下框架的价值和意义,那这个下面就是MongolDBREF的赛在bitharp上面的一个位置,大家可以抽中去看一下,这个就是那个MongolDB,尤其是d4sframework在d4slet里面的一个幅画的位置,就是你如果是要想去普画,或是做贡献的话,就在这里面,然后这上面,上面这些是有权限去普画的一个framework的一些人,然后我说一下当初我们的一个,一个出使的一个初衷和一个过去,然后大家给大家,给大家分享吧,就是当初我们想做这个,因为在这个社区里面有D4s,开三出来,D4s有REFDB,那些很多的DB,但是MongolDB在中国这边,沃破了很多客户都在使用,所以我们当初有个想法,去想去把MongolDB变成一种framework,并且是把它价借在这个D4s上面,然后呢,在这过程中,我就问社区的人怎么去做,我通过slet,这种slet这种,这种聊天工具,也通过一些email去问他们,他说实际上没有特别复杂的一些过程,你只需要到这个,有这个D4slet,Private的权限,因为这个D4slet,不是所有人看到,你要申请这个权限,你就可以看到这下面所有的project,然后呢,第二步的话,就是你可以去先create一个project,在这个github上面,然后你把你相关的那个,你自己在本地开发好的,或是在github别的,你的用户下面,创建好的这个,已经创建好的这个项目,把它一铺到这个github上面,然后呢,迅速创建一个apartile license,迅速创建一个apartile license,然后这项目就算是OK了,非常容易,那,创建的,意味着它能正式的被使用吗?反正是,不是的,所以说你创建完了以后,要通过社区不断review,参,就有contribution,慢慢的让这个framable,被大家意识了,并且使用上,并且有一定的认知度了以后,你才能真正变成一个package,跑到它那个,D4s里面有一个叫这个,Universal的那个里面,所以说这是一个很漫长的过程,也不是,一过两步就能完成,但是你要创建像素就非常容易了,这个是,因为这里面有很多人对missles很熟,我这边就,大概就,简单说一下,包括这个,这边的missles schedule,怎么样跟missles,master,和那个agent,进行一个交互,框架顶就这样,我就不去,多说了,然后missles path,这个life cycle,实际上也比较简单,大家对这个missles,资源调的方式,都会保持简单,我就稍微,稍微带一下,就是实际上,missles这个最大的优势,就是这种二层调度,从这个schedule,那边的话,它首先会把资源,提供给这种,这个这个,这个这个,sorry,就是master,会把这个资源,给到schedule,这个schedule,有可能是mango,滴滴的,有可能是,这个missles,各种各样的schedule,它有权限,cno,它可以把这个result,就reject掉,也可以是except掉,那,最终它怎么样,做到这个,真正的去,用资源呢,实际上就是,通过client在发了,这个task的请求,这task有可能是,还都不得一个task,有可能是,数据过的task,有各种各样的task,它就可以把这个,通过task,去看,哪一种字,哪一种资源符合它,如果说是,比如说,三个CPU,四个memories符合,它需求的话,然后,进下一步去,执行那个task,task执行完了以后呢,它就会把这个report,再返到这个,比如说, ageing, ageing, master, master,再给schedule,再给client,就这样一个过程,最终实现这个task的执行,就肉一层,整个,其实我一开始,觉得这个metals,整个这个schedule过程,其实还是,还是有很多,比较控过的地方,但是后来,看到了整个,这个代码这个过程以后,就是我相会清晰一些,比如说,我想,我困过的第一个问题,就是说,在每一次,我分配资源的时候,就是我的master,我拿到了所有的资源,我把这些资源,给不同的firmware的时候,我同一个slave上的,所有的资源,会不会同时,会不会分配两个firmware,还是只会,每次只给一个firmware?这答案是,其实不一定,但是就是说,在,大家如果说,忘了reservation,就是忘了reserve,这个预留的这个情况下,如果说,没有任何预留的情况下,其实是,每一个slave上的所有资源,一次只会给一个firmware,就是说,我的slave A,我的上面的所有资源,我给了A,我这一轮,就不会给B,我要想给B,我得等下一轮,就是说,在过几秒钟,它不会有时间限制,在过几秒钟,它才会给B,它首先会生成一个,数据结构,那么这个数据结构,大家一看,就很明白,它是一个touchmap,就是它叫offerwall,就是说,会给每个资源,每个firmware,它的P,就是firmware ID,Value,就是每一个slave上,都有拿这个resource,那么通过这个,你就可以看出,它其实,每一次交付,每一次交付的时候,按说,应该是每个firmware,看到的这个资源,情况是不一样的,不是说,每一个firmware,都能看到,下个100个接点,不是这样的,可能你看到,30个,它看到50个,它看到,它是这样的,所以说,这个offerwall,是这样的,然后第二步呢,它会把slave打乱顺序,因为它不想说,你的slave,每次我都从第一个,开始分,然后所有的task,都集中前面,所以它现在random,稍稍一下,然后把slave ID,从头到尾,全部打乱一下,那这样的话,它就分配的,相对的公平一点,接下来这边,有点,有点,比较详细了,就能说,其实,其实也没,就是,其实看了代码,它是,如果说,知道原理,还是比较清晰的,就是说,它,对于offerwall,它首先进行了,三次循环,第一次循环,是,所有的slave,过一遍,第二次,说,所有的肉,过一遍,第三个就是,所有的slave,过一遍,最里面,然后,会做一个,这时候会,其实,一旦到了,这三个循环的最里面,这时候,其实已经具体了,一个slave,和一个firmwork,然后,它只要,决定,我这个slave,到底要给,到底要给,还是不给,这个firmwork,就,就可以了,然后,每次循环,大家都会看到,这个,上面这个quarta,都会,这个肉,烧烫一下,每次都会排过去,每次都会,就是,对于每一个slave,都会,它都会重新再排过去,那这样就,就,这样就能保证公平吧,就是,第一个slave过来,我分配给a了,然后呢,第一个slave过来,比如说a排b,我烧的,a排b前面,然后呢,进入,里层循环,那么这个slave,就给了a了,给了a了以后呢,那下次,再到第二个slave的时候,不过说,它俩公平的话,再烧的的话,再到里边循环,那么这个slave,肯定就给b了,然后这样就,一次给a,一次给b,一次给a,一次给b,在没有这种quate的情况下,其实,是能保证,这么,类似,类似这么一个公平,类似这么一个公平,然后slave呢,是在一个叫souter的,一个里面,里面,是在一个souter里面,实现的,它的实现的核心呢,大家看,对,就是这种,刚才说,算那个share,share等于,首先是max,除以total,除以total,大家看到这个,就是,刚才我说的,d2f算好,为什么呢,就是,它首先,是说,我自己一分的,除去做饭,然后呢,用max了一下,就能说,我到底是CPU,max就是,我到底是CPU,主的,还是members主的,对吧,它把所有的资源,都过一遍,如果说CPU是max,它们的,我就是CPU算,如果是members,但是,这个最后排序的时候呢,它其实还不算,这个share只是排序,它会share出于一个位置,就是,不同的分货,会有权重,比如说,a和b是一比二的关系,那么,那么这样,这样得到的,按说是,如果说公平,分配的话,那应该是说,a跑一个,那么b跑两个,然后再一跑一个,再b跑两个,那么才是,才是,就是,这样有过程,然后最后排序,就是说,所有排序结束以后,进去了以后呢,它就会把,已经分配的资源,这边,这边有这颗什么,slave的total,减去locating的,什么all reserve的,减去reserve的,所有的,所有的这些东西,都会把这些sauce,都会,都会减掉,这就为什么说,一个slave,在,一个slave,它里面,所有的资源,它如果说给了a,那么这时候呢,它就不够再给b了,因为在b,在b来的时候,在b来的时候,这些,这些,这些资源,其实都已经被减去了,它发现,它已经,已经,已经都没有了,然后最后是说,它overhaul,就是把刚才分配的,这个过程,都放在,刚才那个hashback里面,然后最后,它会做一个整个循环,会把这个hashback,一个个的,去,去,那个,一个个的,去发给一个former,这里面,它需要强调一下的,就能说,它其实整个排序的过程,仅仅是排序,它不会说等说,它,它这个过程,它仅仅是一个计算的过程,就是,它就是算一个,它不会说我算了a,然后呢,我先给了a,发现你不用,我再给,没有这个过程,没有这个过程,就是,它在算的这个过程中,它不知道a和b,到底用不用,所以说,它,它就是先算,所以说,如果说是发给a,a不用,然后,再来轮到b用,那是下一次的,就不是,就不再,不再是这一次叫做的,不再是这一次叫做的事情,然后,再往下就是,就是,进行第二次,第二次循环,第二次循环就是,对于quadra的firmware,然后又进行了,又进行了一次,三重循环,对吧,四列不循环一次,肉不循环一次,然后firmware不循环一次,然后,firmware不循环一次,然后呢,这个,然后,它七十几年的过程,它刚才那个是,很像很像,很像很像,所以说,这是不太厉害,然后最后呢,你看它,它会,会掉的东西,然后,会掉用一个函数,这个函数,会一直掉,就是说,master,master,会,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,呃,按说应该是B得到的资源如果它平反下发任务的话那么其实比如说都是下发的小任务对吧 平反下发任务的话那其实是应该说是A是一个B两个A一个B两个然后假设那么这时候呢光只有A有任务运行但是呢 比如说A这时候其实已经运行了任务比如说它其实已经运行了三分之一的任务然后呢 这样其实是每次那次计算的时候它总是B排在前面对吧 每次造成的时候因为A已经运了三分之一了B还是0然后按说B应该有三分之二它其实有一个巨大的这个空档所以说 这个整个配计算好的时候永远是B排在前面那么刚才说了我运点了任何一个C 我都会给前分这一个那么按说这时候A就会被它其实运完了三分之一就不会再用多的但是我们实验下来不是就是说 我即便设了Wate然后A和B是1比2的关系我的如果B啥都不运行A可以用吗那这是Bassos的 其实另外一个其实它其实这个论文里面其实可能没有写它的另外一个其实是说我如果在这一次我给你这个资源但是你没有用但是你没有用我就会把你这个sale加到你的一个filter加到一个过滤器里面然后在这次循环的时候你把它过滤掉然后当下次大概也是有一个时间吧然后它就会回来那这样就会导致说我现在A排到前面那有个任务我B空的我又B排到前面了然后分给它然后B把这个offer给拆掉我没有任务可以做然后再下次来说还是B排到前面但是呢它说我没有filter我filter掉我不用那么这时候又回到A大概是这么一个过程所以这是整个D2或者就是说我看整个Bassos这个代码所想给大家做分享一下的东西虽然说这个和Scheduler关系说有其实也有但是就是说大家一般写写个Scheduler跟Scheduler说的不会关系这个东西但是呢其实我们在客户做项目的时候如果客户的firmware很特项目比较多并且还要分这个比例的时候中间就很纠结我觉得讨论到底是说能不能被俄罗斯或者是能不能或者是wik到底是不是强制了对吧现在的wik不是强制的只是一个算法而已所以说不要予分1比2到时候就真的予2它不是它只是一个算法而已它只是一个算法它没有强制的然后其实要写一个Scheduler的话其实它会有很多的那个接口可以实现一个是register一个是register然后呢就等于说我一个分过来起来的时候我会先给那个mastermaster发个消息mastermaster说说我知道就是register会给他一个response然后他发现说发现mastermaster知道我是register上去了然后呢我就会打一或者一打一条可以捏可以保存就是register然后其实最重要最重要的就是resource over就是我得到了这么多的列表我得到这个列表以后我到底应该task怎么运行怎么运行然后其实对于猫骨的话它的所有的其实就是大部分的逻辑都是在这里面做的就是说我其实要知道哪个是先起来的哪个是后起来的然后我要告诉送起来的那个先起来的IP然后我还要知道他们所在的节点的位置然后后期去去做那个那么这些都是分成不同就是非常不同阶段的这个resource overresource over来做的然后接下来就是其实你就是说你还会要去实现一些什么lost所有这些消息你可能都需要处理但是其实最重要的就是写这个resource over这么一个东西然后这个scheduler其实是这是一个mesos的它一个案例它是一个mesosscheduler driverscheduler driver来把它运行起来的那为什么要用这个scheduler driver呢就是说其实按道理来讲你可以不用scheduler driver就能说它其实的EPI是用proper buffer来做的你只要能把自己弄得容易轰胖成那个你其实也可以自己做但是呢整天这个过程就会相对比较复杂了所以说对于四家家家够他们都实现了scheduler driver相对于这样一个酷然后你拿这个酷就把这个scheduler运行起来然后scheduler就进行刚才的那几个函数然后这时候呢你其实就你其实不用关心说你mesosscheduler driver我是怎么把消息发过来的其实这个scheduler driver是会它会和那个mesosscheduler driver它给了它它就会后来转掉你的这个scheduler driver然后如果说你作为写一个meseduler driver的话其实你其实是要其实挺侧位也是个中间的过程就是说你左手接mesosaged右手是接你自己起的那么那么一个task它其实重要重要的这个过程在lunch task里面当然如果你接受到前上个firmware发过来的pill task那你也你也你也应该进行处理然后写scheduler的时候呢它最后是也是用mesosscheduler driver把它把它运行起来的其实刚基本的原理和这个和scheduler driver其实是一样的那么在写scheduler的时候呢其实这里面还是还是有些坑的就是后来我们一开始是写了自己的scheduler driver然后后来又没有写自己的scheduler driver还是用高坑来装就是说scheduler driver接时候这些其实他所有的这些他所有的这些这些函数都切出类似消息消息机制的就是说我收到了什么消息那我就调这个一般就是什么什么就调这个消息就调这个方法这个消息就调这个方法那么我们一开始写scheduler的话是说我们所有的逻辑都是在主线程里面没有生存自建程来做的但是呢这样就遭遇问题就对人说其实大家大家如果写普通的soc文件其实其实其实本来也有这个感觉就是说我其实一开始listen一个soc然后呢listen以后except然后当有一个client卡车连上来的时候我这时候得到的soc其实本来这个soc不是一个soc然后呢我其实应该拿到那个soc再起一个线程去处理而不是说我在主线程里面send to receivesend to receive就是这样说如果说你在主线程里面send to receivesend to receive这样说不再去进行except的话不再进行except的话那么你下个消息所以说大家如果写那个普通的soc文件的话其实是知道这一面但是他被封到except里面我其实就不知道这一面我其实以为是给我的就是一个单主的线程但后来发生了一件事我如果我如果是在large pass里面主线程里面做了然后我要在里面哪儿死掉我会发现我q他是qq不掉的但是因为就是说我q他的那个消息压根我主线程被阻塞了就过不来所以其实是一里面其实应该起一个主线程做任务这时候那再来任务的时候那么你的主线程其实还可以做q pass的这个任务关你该杀的东西都要杀的然后这个start这个firmwork其实和刚才那个那个基本写的是一样的就是messlesscanner driver绕起来然后launch pass其实launch pass这只是代码的一个片段我们后来其实还是用刀款盲目我自己打打不尽向来做这件事情但是其实中间整个逻辑它还是不止这样的逻辑因为刚才说了它就要做类似这种相互发现的这么一个东西所以我们需要把我们的消息保测在中taper里面去比较建议保测在中taper里面去包括刚才说的eqcd保测在这里面去尤其是mastermessles master 是多个对你可能如果保测内存里面你自己的master master挂了然后那个master master是多个但是就是说你其实每一个scanner可能是你可能scanner除了more可能你可能也会去多个比如说你要用messles mastermessles master 会去多个messles master其实是把自己的数据都放在中paper里面的因为messles master他想自己也是无状态的我messles master任何挂了然后其实我另外一个messles还是能读到中paper里面的东西所以说你应该把自己mongo的几个这种你最先起的想做lead后来想做slave的东西保存在中paper保存在中paper里面去然后这时候然后你下发任务的时候这时候你会知道你会知道就是说他是一个slave然后重启了或者还是一个master重启了你都知道这时候你会相应可以下去做些任务以及可以说在里面运行mongod如果说你是一个新发现的任务你也可以说我要想做一些配置的话我可以用mongo连本地的ip去去做一些事情然后还有一个就是说如果用malison的话刚才说的那个那个他其实是无法区分我的mongo到底是第1次起还是第2次起所以说他就很尴尬的事情我如果发现有一个路径有路径里面有个lock我到底是听还是不听那么如果是用firmark的话就可以自己的firmark作为一个大脑就可以知道这个事情但是你如果malisonmalison他是不知道这个事情他认为你是无状态他认为你是无状态然后对于作为有状态的整个一个东西其实还有一个很关键性的点就是存储的问题就是存储的问题刚才上一个有一个问了一个存储的问题其实在opens1.8里面其实已经有了三种存储的方案三种存储的方案如果大家就是其实去加碼区院上自己点一个open.s创建出来然后其实是这个方案都在里面了大家可以大家可以可以玩一玩试试看然后但是这个方案其实是需要的malison里面的形态法的需要的malison的形态法如果你自己写一个屏幕所以说你可能需要把他那个东西去借鉴过来然后第1个就是说是一个本地历史存储这个就是大家原来有malison大家通用的就是说所谓本地历史存储是说我写一个刀块我写一个刀块以后然后他其实这个是个tas给他tas他会有tas他第一malison存账一长六十东西那么这时候他会有一个三导路径三导路径也很深他就是说在什么mountmount三导路径很长那边路径进去这个路径其实是一个暂时的是个暂时的就能说你可以把很多log什么东西往里放但是问题是说我一旦给他tas挂哪怕是在本地你把它重新起来你这个路径也变了你的东西就空了这样其实还是有问题的比如说我们运行spark的时候如果我们第四万次的universe的时候他其实是本来要下载一个gdk对了下载一个gdk然后呢然后呢我们发现他好不容易下载完当这个tas挂了在起来的时候我以为本地不是有了一个结果他其实是在另外一个很长的路径下不但他下载能够重新下来当然你可以用那种pash这种方式来做但是就是对于这种就是本地其实下载gdk还行就是因为gdk它是太不状态的它就是都一样的我们每次拉开来都是一样的但是对于这种数据固这种这种方式这不是很合适然后呢它所第二种的策略叫本地持就化存储本地持就化存储就是给给就是说其实第三种就是发案就是就是印的就很多了就是说大家都会有外国的统一化存储有用safe的可能有用Glass FS的有用其他的这种买一个这种散的或者买一个NAS的这都有可能那么如果外国持就化存储那么它其实是还是利用了Dalper Volume的那个Blocking来做的就是说这个让它它能够做到一点是说我在本地我加载Ulog然后呢我这个Dalper在这个挂了以后我的另外一个机器还是能够冒充进去然后那个数据我还是能够看到然后这是相对一个比较通用的通用的方案但是这个方案的问题在于其实这个方案都没有问题但是经常遭遇的困境就是说其实有能力优化和把safe做到比较高兴的公司还是少还是少所以说所以说中间这个本地持就化的存储就是一个像是中间那个方案那么所谓本地化的持就存储在有这个东西之前其实很多的人做有状态的这个东西会用CustomerCustomer比如说我其实并不依赖于这种MSF的平台的一些机制我其实想依赖的是比如说Mongol自己有一个机制所以我有三个点我挂了一个它其实是可以自修出的我如果说HDFS的话它也有自修出的机制我其实并不期望说我这几点挂了里面那么数据我到了另外一个节点我这个还能拿过来我其实如果它有这种它是这种自己有HAS的机制的话我其实可以不用依赖下海我统一存出这样就能说即是说像Mongol这种包括HDFS中我对iO系能要求非常强那么可能我的CPU我没有研发的内机已经优化那么这时候呢这时候呢就能说我就可以要依赖于这个就是说HDFS或者Mongol自己的HAS的这个特性那么原来都是用Constant来做就是我下发的时候我下发三个MongolDB然后我Constant就在这个机器上然后呢我一般会把那个我一般会把这个Volume就是说从容器里上挂出去挂出去的时候呢我为了下次再启动的时候我还能挂这个路径路径一般什么就是路径因为如果说把这个东西发到放到三个BOX里面去了以后下次你就永远找不到上面的路径对你可能会挂一个全局的绝对路径那么挂一个全局的绝对路径对于一个小的class和其实没有其实也是没有问题的就是你如果说大家不共享然后你的这个Mass Master只有一组IT专门去约会的话其实是没有影响但是如果说你个Mass Master其实是多个Volume或者说甚至多个团队一会儿去做的时候这是有一个想法就是说你怎么维系它执行的这个绝对路径和你执行的这个绝对路径不充分这时候你可能就需要外面封印层用一个数据我们原来其实也类似做过一个事就是外面封印层用数据结构来做这个事就是我把这个路径给定了然后我要用Root下面的那个那个不没路径你也要你也要用这个路径就不被余定了你只能用不闷本电话是有存储的它其实是是Open Distance 1.8大家可以看一下有的一个东西就是说我在Root里进一个Cast的时候我有一个Json这个Json里面可以写一个叫Possistant Volume这么一个东西这个东西它会写一个路径但这个路径不是绝对路径是相对路径然后另外它会写一个说我这个路径你需要的资源有多大比如说500G或者一个T类似这样然后这个东西下发下发完以后Melson会把他怎么做呢他除了说我首先把这个Task分配到每个节点上以外他还会把你这个Task运行的所有的CPU内存硬盘全部自动下来你比如说我起了三个MaoDB他就说除非整个Group被全部干掉DeleteScale1都不行Scale2成里面都不行就是除非被Delete掉要不然这个路径是永远存在它这样就会保证什么被保证说我可能无论什么时候我要重启比如说如果说自用CastJson的话会有这个问题就是我重启的监系万一有一个更丢逼的任务爬到了这个机上然后把所有的CPU都站好了然后大家共享的时候那我就永远进不来了我就永远进不来了那么他这时候会把这个都自动掉就跟说我只要想回来我永远是在这然后呢另外一个东西就能说他那个路径是绝对路径这个路径是在Sungles那个很长的串后面的然后呢我无论什么时候我这个Task挂了挂了以后原来重启的时候不是会生成一个新的路径吗就是你的Task变了你是无状态的Task是Task变了然后然后我新的路径然后你找高原来的东西然后他会保证就是说我这个Task挂了我再起来我永远还能找到原来那个路径这样还有好就是他不会产生就是每个人都可以都可以写自己的路径就不会重启就是你永远在你的那个散热blogs路径下我永远在我的散热blogs路径下无论什么是重启我都到我们的里边你是无论什么是重启你都到里面你都到里面你的那个里面然后咱俩是其实是永远不会重则然后然后并且说我还有这种就是这种额度的限制就是500个级200个级这200个硬盘这我也是会保留给你的不会说别人用啊用然后把这个用盘硬盘用光然后这个硬盘它是怎么保证这个这个量子其实Messos其实有一个参数叫做是否强制规定硬盘的大小强制规定硬盘的大小默认情况下这个这个参数是false就是说不会强制规定硬盘的大小所以说会存在一个界限就是我如果写一个容器然后我把我冒着一个本地的一个一个文件夹我时间往里写我其实可以把整块卡都撑满把整块卡都撑满但是呢就是说OpenDsOS它其实写了一个Acelator的东西就是在如果大家看上了大家刚才参加了上一个就是说有ModelsModels里面很重要的一个叫Acelator它其实是Acelator它其实Acelator它有两个非常重要的其实它有很多的接口然后最重要的两个接口第一个接口是Icelator接口那第二个接口是Wars接口那其实大家如果说用这两个接口其实这两个就很好的理解Acelator的接口是我预先设置型的Wars是我后拆感型的什么叫预先设置型的比如说CPU和内存对吧我其实是可以通过C Group的方式在Task的启动的时候我就限制出一个CPU内存所用的这个资源所用的这个资源但是呢第四个呢就干辣就是第四个呢我C Group这个是有C Group的但是我的Disk用个大小用个100G啊是200G啊这个这个其实是没有相应的零子机制可以把它可以把它限制的所以说它只能用后面的Wars的方式Wars就是它其实Acelator叫DiskDU大家知道大家都用过DU这个这个东西就是你过点时间DU一下过点时间DU一下然后它DU完了以后它已经超过了你这个设计的这个大小比如说你设计了100G它现在用了200G那你应该怎么办呢如果说默认情况下刚才说那个那个参数是False的情况下它其实只是一个Alert它不会做任何事情它不会把你Puzz这样给干掉但如果说你是说False就是我强制说就限制你只能用100G那这时候你的容器就会被干掉你的任务就会被干掉大概是这样我技术方面就这样好谢谢刘超然后那个我说一下那个关于关于是这个关于FreeGo服务化啊包括这个中国社区的事欢迎大家那个加入中国的这个B-S民主社区然后今天下午我提前预知今天下午有个赛信就是讲中国的生态就我来讲中国的生态和一些这个2016年的报告也欢迎大家到今天去参与总统来说吧谢谢大家妹所有人参加会的人都是咱们这个中国社区的参与者和就贡献者了咱们一起来创建好这个社区好谢谢大家