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+AJAX实现无刷新注册(带用户名实时检测)
Jan 02 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
Jul 03 PHP
解析coreseek for sphinx的使用
Jun 21 PHP
PHP中对于浮点型的数据需要用不同的方法解决
Mar 11 PHP
php smarty模板引擎的6个小技巧
Apr 24 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
Mar 18 PHP
php超快高效率统计大文件行数
Jul 05 PHP
PHP翻页跳转功能实现方法
Nov 30 PHP
YII Framework教程之异常处理详解
Mar 14 PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
redis 队列操作的例子(php)
2012/04/12 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
php目录操作实例代码
2014/02/21 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
select组合框option的捕捉实例代码
2008/09/30 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
2017/03/28 jQuery
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
Python读取stdin方法实例
2019/05/24 Python
python全栈知识点总结
2019/07/01 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
python框架django项目部署相关知识详解
2019/11/04 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
餐厅总经理岗位职责
2013/12/31 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书