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 相关文章推荐
杏林同学录(一)
Oct 09 PHP
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 PHP
PHP 编程的 5个良好习惯
Feb 20 PHP
php 中的4种标记风格介绍
May 10 PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
Drupal简体中文语言包安装教程
Sep 27 PHP
PHP中模拟链表和链表的基本操作示例
Feb 27 PHP
PHP如何使用Memcached
Apr 05 PHP
PHP获取不了React Native Fecth参数的解决办法
Aug 26 PHP
php输出含有“#”字符串的方法
Jan 18 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提示undefined index的几种解决方法
2012/05/21 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
jQuery插件版本冲突的处理方法分析
2017/01/16 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
python django 访问静态文件出现404或500错误
2017/01/20 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
如何用python整理附件
2018/05/13 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
市场安全管理制度
2014/01/26 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技
Mysql 文件配置解析介绍
2022/05/06 MySQL