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教程 预定义变量
Oct 23 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
Feb 06 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
PHP GD库生成图像的几个函数总结
Nov 19 PHP
php编写的一个E-mail验证类
Mar 25 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
Apr 10 PHP
PHP7多线程搭建教程
Apr 21 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
PHP设计模式之模板方法模式实例浅析
Dec 20 PHP
laravel 自定义常量的两种方案
Oct 14 PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 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
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
2016/12/08 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
js实现抽奖效果
2017/03/27 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python字符串string的内置方法实例详解
2018/05/14 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
python多进程读图提取特征存npy
2019/05/21 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
加拿大国民体育购物网站:National Sports
2018/11/04 全球购物
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
光电信息专业应届生求职信
2013/10/07 职场文书
通信专业个人自我鉴定
2013/10/21 职场文书
优秀医生事迹材料
2014/02/12 职场文书
我们的节日清明节活动方案
2014/03/05 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
债务纠纷代理词
2015/05/25 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL