基于dmclock分布式限流策略

2023-11-08

结合Cepb自身的特点, 较为合理的做法是将QoS机制直接嵌入每个OSD中来实现。

dmclock基本原理

mclock算法

mClock基本原理主要包含以下两个方面。

1)    为客户端设置一套QoS模板, 并在每个1/0请求中携带该QoS模板。
2)    服务器计算每个VO请求的时间标签, 并分成两个不同的阶段处理1/0请求:首先进入基于预留时间标签的Constraint-Based阶段, 处理所有预留时间标签满足条件e 的 I/0请求;然后进入基于上限和权重时间标签的Weight-Based阶段, 处理上限时间标签满足条件的I/0请求, 如果有多个客户端同时满足条件 , 则依据权重时间标签的大小决定处理顺序, 即权重时间标签较小的客户端I/0请求将被优先处理。

dmClock

        dmClock在mClock算法的基础上, 针对分布式系统的特点做了相应修改。 其在分布式系统的每个服务器上运行一个改进的mClock-server, 在客户端驻留改进的mClock-client以统计各个服务器完成的I/0请求个数,并据此调整服务器处理I/0请求的速率,以期在总体上达到客户端的QoS限制目标。

与mClock的差别主要体现在以下儿个方面:
        I)分布式系统的各个服务器在回应1/0请求时,返回其是在哪个阶段(phase)被处理完成的(即Constraint-Based阶段或Weight -Based阶段)。
        2)客户端统计各个服务器完成的I/0请求个数,在向某个服务器下发I/0请求时,携带自上次下发I/0请求之后,除目标服务器以外的其他服务器完成的1/0请求个数之和,即两次I/0下发之间的I/0请求完成数的增量,分别使用p(rho)和o(delta)表示以上两个阶段的增量。
        3)服务器计算I/0请求的时间标签时,不再根据步长均匀递增,而是使用p和6作为调整因子,从而动态调整各个服务器处理该客户端I/0的频度,使得总体处理速率满足QoS设置的约束条件。

I/0 请求入队

        客户端的I/0请求发送至服务器后,首先进入client对应的子队列排队, 同时服务器计算该请求的时间标签值, 然后 依据时间标签的大小调整其在二叉树中的位置。 这个过程称为I/0请求入队。
        具体来说, 如果某个client的I/0请求子队列中还存在未处理的请求, 则新的I/0请求直接挂入子队列尾部即可;如果client的子队列中不存在未处理的请求, 或者是一个全新的client的请求(此时需要先创建相应的子队列), 则除了将该I/0请求挂入其子队列外, 还需要将client加入时间标签二叉树,并依据时间标签的大小将其调整至正确的位置(该I/0请求是client子队列的第一个元素)。各时间标签二叉树的调整规则如下。

□    预留二叉树:以节点的队首元素的预留时间标签为依据,值较小的节点尽量调整至树的上层, 反之调整至下层, 最终根节点的预留时间标签最小。
□    上限二叉树: 用ready标记来表明每个1/0请求是否满足出队条件(上限时间标签是否小于或等于当前时间),默认为false, 满足条件的请求 ready标记为true, 并将相应的节点往下层调整;反之则往上层调整,标记相同的节点依据时间标签的大小 决定位置。
□    权重二叉树:同样以ready标记来区分请求,与上限二叉树不同的是, 队首元素的 ready标记为true的节点往上层调整,ready标记为false的节点往下层调整;标记相同的节点则 依据权重标签大小, 值较小的置于上层,反之置于下层。

I/0 请求出队

        I/0请求出队是指在client队列中选择适当的client, 从其1/0请求队列中出队一个元素的过程。 通过前面原理部分的阐述我们知道, 这个流程首先进入Constraint-Based阶段,取预留二叉树根节点的I/0请求队列, 判断其队首元素的预留时间标签是否满足出队条件(小于或等于当前时间)。         如果条件满足,则选取该根节点对应的client, 从其请求队列的队首出队一个元素;否则进入Weight-Based阶段, 从上限二叉树根节点开始,逐个判断队首元素的上限时间标签是否小千或等于当前时间, 并设置满足条件的请求的ready标记为true, 以决定其是否可参与随后的权重竞争。 所谓权重竞争, 是指对所有上限时间标签满足条件的client, 依据其队首元素的权重时间标签大小, 调整自身在权重标签二叉树中位置的过程, 最终位于权重标签二叉树根节点的client竞争胜出。 最后, 从竞争胜出者的1/0请求队列的队首出队一个请求。

         dmClock 的实现中支持突破上限 (allow limit break) 模式, 能在不满足上限或预留时间标签条件的情况下出队请求, 这在某些对 QoS 上限没有严格要求的场景下, 可以让服务器的VO资源充分得到利用。 不过大部分应用场景都有限制上限的要求, 因而本书主要阐述关闭了该模式的情况。

