指数退避和抖动

目录

引入 OCC

添加退避机制

添加抖动机制

小结


  • 引入 OCC

  • 乐观并发控制(Optimistic Concurrency Control,OCC)是一种既能保证多个写入者安全地修改单个对象又能避免丢失写入的古老方法
  • OCC具有三个优点:只要底层存储可用,它总能取得进展;易于理解,易于实现
  • DynamoDB 的条件写入使OCC成为DynamoDB 用户的自然选择,并且DynamoDBMapper 客户端原生支持OCC
  • 尽管OCC可以保证有进展,但在高争用情况下它的表现仍然很差
  • 所谓高争用(是指在多个线程或进程同时访问或修改共享资源时的情况,这可能导致竞争条件和性能问题;它与"高并发"有一定的关联,但并不完全相同("高并发"强调的是系统同时处理多个并发请求的能力,通常表示系统在单位时间内可以处理的并发请求数量非常大;而"高争用"则强调的是在共享资源上的竞争程度,即多个并发操作对同一个资源的竞争情况)(因此,"高争用"更专注于资源竞争的概念,而"高并发"更关注系统整体的并发处理能力;当存在高争用情况时,可能会出现性能瓶颈和竞争条件,需要采取合适的并发控制和优化策略来解决这些问题))
  • 这些争用情况中最简单的是当大量客户端同时启动并尝试更新同一数据库行时
  • 由于每轮保证有一个客户端成功,因此完成所有更新所需的时间与争用程度呈线性增长
  • 在本文的图表中,使用了一个小型模拟器来模拟 OCC 在带有延迟(以及延迟方差)的网络中对远程数据库的行为
  • 在这个模拟中,网络引入了平均 10ms 的延迟和 4ms 的方差
  • 第一个模拟展示了随着争用程度增加,完成时间如何呈线性增长
  • 这种线性增长是因为每轮只有一个客户端成功,所以需要N轮才能让所有N个客户端都成功

  • 不幸的是,这还不是全部
  • 当有N个客户端竞争时,系统所完成的总工作量将以N的平方增加

  • 添加退避机制

  • 这里的问题是有 N 个客户端在第一轮中竞争,N-1 个客户端在第二轮中竞争,依次类推
  • 让每个客户端在每一轮中都竞争是浪费的
  • 减缓客户端的速度可能有所帮助,而经典的减缓客户端的速度的方法是采用有上限的指数退避(限制指数退避)
  • 有上限的指数退避意味着客户端在每次尝试后都会将退避时间乘以一个常数,直到达到某个最大值
  • 在我们的例子中,每次尝试失败后,客户端会睡眠一段时间:

  • 重新运行模拟显示,退避机制在一定程度上有所帮助,但并不能解决问题;客户端的工作量仅有轻微减少

  • 查看问题的最佳方法是查看指数退避调用发生的时间

  • 很明显,指数退避起到了作用,因为调用发生的频率越来越低
  • 然而,问题也显而易见:仍然存在调用的集群
  • 我们并没有减少每轮竞争的客户端数量,只是引入了一些没有任何客户端竞争的时间段
  • 尽管网络延迟的自然变化导致了一些分散,但竞争并没有得到很大程度的减少
  • 添加抖动机制

  • 解决方案并不是移除退避机制,而是添加抖动机制
  • 最初,抖动似乎是一个违反直觉的想法:试图通过添加随机性来提高系统的性能
  • 然而,上述时间序列提供了使用抖动的充分理由——我们希望将峰值分散到相对恒定的速率
  • 添加抖动只需要对睡眠函数进行微小修改即可

  • 那个时间序列看起来好很多
  • 间隔不再存在,除了最初的峰值外,呼叫的速率大致保持恒定
  • 这对于总呼叫次数也产生了很好的效果

  • 在有100个竞争客户端的情况下,我们将呼叫次数减少了一半以上
  • 与不使用抖动的指数退避相比,我们还大幅改善了完成时间

  • 有几种方法可以实现这些定时退避循环
  • 我们将上述算法称为“完全抖动”,并考虑两种替代方案
  • 第一种替代方案是“相等抖动”,它总是将一些退避和抖动保持较小的量:

  • 这种方法的原理是,它防止了非常短的延迟,始终保留一部分退避的减速效果
  • 第二种替代方案是“去关联抖动”,与“完全抖动”类似,但是我们还会根据上一个随机值来增加最大抖动范围

  • 小结

  • 在计算机网络中,指数退避和抖动是一种常见的错误恢复和重试策略
  • 当发生网络传输错误或拥塞时,指数退避和抖动策略可以帮助减少冲突和重试的负载,提高系统的稳定性和效率
  • 指数退避是指在发生错误后(竞争失败后),等待一段时间然后重试的操作,并且在每次重试时增加等待时间的策略
  • 具体来说,等待时间是根据指数函数逐渐增加的,通常是当前重试次数的指数幂
  • 这样做可以在网络拥塞的情况下,给予网络更多时间来恢复,并避免短时间内的连续冲突
  • 抖动是指在等待时间的基础上引入一个随机因素,使得重试的时间间隔稍微有所变化
  • 这样做的目的是避免在网络中出现周期性的重试,避免网络拥塞或错误引起的冲突
  • 通过结合指数退避和抖动策略,可以在网络中更有效地处理错误和重试操作,提高系统的可靠性和性能
  • 哪种方法最好?
  • 从客户端工作量的角度来看,无论是“完全抖动”还是“相等抖动”,调用次数都大致相同,而“去关联抖动”的调用次数更高
  • 相对于无抖动方法,这两种方法都大大减少了工作量

  • 没有抖动的指数退避方法显然是失败者
  • 它不仅需要更多的工作量,而且比带有抖动的方法需要更长的时间
  • 实际上,它需要更多的时间,我们不得不将其从图表中删除,以便更好地比较其他方法

  • 在带有抖动的方法中,“相等抖动”是失败者
  • 它的工作量略高于“完全抖动”,而且耗时更长
  • 而在“去关联抖动”和“完全抖动”之间的选择则不那么明确
  • “完全抖动”方法的工作量更少,但需要稍微更长的时间
  • 但两种方法都大大减少了客户端工作量和服务器负载
  • 值得注意的是,这些方法都没有从根本上改变要完成的工作的N2特性,但在适度的竞争水平下,它们显著减少了工作量
  • 使用抖动的指数退避的实施复杂度回报是巨大的,因此应该被视为远程客户端的标准方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/206432.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 常用命令集

