round robin weighted round robin algorithm php implementation code

高洛峰
Release: 2023-03-04 14:42:01
Original
1281 people have browsed it

First enter the code, using php script language

<?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;
}
Copy after login

Output result:

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

In a load-balanced server, one of its implementation algorithms is round-robin weighted round robin , that is, in the backend server list, each server is marked with a weight, representing its probability of being adopted.

This code strips out the simplest process, without considering back-end hangs and other situations. You can know how it is implemented, for reference only.

More round robin weight wheels Please pay attention to the PHP Chinese website for articles related to the algorithm PHP implementation code!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template