dbclock支持带宽限制

        dmClock是一种I/0调度算法, 它主要关注1/0个数而非I/0大小。但是I/0大小对于一个 I/0 请求的影响不容忽视。 例如, 两个 QoS 模板相同的客户端同时运行, 但客户端A 都是 1MB 的大块 I/0 读写, 而客户端B 都是 8kB 的小块 I/0 读写, 显然客户端 A 可能抢占客户端B 的 I/0 带宽资源。 为此, dmClock 以 8kB作为 I/0 块大小的基准, 依据磁盘的平均寻道时间和磁盘的传输带宽, 将大块 1/0 转换为 8kB 的倍数(计算公式请参考 mClock 算法论文)作为调整因子, 作用在该 I/0 请求的时间标签上, 以推迟该请求的处理时机, 从而减少由千 I/0 大小悬殊带来的不利影响。 然而, 这种做法并不完美,依然存在如下一些问题:

1) 无法实现对客户端 I/0 带宽的精确限制需求。 上述对 I/0 大小进行转换是一种定性的计量方式而且实际应用的 I/0 大小并不固定, 这样显然无法实现 I/0 带宽精确限制。

2) 影响原有 QoS 的准确性。 比如某个客户端的 QoS 上限设置为 100, 当其以较大的 I/0 块大小(例如 64kB) 读写时, 由于转换成 8kB 大小而调整了时间标签, 使得每个 I/0 请求都被延迟处理, 最终客户端得到的 I/0 上限必将低于 100, 这通常不是客户所期望的结果。

3) 在 dmClock 算法刚提出的时候, 机械硬盘是主流的存储介质, 而随着 SSD 等高速设备逐渐普及, 上述采用寻道时间的计算方式也不再适用。

基于上述种种因素, 目前 Ceph 中的 dmClock 并未实现这种方式, 也不支持对 I/0 带宽的限制。 然而, 作为一个完整的 控制策略, 带宽限制是一项必不可少的需求。特别是对块设备而言, 顺序 I/0 通常会被客户端的操作系统合并, 导致 QoS 的 IOPS 控制不准确气而 I/0 带宽的限制则不受此类合并操作的影响。

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

基于dmclock分布式限流策略 的相关文章

  • 遥感+python 1.3 大气校正

    遥感 python 1 3 大气校正 目录 遥感 python 1 3 大气校正 一 大气校正概念 1 吸收和散射改变大气中的电磁辐射 2 电磁能在大气中相互作用 二 大气校正的方法 1 基于辐射传输方程的大气校正 2 基于地面场数据或辅助
  • 生活之感悟

    有一些路 走下去 很累 可是 不走 会后悔 如果你的生活 处于低谷 那就大胆的向前走吧 因为不管你怎么走 你都是向上 即使没有人关注 也要努力成长 许多眼睛 都藏在你看不见的地方 压力不是有人比你努力 而是比你牛几倍的人 依然在努力 不是所
  • DNF单机版:注册失败的解决

    文章目录 注册的解决 DNF单击版本资源 linux下mysql配置文件my cnf最详细解释与目录 MyISAM 相关选项 INNODB 相关选项 安装启动 相关目录 全文约 9945 字 预计阅读时长 28分钟 注册的解决 个人遇到的问
  • 您的计算机已被.locked勒索病毒感染?恢复您的数据的方法在这里!

    导言 在数字化时代 威胁网络安全的恶意软件层出不穷 locked 勒索病毒作为其中的一员 给个人 企业和组织带来了严重的威胁 影响和心理压力 本文91数据恢复将深入分析 locked 勒索病毒的威胁性质 潜在影响以及由此产生的心理压力 一些

