轮询调度算法(Round-Robin Scheduling)

2023-11-04

 轮询调度算法(Round-Robin Scheduling)  


毫无疑问,随着互联网、移动网络接入成本的降低,互联网正在日益深入地走入我们的生活,越来越成为人们获取信息的高效平台,ICP行业也顺势呈现出强劲的成长趋势,成为互联网迅猛发展形势下最大的受益者,也直接促成了从web1.0到web2.0以及社区、博客、视频等一系列互联网时代的更迭和运营模式的变动。

  但是随着各站点访问量和信息交流量的迅猛增长,如何使用最小的资源成本,提高网络的效率,最优化用户体验,已经成为网络管理人员不得不面对的挑战。

  从技术上讲,就是ICP行业面临的网络资源有效利用问题,也就是如何进行对网络的访问分流,以便能够快速响应用户反应,即:负载均衡。

  从这篇文章起,我们将讲述在负载均衡技术实现中的核心技术:负载均衡算法(算法)的原理及其实现,使大家对负载均衡底层技术有一个深刻的了解。这些算法是负载均衡设备中的核心实现基础。

  本篇文章先讲述轮询调度算法 (Round-Robin)及其在此基础上改进型的权重轮询算法 (Weighted Round-Robin)。

  轮询调度算法(Round-Robin Scheduling)

  轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。

  算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。

  轮询调度算法流程

  假设有一组服务器N台,S = {S1, S2, …, Sn},一个指示变量i表示上一次选择的服务器ID。变量i被初始化为N-1。其算法如下:

j = i;

do

{

j = (j + 1) mod n;

i = j;

return Si;

} while (j != i);

return NULL;

  这种算法的逻辑实现如图1所示:

  轮询调度实现逻辑图

                                             图1 轮询调度实现逻辑图示

  轮询调度算法假设所有服务器的处理性能都相同,不关心每台服务器的当前连接数和响应速度。当请求服务间隔时间变化比较大时,轮询调度算法容易导致服务器间的负载不平衡。

  所以此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。

权重轮询调度算法(Weighted Round-Robin Scheduling)

  上面所讲的轮询调度算法并没有考虑每台服务器的处理能力,在实际情况中,可能并不是这种情况。由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

  权重轮询调度算法流程

  假设有一组服务器S = {S0, S1, …, Sn-1},W(Si)表示服务器Si的权值,一个指示变量i表示上一次选择的服务器,指示变量cw表示当前调度的权值,max(S)表示集合S中所有服务器的最大权值,gcd(S)表示集合S中所有服务器权值的最大公约数。变量i初始化为-1,cw初始化为零。其算法如下:

while (true) {

  i = (i + 1) mod n;

  if (i == 0) {

     cw = cw - gcd(S);

     if (cw <= 0) {

       cw = max(S);

       if (cw == 0)

         return NULL;

     }

  }

  if (W(Si) >= cw)

    return Si;

}

  这种算法的逻辑实现如图2所示,图中我们假定四台服务器的处理能力为3:1:1:1。

  权重轮询调度实现逻辑图

                                        图2 权重轮询调度实现逻辑图示

  由于权重轮询调度算法考虑到了不同服务器的处理能力,所以这种均衡算法能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。所以,在实际应用中比较常见。

  总结

  轮询调度算法以及权重轮询调度算法的特点是实现起来比较简洁,并且实用。目前几乎所有的负载均衡设备均提供这种功能。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

