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 用sock技术发送邮件的函数
Jul 21 PHP
延长phpmyadmin登录时间的方法
Feb 06 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
Nov 10 PHP
php连接mssql的一些相关经验及注意事项
Feb 05 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
Oct 13 PHP
详解PHP中的状态模式编程
Aug 11 PHP
php验证码的制作思路和实现方法
Nov 12 PHP
AES加解密在php接口请求过程中的应用示例
Oct 26 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 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实现根据词频生成tag云的方法
2015/04/17 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
2020/05/18 Javascript
Python二分查找详解
2015/09/13 Python
对pandas的层次索引与取值的新方法详解
2018/11/06 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
django框架auth模块用法实例详解
2019/12/10 Python
Django实现celery定时任务过程解析
2020/04/21 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
python切割图片的示例
2020/11/12 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
纯CSS3实现地球自转实现代码(图文教程附送源码)
2012/12/26 HTML / CSS
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
投标服务承诺书
2014/05/28 职场文书
模范教师材料大全
2014/12/16 职场文书
台风停课通知
2015/04/24 职场文书
2016高考感言
2015/08/01 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js