1、根据端口查询进程号: netstat -nlp | grep 10050 或者使用 lsof -i:10050 2、查询所有服务进程号:top 3、根据进程号查询服务路径 ll /proc/28145/cwd 4、同步网络时间 yum install -y ntpdate ntpdate ntp.aliyun.com 设置定时任务 更新时间 * * * *…

Day46力扣打卡

最近一直在做以前的题,刷题量都没有怎么增长,感觉自己算法一直不太行,但也只能菜就多练了。 打卡记录 由子序列构造的最长回文串的长度(区间DP) 链接 第二次刷这道题,相比上回思路来的很快,但…

VS Code C++可视化调试配置Natvis,查看Qt、STL变量内容

VS Code C可视化调试配置Natvis 使用GlobalVisualizersDirectory Windows下 C:\Users\YourName\.vscode\extensions\ms-vscode.cpptools-1.18.5-win32-x64\debugAdapters\vsdbg\bin\Visualizers\Linux下 ~\.vscode\extensions\ms-vscode.cpptools-1.18.5-win32-x64\debugAd…

PCB布线为什么不能走直角或锐角-笔记

PCB布线为什么不能走直角或锐角-笔记 摘要一.PCB走线在直角转弯的地方,信号前后部分相互影响这几个理由我们来一一分析一下传输线的直角带来的寄生电容从阻抗的角度来看直角的尖角产生放电或者电磁辐射走线直角的工艺问题 摘要 有一定熟悉画过PCB板的人或者PCB教学…

Spring三级缓存处理循环依赖的过程

Spring三级缓存 Spring三级缓存是什么? 一级缓存:单例池。存放的是完整的Bean对象。经过完整的生命周期。二级缓存:存放需要提前暴露的Bean对象。也就不完整的Bean对象。需要提前暴露就是指,可能会被循环依赖。(这里可能需要用代…

中国毫米波雷达产业分析4——毫米波雷达企业介绍

一、矽典微 (一)公司简介 矽典微致力于实现射频技术的智能化,专注于研发高性能无线技术相关芯片,产品广泛适用于毫米波传感器、下一代移动通信、卫星通信等无线领域。 整合自身在芯片、系统、软件、算法等领域的专业能力&#xf…

c++面试题

1.static的使用 1)修饰局部变量:在函数内部使用static修饰局部变量,会使它成为静态局部变量。静态局部变量只会被初始化一次,且只有在第一次调用该函数时才会被初始化,之后每次调用该函数时都会保留上一次的值.从原来…

java-Swing界面简析