轮询调度算法(Round-Robin Scheduling) 的相关文章

  • JS 库请求的常见 HTTP 标头是什么?

    使用JavaScript 框架原型 http www prototypejs org 我注意到 Ajax 请求通过一个名为X Requested With 其他 JavaScript 库 如 jQuery dojo 和 YUI 是否会向其
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何
  • 从 PCAP 嗅探重建数据

    我试图通过 libpcap 嗅探 HTTP 数据 并在处理 TCP 有效负载后获取所有 http 内容 标头 有效负载 根据我的讨论编写 http 嗅探器 或任何其他应用程序级嗅探器 https stackoverflow com ques
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • 自定义 HTTP 标头:命名约定

    我们的一些用户要求我们将与其帐户相关的数据包含在HTTP 标头我们向他们发送的请求 甚至是他们从我们的 API 获得的响应 添加自定义 HTTP 标头的一般约定是什么 naming format etc 另外 请随意发布您在网络上偶然发现的
  • Chrome/Firefox 在后台发送两个 POST,间隔恰好 5 秒,仅调用一次来获取 Nodejs 8.0.0 服务器

    注意 这不是飞行前选项 也不是网站图标或其他类似内容 实际上是 2 个帖子 下面有一个屏幕截图可以更清楚地显示这一点 我的规格 版本 macOS 塞拉利昂版本 10 12 3 Chrome 版本 61 0 3128 0 官方版本 开发版 6
  • 为什么我的 Github 托管网站响应 HTTP 302 而不是 200?

    我拥有该域名penkov id au http penkov id au 我主持一个blog http michael penkov id au blog 2014 01 02 reinventing the wheel html usin
  • 尝试使用 php 发送 POST 请求,无论我做什么,我都会收到“HTTP ERROR 500”

    为了发出 HTTP 请求 有人建议我尝试使用 PHP 并给了我一段代码 url https example com dashboard api data array to gt PHONE NUMBER from gt SENDER ID
  • 适用于 Objective-C / iPhone 的良好 HTTP 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 UPDATE 这个问题显然已经过时了 参见日期 我建议只使用现代 iOS7 功能 例如 NSURLSession 我想 这个问题是为了历史
  • android httprequest java.net.UnknownHostException

    我想用android发出http请求 是使用这个 void testHTTP HttpClient httpClient new DefaultHttpClient HttpUriRequest request new HttpPost h
  • 如何在c++中使用libcurl发送POST请求并接收它?

    我正在使用 c libcurl 向网页发送 POST 请求 但我正在努力测试它 使用的代码是 include
  • 无效数据的 REST 响应代码

    如果出现以下情况 应将什么响应代码传递给客户端 用户注册时传递了无效数据 例如电子邮件格式错误 用户名 电子邮件已存在 我选择了403 我还发现了以下我觉得可以用的 维基百科 412 前提条件失败 服务器不满足请求者要求的先决条件之一 提出
  • Apache HttpClient TCP Keep-Alive(套接字保持活动)

    我的 http 请求需要太多时间才能被服务器处理 大约 5 分钟 由于连接闲置 5 分钟 代理服务器将关闭连接 我正在尝试在 Apache DefaultHttpClient 中使用 TCP Keep Alive 来使连接长时间处于活动状态
  • 使用 Angularjs,$http 在 Microsoft Edge 中发布返回响应错误

    好吧 当我开发一个管理页面进行测试时 Microsoft Edge 中出现了一个奇怪的问题 这是从loginCtrl js服务器获取响应的部分源代码 http method POST url Define apiUrl admin logi
  • 不加载隐藏图像

    我的网站上有一堆隐藏图像 它们的容器 DIV 具有 style display none 根据用户的操作 某些图像可能会通过 JavaScript 显示 问题是我的所有图像都是在打开页面时加载的 我想通过仅加载最终可见的图像来减轻服务器的压
  • 防止表单重新提交

    第一页包含一个 HTML 表单 第二页 处理提交的数据的代码 第一页中的表格已提交 浏览器被重定向到第二页 第二页处理提交的数据 此时 如果刷新第二页 则会弹出 确认表单重新提交 警报 这可以预防吗 人们过去常采取两种方法 方法一 使用 A
  • Spring RestTemplate - 带有请求正文的http GET [重复]

    这个问题在这里已经有答案了 可能的重复 带请求正文的 HTTP GET https stackoverflow com questions 978061 http get with request body 我在这里读过一些不提倡通过 HT
  • 如何找出数据包的HTTP头长度?

    我知道如何手动执行此操作 通过查看十六进制转储 我怎样才能自动获得相同的信息 我必须使用 API 吗 我有wireshark 和Microsoft 网络监视器 这可以通过简单地实现Lua解析器 http wiki wireshark org
  • Crystal lang如何从http获取二进制文件

    In Ruby require open uri download open http example com download pdf IO copy stream download my file pdf 如何在水晶中做同样的事情 我们
  • Response.Redirect 并不总是重定向

    我们在一个工作不一致的页面上有一个简单的 Response Redirect IIS 6 0 大多数情况下 它会正确重定向 但我们收到一些用户抱怨 他们没有重定向 而是看到 302 对象移至此处 页面 该页面显示标题信息以及正确的位置 如果

