Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Implementierungscode für den Round-Robin-gewichteten Round-Robin-Algorithmus

PHP-Implementierungscode für den Round-Robin-gewichteten Round-Robin-Algorithmus

高洛峰
高洛峰Original
2017-01-03 09:09:061220Durchsuche

Geben Sie zuerst den Code mithilfe der PHP-Skriptsprache ein

<?php
 
/* 
 * Copyright (C) FatHong
 */
 
/* 数据初始化,weight: 权重 */
$hosts[&#39;a&#39;] = array(&#39;weight&#39; => 5, &#39;current_weight&#39; => 0, &#39;count&#39; => 0);
$hosts[&#39;b&#39;] = array(&#39;weight&#39; => 3, &#39;current_weight&#39; => 0, &#39;count&#39; => 0);
$hosts[&#39;c&#39;] = array(&#39;weight&#39; => 2, &#39;current_weight&#39; => 0, &#39;count&#39; => 0);
 
$result = array();
 
/* 模拟10次 */
for ($i = 0; $i < 10; $i++) {
  round_robin($hosts, $result);
}
 
/* 输出结果 */
print_r($result);
 
/* round robin 轮循 */
function round_robin(&$hosts, &$result)
{
  $total = 0;
  $best = null;
 
  foreach ($hosts as $key => $item) {
    $current = &$hosts[$key];
    $weight = $current[&#39;weight&#39;];
 
    $current[&#39;current_weight&#39;] += $weight;
    $total += $weight;
 
    if ( ($best == null) || ($hosts[$best][&#39;current_weight&#39;] < 
                $current[&#39;current_weight&#39;]) ) 
    {
      $best = $key;
    }
  }
 
  $hosts[$best][&#39;current_weight&#39;] -= $total;
  $hosts[$best][&#39;count&#39;]++;
 
  $result[] = $best;
}

Ausgabeergebnis:

Array
(
[0] => a
[1 ] => b
[2] => c
[4] => a
[6 ] => a
[7] => c
[8] => b
)

Server, Einer seiner Implementierungsalgorithmen ist die Round-Robin-Gewichtungsrotation, was bedeutet, dass in der Back-End-Serverliste jeder Server mit einem Gewicht markiert ist, um seine Übernahmewahrscheinlichkeit darzustellen.

Dieser Code entfernt den einfachsten Prozess, ohne Back-End-Hänge und andere Situationen zu berücksichtigen. Sie können wissen, wie er implementiert wird, nur als Referenz.

Weitere Round-Robin-Gewichtsräder für verwandte Artikel Für algorithmenbasierten PHP-Implementierungscode beachten Sie bitte die chinesische PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn