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 相关文章推荐
很实用的一个完整email发送程序
Oct 09 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
Jan 27 PHP
CI框架装载器Loader.php源码分析
Nov 04 PHP
php多重接口的实现方法
Jun 20 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
Jul 01 PHP
php验证码生成代码
Nov 11 PHP
php函数mkdir实现递归创建层级目录
Oct 27 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
php多文件打包下载的实例代码
Jul 12 PHP
PHP生成随机码的思路与方法实例探索
Apr 11 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 5.0创建图形的巧妙方法
2010/10/12 PHP
PHP中常用的转义函数
2014/02/28 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
django用户登录和注销的实现方法
2018/07/16 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
展会邀请函范文
2014/01/26 职场文书
2014年大班元旦活动方案
2014/02/26 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
专科生就业求职信
2014/06/22 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
六年级小学生评语
2014/12/26 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫
python画条形图的具体代码
2022/04/20 Python