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 相关文章推荐
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
Jun 19 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
php遍历目录方法小结
Mar 10 PHP
php实现读取内存顺序号
Mar 29 PHP
PHP中Closure类的使用方法及详解
Oct 09 PHP
使用phpstorm和xdebug实现远程调试的方法
Dec 29 PHP
PHP实现的限制IP投票程序IP来源分析
May 04 PHP
Yii控制器中filter过滤器用法分析
Jul 15 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
Mar 14 PHP
php中时间函数date及常用的时间计算
May 12 PHP
php实现分页功能的详细实例方法
Sep 29 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 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变量可用字符
2014/05/28 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
10款实用的PHP开源工具
2015/10/23 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
jQuery 入门讲解1
2009/04/15 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
js 调用百度分享功能
2017/02/27 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
webpack DllPlugin xxx is not defined解决办法
2019/12/13 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
让Vue响应Map或Set的变化操作
2020/11/11 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
python使用pil生成图片验证码的方法
2015/05/08 Python
简析Python的闭包和装饰器
2016/02/26 Python
python计算列表内各元素的个数实例
2018/06/29 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
台湾最大银发乐活百货:乐龄网
2018/05/21 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
公司财务管理制度
2015/08/04 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
高中政治教学反思
2016/02/23 职场文书
Python数据分析之pandas读取数据
2021/06/02 Python
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android