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 增加了对 .ZIP 文件的读取功能
Oct 09 PHP
PHP 调试工具Debug Tools
Apr 30 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
php加密解密实用类分享
Jan 07 PHP
设置php页面编码的两种方法示例介绍
Mar 03 PHP
MySql数据库查询结果用表格输出PHP代码示例
Mar 20 PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
Dec 14 PHP
php传值和传引用的区别点总结
Nov 19 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管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
Javascript Function对象扩展之延时执行函数
2010/07/06 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
Python实现字典依据value排序
2016/02/24 Python
python3实现表白神器
2019/04/09 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
python如何实现递归转非递归
2021/02/25 Python
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
东南亚排名第一的服务市场:kaodim
2019/03/28 全球购物
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
linux下进程间通信的方式
2014/12/23 面试题
开会迟到检讨书
2014/01/08 职场文书
新娘父亲婚礼致辞
2014/01/16 职场文书
食品行业求职人的自我评价
2014/01/19 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
收入证明范本
2015/06/12 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js