一、简析: 调用java提供的 java.swing包下的各种类可以实现界面中的各种组件(比如输入框、密码框按钮、单选框、复选框等) 二、java.swing包的关键类: 顶层容器:Jframe(窗口) 中间容器:Jpanel(面板) 基本控件: I…

倒计时(JS计时器)

<script>function countDown() {document.body.innerHTML ;//清空页面内容var nowTimer new Date(); //现在时间的毫秒数var valueTimer new Date("2024-1-1 12:00"); //用户输入年份倒计时时间毫秒数var timer (valueTimer - nowTimer) / 1000; //倒计时秒…

Python函数装饰器的用法

Python函数装饰器的用法 文章目录 1.装饰器的优点2. 使用装饰器前3. 使用装饰器后 装饰器是Python中一种强大的语法特性&#xff0c;它允许在不修改已有代码的情况下&#xff0c;对函数或类进行增强或修改。装饰器的本质是一个函数&#xff0c;它接受一个函数作为参数&#xf…

SQL Sever 基础知识 - 数据排序

SQL Sever 基础知识 - 二 、数据排序 二 、对数据进行排序第1节 ORDER BY 子句简介第2节 ORDER BY 子句示例2.1 按一列升序对结果集进行排序2.2 按一列降序对结果集进行排序2.3 按多列对结果集排序2.4 按多列对结果集不同排序2.5 按不在选择列表中的列对结果集进行排序2.6 按表…

koa2项目中封装log4js日志输出

1.日志输出到控制台 npm i log4js -D 封装log4js文件&#xff1a; 注意&#xff1a;每次都要重新获取log4js.getLogger(debug)级别才能生效 const log4js require("log4js");const levels {trace: log4js.levels.TRACE,debug: log4js.levels.DEBUG,info: log4js.…

Youtube如何做SEO关键词挖掘

做好Youtube的SEO优化&#xff0c;可以使我们的视频得到更多的展示&#xff0c;更多的点击和观看&#xff0c;就能获得更多的粉丝和流量。一方面通过视频做引流到目标网站进行转化赚钱&#xff0c;另一方面可以通过涨粉接youtube广告赚钱。要做seo最关键的一步在于关键词的挖掘…

IC设计简单概述

IC设计行业是一个高科技行业&#xff0c;有着复杂而细致的分工&#xff0c;严格的流程规范、多种不同类型的EDA工具。下面简单概述以下几个方面。 IC设计公司的分类 IC设计公司有多种分类方法。若按有无芯片生产能力来分&#xff0c;可以分为兼具设计与生产能力&#xff08;I…

(Ant X6)子组件里的流程图画布无法显示

(Ant X6)子组件里的流程图画布无法显示 问题背景&#xff1a;侧导航页面都是子组件,建模页面的画布无法显示 解决前&#xff1a; 解决后&#xff1a; 解决思路&#xff1a;点击建模菜单时再次加载对应组件 在 Vue 中&#xff0c;每个组件都有一个唯一的 key 属性。当组件的 ke…

二叉堆的实现

文章目录 堆堆的概念及性质 二叉堆的实现Heap.hHeap.c堆的初始化堆的销毁向堆中插入数据删除堆中的数据找堆顶元素判断堆是否为空Heap.c完整代码 test.c 堆 堆的概念及性质 二叉堆的实现 Heap.h #pragma once #include<stdio.h> #include<stdlib.h> #include<…

SSM校园学习助手系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 校园学习助手系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模…

HTML—列表、表格、表单

1、列表 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表 1.1 无序列表 作用&#xff1a;布局排列整齐的不需要规定顺序的区域 标签&#xff1a;ul 嵌套 li&#xff0c;ul 是无序列表&#xff0c;li 是列表条目 注意事项&#…

Microsoft Remote Desktop高效、安全、稳定的远程办公解决方案

在今天的数字化时代&#xff0c;Remote Desktop远程办公已成为许多人的日常生活。无论你是因为工作需要&#xff0c;还是因为在家中需要访问公司服务器&#xff0c;微软远程连接软件都是一个理想的选择。 微软远程连接软件Remote Desktop是一款高效、安全、稳定的远程办公解决…

(动手学习深度学习)第13章 实战kaggle竞赛:树叶分类

文章目录 实战kaggle比赛&#xff1a;树叶分类1. 导入相关库2. 查看数据格式3. 制作数据集4. 数据可视化5. 定义网络模型6. 定义超参数7. 训练模型8. 测试并提交文件 竞赛技术总结1. 技术分析2. 数据方面模型方面3. AutoGluon4. 总结 实战kaggle比赛&#xff1a;树叶分类 kagg…
最新文章