随机推荐

  • I3Net: Implicit Instance-Invariant Network for Adapting One-Stage Object Detectors

    摘要 最近的两阶段跨域检测工作广泛探索了局部特征模式 以获得更准确的适配结果 这些方法在很大程度上依赖于区域建议机制和基于ROI的实例级特性来设计关于前景目标的细粒度特性对齐模块 然而 对于一阶段检测检测器 在检测流程中很难甚至不可能获得显
  • 【Scapy】使用Python的Scapy包对Wirshark捕获的Http数据包进行解析(格式输出)

    通过Anaconda安装scapy pip install scapy http Python源码如下 实现功能 1 读取本地pcap文件 文件内容为Wirshark捕获的数据二进制流 2 通过scapy将二进制数据流解析为有结构的pake
  • 贪心算法解决集合覆盖问题

    问题描述 假设存在下面需要付费的广播台 以及广播台需要覆盖的地区 如何选择最少的广播台 让所有的地区都可以接受到信号 广播台 覆盖地区 k1 北京 上海 天津 k2 广州 北京 深圳 k3 成都 上海 杭州 k4 上海 天津 k5 杭州 大
  • python折线图设置标题

    在 Python 中使用 Matplotlib 绘制折线图时 可以使用 title 函数来设置图表的标题 例如 import matplotlib pyplot as plt 绘制折线图 plt plot x y 设置标题 plt titl
  • Android系统目录树建立过程

    一 文件系统类型 了解Android系统目录树的建立之前 有必要了解文件系统类型 Linux内核中将文件系统类型抽象为结构体struct file system type 其中name为文件系统名称 例如ext4 f2fs rootfs等
  • 学习笔记-接口测试(postman、jmeter)

    一 什么是接口测试 通常做的接口测试指的是系统对外的接口 比如你需要从别的系统来获取到或者同步资源与信息 他们会提供给你一个写好的接口方法供你调用 比如常用的app 用户同步这些在处理数据的时候需要通过接口进行调用 webService接口
  • 让HR眼前一亮:30个APP项目软件测试经验,点燃你的简历

    在求职过程中 我们都希望自己的简历能够吸引面试官的眼球 从而获得更多的面试机会 作为一名软件测试人员 丰富的实战经验是让自己脱颖而出的关键之一 在我多年从事APP项目软件测试的工作中 我积累了大量的实践经验 并成功将这些经验写入简历中 让自
  • 剑指 Offer 05. 替换空格

    题目链接 05 替换空格 思路分析 遍历判断即可 class Solution public string replaceSpace string s std ios sync with stdio false string tmp for
  • 谈谈ChatGPT对中国教育的影响与挑战,我们该怎么办?

    ChatGPT对中国教育的影响 1 个性化教学 通过分析学生的学习习惯和问题 AI可以为每个学生提供个性化的学习路径 例如 如果一个学生在数学上表现出困难 AI可以提供更多的数学练习和教学资源 2 在线教育 AI可以作为在线课程的一部分提供
  • 基于docker搭建ngrok私服

    经常开发微信的同学们 肯定会经常用到内网穿透 大部分人选择网上寻找各种现成的 比如ngrok官网 natapp sunny ngrok或者花生壳之类的 但是世界上没有免费的午餐 要不就是收费 要不就是免费但是偶尔会出现连接失败的问题 当然大
  • 第四届蓝桥杯国赛C++B组 格子刷油漆

    标题 格子刷油漆 X国的一段古城墙的顶端可以看成 2 N个格子组成的矩形 如图1所示 现需要把这些格子刷上保护漆 你可以从任意一个格子刷起 刷完一格 可以移动到和它相邻的格子 对角相邻也算数 但不能移动到较远的格子 因为油漆未干不能踩 比如
  • 模拟电路设计(3)--- 三极管之复合组态

    整理了一些电子工程类的资料 分享给大家 目前有模拟电路 单片机 PCB设计 FPGA EMC 物联网 Linux相关学习资料 还有针对大学生的资料包 后续还会有更多资料分享给大家 助力大家学习 成就梦想 博主福利 免费获取电子工程类学习资料
  • java超详细小程序对接微信支付(一),看完不会你打我

    1 微信支付接入前准备 这些其实和我们开发 没什么关系 直接找公司拿即可 商户已有微信小程序 用户通过好友分享或扫描二维码在微信内打开小程序时 可以调用微信支付完成下单购买的流程 注意 小程序不能通过拉起H5页面做jsapi支付 小程序内只
  • [2019计算机视觉]——贪心学院 学习笔记 【实验】2.1 使用逻辑函数 完成对购车的预测

    文章目录 问题引入 数据格式 解决方法 1 使用sklearn中的线性模型 2 创建逻辑回归对象 3 训练回归模型 4 使用训练好的模型进行预测 5 取出 theta 值 6 验证
  • vue3更换浏览器地址栏的 favicon.ico图标

    介绍 在vue 项目中 修改浏览器地址栏中的 icon 图标 默认是在根目录 index html中进行修改的 但是在 vue3以上版本中 直接替换这个 favicon ico图标是无法生效的 解决方式 找到 index html根文件 找
  • libcurl教程

    最近一段时间无事 等待入职 以前把libcurl的easy Interface 的那些函数用法手册翻译了 这次也把 libcurl tutorial翻译一下 多有不足 请多指教 原文是网址是 http curl haxx se libcur
  • [Java基础]ArrayList的contains方法,你用对了吗?

    最近在代码Review中发现 有同学错用了数组的contains方法 示例如下 public class ListItem private int id private String name public ListItem int id
  • for循环多个条件

  • 百度搜索中url的参数解析

    转载请注明 藏羚骸的博客 百度搜索中url的参数解析 小伙伴们在写爬虫程序的时候 可能会用到部分参数使用 这里整理了 百度搜索中url的参数解析 免费查询快递物流 wd 查询的关键词 pn 已显示的结果条数 即当前页从pn条记录开始显示 该
  • 轮询调度算法(Round-Robin Scheduling)

    轮询调度算法 Round Robin Scheduling 毫无疑问 随着互联网 移动网络接入成本的降低 互联网正在日益深入地走入我们的生活 越来越成为人们获取信息的高效平台 ICP行业也顺势呈现出强劲的成长趋势 成为互联网迅猛发展形势下最