随机推荐

  • android 富文本编辑器_在vue中使用富文本编辑器vue-quill-editor

    一 前言 在一些博客 评论相关的位置 我们不会简单使用 HTML 中的 input 或者 textarea 等纯文本 需要用到富文本编辑器 即实现可以对文本进行加粗 变色 改变字体及大小等操作 本文借助的是vue quill editor
  • Linux怎么修改用户密码

    地址 linux修改用户密码 方法 步骤 首先 要用mobaxterm软件连接Linux系统 1 Linux怎么修改用户密码 首选 确认是用root用户登录系统的 输入命令 id 查看登录用户信息 2 Linux怎么修改用户密码 若修改ro
  • 【黑马-python进阶】---学习笔记(6)---系统性能监控+基于TCP的Web服务器

    1 系统性能定时监控 1 1 系统监控概述 用Python来编写脚本简化日常的运维工作是Python的一个重要用途 在Linux下 有许多系统命令可以时刻监控系统运行的状态 1 2 psutil psutil是python system a
  • IDEA Community(社区版)再谈之无奈之下还是去安装旗舰版

    不多说 直接上干货 前言 相信很多人 跟我一样 一开始 接触spark 肯定会首选IntelliJ IDEA的社区版Community IntelliJ IDEA号称当前Java开发效率最高的IDE工具 IntelliJ IDEA有两个版本
  • C++ Primer 学习笔记 第十一章 关联容器

    关联容器中的元素是按关键字来保存和访问的 与之相对的顺序容器是按元素在容器中的顺序来保存和访问的 关联容器支持高效的关键字查找和访问 两个主要的关联容器类型是map和set map中的元素是一些键 关键字 值对 键起到索引的作用 值则表示与
  • 高,低电平复位电路原理

    单片机复位电路的作用是 使单片机恢复到起始状态 让单片机的程序从头开始执行 运行时钟处于稳定状态 各种寄存器 端口处于初始化状态等等 目的是让单片机能够稳定 正确的从头开始执行程序 1 高电平上电复位 我们来看一下高电平上电复位 本质就是R
  • npm install常见报错及问题

    目录 一 ERESOLVE unable to resolve dependency tree 1 可能性一 镜像源无法访问 2 可能性二 npm版本过低或者过高 3 可能性三 node和npm版本不匹配 二 Error EACCES pe
  • python调用js

    1 正常调用 import execjs print execjs eval red yellow blue split ctx execjs compile function add x y return x y print ctx ca
  • Win7联想电脑休眠后唤醒不了原因和解决方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 电脑BIOS不支持造成的 查看方法 1 点击运行 2 输入cmd打开dos命令窗口 3 输入 powercfg a 4 查看是否支持休眠后唤醒 如图就不支持休眠以后唤醒
  • C语言实现链表(增、删、查、改、排序)

    链表是一种常用的数据结构 但是在c语言中没有这样的数据结构 只能自己实现 下面是用C语言实现了基本的链表操作 typedef struct STU int id int age char name 20 struct STU next ST
  • DVWA靶场01-系统命令执行漏洞利用及防护(Low/Medium/Hight)

    目录 01 Low 01 1 任意文件读取 01 2 小马实现Getshell 01 2 1 获取网站路径 01 2 2 写入一句话木马 01 2 3 连接一句话木马 01 3 设置后门 02 Medium 03 Hight 04 impo
  • 低代码平台实现原理

    整个可视化搭建系统分为三部分 分别是配置页 setting 视图页 view 和 json schema 配置页生成 json schema 视图页消费 json schema 基本原理 通过json schema保存用户所编辑的内容并保存
  • 《大话脑影像》之:趣谈散点图与相关系数

    最近不少读者对高大上的机器学习 动态脑网络 曲面形态指标共变网络感到爱不起 针对于此 我们特别推出一些基本的做脑功能的概念讲解 希望大家一步一步来 年轻人 不要动不动想一步登天 识得唔识得啊 那今天我们就谈谈这个相关系数 说起相关系数 从字
  • 如何将一个List按照某一个字段进行分组,并且得到一个顺序的Map

    首先 我们这里有一个对象 Data public class Pcr private String target 组 private String sample private Double cq private Double avgCq
  • 固定资产管理系统如何简化流程

    对于企业而言 管理固定资产是一项重要的任务 而如何有效地进行报销则是固定资产管理的关键环节 为了解决这个问题 许多企业引入了固定资产管理系统 那么 这个系统究竟能如何简化流程呢 固定资产管理系统可以实现无纸化报销 通过这个系统 员工可以在任
  • 《深度学习500问》,川大优秀毕业生的诚意之作

    前端工程师掌握这18招 就能在浏览器里玩转深度学习 基于知识图谱的人机对话系统 公开课笔记 来呀 AI喊你斗地主 美团大脑 知识图谱的建模方法及其应用 公开课笔记 60天 4位诺奖得主 他们将这样改造区块链 程序员的江湖 务必掌握这些黑话
  • ECMAScript 2022 正式发布

    ECMAScript 2022 现已获得 ECMA International的批准通过 ECMAScript 是标准化的 JavaScript 语言 于 1997 年发布了第一版 现已发展成为世界上使用最广泛的通用编程语言之一 本 Ecm
  • level design : in pursuit of better levels 原文以及中文译本

    level design in pursuit of better levels 关卡设计 追求更好的关卡 推特关卡设计大佬Alex TychoBolt 分享了一份他归纳的游戏关卡设计基础知识文档 Level Design In Pursu
  • 2022护网日记,护网工作内容、护网事件、告警流量分析

    作者主页 士别三日wyx 作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 2022护网日记 一 监控设备 二 工作内容 三 安全事件 1 失陷主机排查 2 后门网站修复 四 告警流量分析 1 信息泄露
  • 基于dmclock分布式限流策略

    结合Cepb自身的特点 较为合理的做法是将QoS机制直接嵌入每个OSD中来实现 dmclock基本原理 mclock算法 mClock基本原理主要包含以下两个方面 1 为客户端设置一套QoS模板 并在每个1 0请求中携带该QoS模板 2 服