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 友好URL的实现(吐血推荐)
Oct 04 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
浅谈php中mysql与mysqli的区别分析
Jun 10 PHP
深入php socket的讲解与实例分析
Jun 13 PHP
php socket客户端及服务器端应用实例
Jul 04 PHP
浅谈php冒泡排序
Dec 30 PHP
php curl常用的5个经典例子
Jan 20 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
PHP常用header头定义代码示例汇总
Aug 29 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中数组的三种排序方法分享
2012/05/07 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
摘自启点的main.js
2008/04/20 Javascript
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
详解Vue源码之数据的代理访问
2018/12/11 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
利用Electron简单撸一个Markdown编辑器的方法
2019/06/10 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
Python使用新浪微博API发送微博的例子
2014/04/10 Python
Python实现partial改变方法默认参数
2014/08/18 Python
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
将python图片转为二进制文本的实例
2019/01/24 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
Otel.com:折扣酒店预订
2017/08/24 全球购物
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
会计电算化专业应届大学生求职信
2013/10/22 职场文书
《火烧云》教学反思
2014/04/12 职场文书
出国留学担保书
2014/05/20 职场文书
片区教研活动总结
2014/07/02 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
个人四风问题整改措施
2014/10/24 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书