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+mysql开源XNA 聚合程序发布 下载
Jul 13 PHP
php 破解防盗链图片函数
Dec 09 PHP
PHP 简单数组排序实现代码
Aug 05 PHP
PHP学习之整理字符串
Apr 17 PHP
php调用MySQL存储过程的方法集合(推荐)
Jul 03 PHP
浅析Mysql 数据回滚错误的解决方法
Aug 05 PHP
PHP中ob_start函数的使用说明
Nov 11 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
Apr 25 PHP
php实现微信发红包
Dec 05 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
Jan 09 PHP
php 使用redis锁限制并发访问类示例
Nov 02 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 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使用ODBC连接数据库的方法
2015/07/18 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
TNC vs IO BO3 第一场2.13
2021/03/10 DOTA
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
jQuery判断密码强度实现思路及代码
2013/04/24 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
2017/07/20 jQuery
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
[56:56]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
使用python装饰器验证配置文件示例
2014/02/24 Python
python基于Tkinter库实现简单文本编辑器实例
2015/05/05 Python
python字符串连接方法分析
2016/04/12 Python
Python函数的周期性执行实现方法
2016/08/13 Python
Python使用装饰器进行django开发实例代码
2018/02/06 Python
一文带你了解Python中的字符串是什么
2018/11/20 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
python3注册全局热键的实现
2020/03/22 Python
Python: glob匹配文件的操作
2020/12/11 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
建筑工程技术应届生自荐信
2013/09/27 职场文书
房地产财务管理制度
2014/02/02 职场文书
2015年端午节活动方案
2015/05/05 职场文书
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python