00:03
好,呃,下面我们来看Q分配算法。呃,Q分配算法啊,这这是什么意思呢?首先我们大家知道啊,一个里边这个Q有多个。而我们的Q啊,只能由一个consumer进行消费,就是只能由这consumer里边的一个进行消费,但是我们的consumer本身呢,可以同时消费多个Q。也就是说我们的Q和consumer之间啊,它实际上是有这种分配关系的。那么,这种分布关系是怎么样确立的?怎么样分的?那么。这里边儿就涉及到一些算法。啊,我们常见的有这样的四种啊。当然这四种策略啊,是在什么?呃,是在我们创建consumer的时候啊,通过这个构造器传进去的啊依旧呃创创建的时候就。
01:00
按照这种方式去去去去分配了。首先我们看第一种啊,叫平均分配策略。呃,平均分配策略很简单,什么意思呢?来先看描述啊,我再解释。这个算法根据。啊,Avg等于它这是我们我们这个Q的数量啊,现在Q的数量零到九这十个这编号啊,就是它的编号。然后呢,除以consumer consumer的数量,我现在是ABCD4个。是吧,这样我们标一下啊。看得更。更清晰一些。它的计算进行分配。如果能够整除,则。按顺序将avg个Q逐个分布,不能整除多余的。Q,按照顺序逐个分配。什么意思呢,大家看啊,我这十个。四个。
02:02
这个这个consumer,那十除以四等于几?等于2AVG就是二。但二。二四得八呀。是吧,你分完以后每个分两个,这这最后八个八个还剩俩。也就是说,然后这个这个每个人分俩,那那紧接着俩,我逐个分为按照它一二再多。每人再多一个,也就是说A分三个,B分三个,C分两个,B分两个,先把这个数算好,算好以后。再按照这个顺序,哎,你不是分三个吗?我012给你,你不是也分三个吗?345我给你。啊,你不是分两个吗?六七给你啊,你分两个八九给你。这样的,也就是说啊,我们我们。
03:01
就是。该算法。呃。什么计算好啊,每个。Consumer。应该分得。几个?Show。呃,然后再。依次将这些数量的。分配。嗯。逐个。分配。对吧,先算好数,先算好数啊。然后我们看一下这个环形平均策略。环形平行策略是什么意思呢?哦,不用算。啊,大家看这是这是我们这十个队列,哎,我就挨着啊,从这开始abcd。
04:02
ABCDA。就这分的。所以大家可以看一下A,看的是谁是零号。四号。和八号23个。你看他分的什么?是012,人家是零号四号和八号。不一样吧?啊,B的是啊一号。五号和九号。他的是。345,它是159。对吧,就不一样嘛,所以这这这种啊。环形平均算法是指根据消费者的顺序,依次在由Q队列组成的环形图中逐个分配。它这里边儿啊,对比一下来说的话就是,呃,怎么说呢。这是不用计算。对吧,它是不用计算啊呃。
05:01
就是。该。算法不用呃,事先呃计算每个。Consumer。需要匹配。几个?嗯。直接什么,嗯。一个啊一个。对吧,啊,这这种算法啊,也比较简单,也比较简单,比较复杂的是他以至于哈西。我相信对大家对于一阵哈希啊,对于这个策略应该是。比较熟悉的,因为太多的地方用这个一经寒系啊策略了。首先这有个哈希环。还有环上啊,这这有个点在这每个上面,这个环上是什么?全部是含义值,这值是零到二的32次方减一。就这么大的数啊。
06:01
然后呢,我是这样的,我先把这个。Q。先把Q啊,所有的Q,呃,我比如说QID它的值。QID的值。诶,这个这个这上面肯定有。对吧,我找到这个QID啊,它的值那个位置,比如就这个位置,这是零号的,这是一号的二号,这这些位置啊都有了。然后呢,我再把IID。他的。开始。也找到对应的在哈环上它的位置,哎,往那一放放放放放上好了,紧接着呢。紧接着我怎么分呢,哎,我就按照按照大家看。顺时针方向。该算法会将啊consumer的含义值作为no的节点放到含义环上,然后再将Q的含义值也放到义环上,这俩都上。
07:07
然后按照顺时针方向,距离Q最近的那个consumer,就是Q要分配的,注意有个顺时顺时针啊,那个顺时针,那么我们一般啊木纹就是顺顺时针方向啊,你说我我我想用逆时针方向,这个也可以的,没啥不行。那不行啊,顺针方向,所以这样的话,零和一给了A,二给了B 345给了C,呃,6789给了D。对不对,呃,这是我们说的一植性哈希,但是一致性哈希啊,我们。其实很容易看出来它存在的问题是什么。它存在问题啊。该算法存在的。问题。
08:01
很明显是什么,那就是分开。分不清。对吧,你看这这个这个。呃,这个分了,你看这个分了俩A分了俩B分了一个。C分了三个。第分了四个。还有,有没有可能性,谁分不到有这种可能性。有这种可能,要看你落点在哪了。就是我们说这个一致性阿西策略啊,再看同计方策略,同计和策略呢,这个。也比较简单啊。那这个算法会根据Q它的部署的机房的位置和consumer它的位置,这是我们的consumer。啊,这是我们的Q啊,我们。买这个这个这个是MQ集群嘛,啊,这里边有这个主机是吧。
09:01
这杭州机房,北京机房啊,成都机房这三个不同的机房,然后呢,那我过滤出当前consumer相同机房的Q,我要找到啊,谁和我在一个。呃,这个机房里边,然后按照什么,按照平均分配策略。或环形策略啊,对同级房Q进行分配,也就是说它是先按照同计房分。啊,分了以后,这里有很多机器需要再分,再分,那就按我们分策或者是分策略。进再分啊,如果没有同计方的,那就按照平均分配策略或环境分配策略对所有的Q进行分配。同机房的啊,同机房的,嗯。呃,这是我们说这个四种分配策略。
我来说两句