dubbo ofrece la estrategia de equilibrio de carga de cuatro: al azar, robin, menos activo, el hash coherente
A, RandomLoadBalance-- azar
protegida <T> invocador <T> doSelect (List <invocador <T >> invocadores, URL url, Invocación invocación) { // Número de invocadores int longitud = invokers.size (); // Cada invocador tiene el mismo peso? boolean sameWeight = verdadero ; // el peso de cada invocadores int pesos [] = nuevo int [longitud]; // de la primera invocador peso int firstWeight = getWeight (invokers.get (0 ), la invocación); pesos [ 0] = firstWeight; // La suma de los pesos int pesoTotal = firstWeight; para ( int i = 1; i <longitud; i ++ ) { int peso = getWeight (invokers.get (i), la invocación); // Guardar para su uso posterior pesos [i] = peso; // Suma pesoTotal + = peso; si (peso sameWeight && =! {firstWeight) sameWeight = false ; } } // 有权重,按权重随机 si (pesoTotal> 0 &&!sameWeight) { // 0 - peso total (no incluido) un número aleatorio int offset = ThreadLocalRandom.current () la nextInt (pesoTotal) ;. // Devuelve una matriz correspondiente al número al azar un invocador para ( int i = 0; I <longitud ; I ++ ) { OFFSET - = pesos [I]; IF (offset <0 ) { retorno invokers.get (I); } } } // Todos los nodos es 0 o igualmente ponderados, devuelve una matriz aleatoria de invocador de retorno invocadores. GET (ThreadLocalRandom.current () la nextInt (longitud).); }
Resumen: el equilibrio de carga azar: de acuerdo a cada nodo pesos, al azar (usando ThreadLocalRandom thread-safe), se divide en dos casos específicos:
1, cada nodo del mismo peso, devuelve un invocador aleatorio.
2, no es el mismo peso, el peso total generado de acuerdo con un número aleatorio, el número aleatorio y vuelve intervalo invocador correspondiente.
Características: está inclinada una pequeña cantidad de solicitudes pueden ocurrir, cuando se aumenta la solicitud, el más equilibrado.
Dos, sondeo RoundRobinLoadBalance--