round robin权重轮循算法php实现代码


Posted in PHP onMay 28, 2016

先上代码,采用php脚本语言

<?php

/* 
 * Copyright (C) FatHong
 */

/* 数据初始化,weight: 权重 */
$hosts['a'] = array('weight' => 5, 'current_weight' => 0, 'count' => 0);
$hosts['b'] = array('weight' => 3, 'current_weight' => 0, 'count' => 0);
$hosts['c'] = array('weight' => 2, 'current_weight' => 0, 'count' => 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['weight'];

    $current['current_weight'] += $weight;
    $total += $weight;

    if ( ($best == null) || ($hosts[$best]['current_weight'] < 
                $current['current_weight']) ) 
    {
      $best = $key;
    }
  }

  $hosts[$best]['current_weight'] -= $total;
  $hosts[$best]['count']++;

  $result[] = $best;
}

输出结果:

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

负载均衡的服务器中,其实现算法有种是round-robin权重轮循,就是后端的服务器列表中,给每个服务器标上权重,代表它被采用的机率。

这段代码把最简洁的流程剥离出来,没考虑后端挂起等情况,可以知道它是怎么实现的,仅供参考.

PHP 相关文章推荐
php 设计模式之 单例模式
Dec 19 PHP
深入extjs与php参数交互的详解
Jun 25 PHP
php实现插入数组但不影响原有顺序的方法
Mar 27 PHP
php如何获取文件的扩展名
Oct 28 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
Dec 21 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
Sep 11 PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 PHP
详解Yii实现分页的两种方法
Jan 14 PHP
PHP中函数gzuncompress无法使用的解决方法
Mar 02 PHP
老生常谈PHP位运算的用途
Mar 12 PHP
详解php中的implements 使用
Jun 13 PHP
PHP设计模式之工厂模式实例总结
Sep 01 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
May 28 #PHP
php获取一定范围内取N个不重复的随机数
May 28 #PHP
smarty的section嵌套循环用法示例
May 28 #PHP
PHP引用返回用法示例
May 28 #PHP
php时间函数用法分析
May 28 #PHP
zend framework重定向方法小结
May 28 #PHP
php通过文件头判断格式的方法
May 28 #PHP
You might like
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
JS嵌套函数调用上下文的问题解决
2014/03/26 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
JS检测移动端横竖屏的代码
2016/05/30 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
Vue自定义指令详解
2017/07/28 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
Node.js中DNS模块学习总结
2018/02/28 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
python如何查看系统网络流量的信息
2016/09/12 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
Python rstrip()方法实例详解
2018/11/11 Python
Django密码系统实现过程详解
2019/07/19 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
新闻专业个人自我评价
2013/09/21 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
2014年创卫工作总结
2014/11/24 职场文书
小学语文教学反思范文
2016/03/03 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript