dubbo呼叫負載均衡

2021-09-07 16:36:53 字數 2498 閱讀 4297

隨機策略:

public

class randomloadbalance extends

abstractloadbalance

}if (totalweight > 0 && !sameweight) }}

//如果權重相同或權重為0則均等隨機

return

invokers.get(random.nextint(length));

}}

由此判斷出,random是執行緒安全的!

輪訓策略:

public

class roundrobinloadbalance extends

abstractloadbalance

}atomicpositiveinteger sequence =sequences.get(key);

if (sequence == null

)

int currentsequence =sequence.getandincrement();

if (maxweight > 0 && minweight < maxweight)

if (v.getvalue() > 0) }}

}//取模輪循

return invokers.get(currentsequence %length);

}private

static

final

class

private

intvalue;

value)

public

intgetvalue()

public

void setvalue(int

value)

public

void

decrement()

}}

這裡要用concurrentmap記錄每個invokers list 對應乙個記數,記數每次呼叫加1,然後取模來算出呼叫哪乙個invoker。

最少活躍數策略:

public

class leastactiveloadbalance extends

abstractloadbalance else

if (active == leastactive) }}

//assert(leastcount > 0)

if (leastcount == 1)

if (!sameweight && totalweight > 0)

}//如果權重相同或權重為0則均等隨機

return

invokers.get(leastindexs[random.nextint(leastcount)]);

}}

一致性hash策略:

public

class consistenthashloadbalance extends

abstractloadbalance

return

selector.select(invocation);

}private

static

final

class consistenthashselector

for (invokerinvoker : invokers) }}

}public invokerselect(invocation invocation)

private

string tokey(object args)

}return

buf.tostring();

}private invokerselectforkey(long

hash)

else

}invoker =virtualinvokers.get(key);

return

invoker;

}private

long hash(byte digest, int

number)

private

byte

md5(string value)

catch

(nosuchalgorithmexception e)

md5.reset();

byte

bytes;

try

catch

(unsupportedencodingexception e)

md5.update(bytes);

return

md5.digest();}}

}

這個一致性hash放節點的時候的key用的是ip位址,在查詢的時候使用呼叫方法的引數集合,這裡可能會有問題,不建議使用。

dubbo負載均衡

在集群負載均衡時,dubbo提供了多種均衡策略,預設為random隨機呼叫。random loadbalance 隨機,按權重設定隨機概率。在乙個截面上碰撞的概率高,但呼叫量越大分布越均勻,而且按概率使用權重後也比較均勻,有利於動態調整提供者權重。roundrobin loadbalance 輪循,...

dubbo負載均衡

負載均衡 在集群負載均衡時,dubbo 提供了多種均衡策略,預設為 random 隨機呼叫。負載均衡策略 random loadbalance 1 隨機,按權重設定隨機概率。2 在乙個截面上碰撞的概率高,但呼叫量越大分布越均勻,而且按概率使用權重後也比較均勻,有利於動態調整提供者權重。roundro...

Dubbo 負載均衡

負載均衡策略 dubbo內建了四種負載均衡策略 randomloadbalance 隨機負載均衡,預設的策略 roundrobinloadbalance 輪詢負載均衡 leastactiveloadbalance 最少活躍呼叫數 consistenhashloadbalance 一致性雜湊,相同引數...