指数退避和抖动

news2024/11/15 11:19:39

目录

引入 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.coloradmin.cn/o/1272462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows配置服务开机自启和保活

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、下载WinSW?二、使用步骤1.解压2.配置3.安装服务4.服务启停5.服务卸载6.开机自启7.保活 总结 前言 写了一个程序或者是exe,或者是ba…

压缩包批量处理工具中文免费版1.7

软件功能: 压缩文件批量处理工具中文免费版是一款可以帮助用户来进行批量修改压缩文件的软件,支持的压缩格式有rar/zip/7z/tar 1、可批量向压缩包添加文件(包括url快捷方式) 2、可批量从压缩包删除文件(支持删除二级目…

mysql中字符串截取与拆分

按分隔符把字符串拆成多行 引言截取字符串一、left(str,length)二、right(str,length)三、截取特定长度的字符串四、按分隔符截取 分割字符串一、分割成多列二、分割成多行 总结 引言 截取和拆分字符串在编程生涯中是普遍存在的,在sql中也不例外,下面就…

Linux常用命令----rmdir命令

文章目录 1. 简介2. 参数含义3. 常见用法及实例4. 注意事项5. 结语 1. 简介 rmdir命令在Linux系统中用于删除空的目录。它是一个基本的命令行工具,用于维护文件系统的组织结构。与rm命令不同,rmdir只能删除空目录,这提供了一种安全机制&…

小米的算法部署岗对新手是真的友好

大家好啊,我是董董灿。 自从开始写一些AI行业的岗位介绍,就养成了一个习惯,在上下班的路上经常就会打开某聘瞧一瞧。 导致之前一年不看的某聘认为我要看机会换工作,疯狂给我推猎头,然后电话就进来了。 不堪骚扰的我…

全网最牛最全面的Jmeter接口测试:jmeter_逻辑控制器_事务控制器

事务: 性能测试中,事务指的是从端到端,一个完整的操作过程,比如一次登录、一次 筛选条件查询,一次支付等;技术上讲:事务就是由1个或多个请求组成的 事务控制器 事务控制器类似简单控制器&…

【数据结构】源码角度剖析PriorityQueue

目录 认识 Queue 认识 PriorityQueue PriorityQueue为什么要用二叉堆? PriorityQueue构造方法源码分析 PriorityQueue 的属性 构造方法 JDK1.8传入不可比较的对象 JDK17传入不可比较的对象 传入带有Collection接口的对象 instanceof 关键字 Offer方法分析…

finebi 新手入门案例

finebi 新手入门案例 连锁超市销售数据分析 步骤: 准备公共数据新建分析主题处理数据在数据中分析在图形中分析数据大屏 准备公共数据 点击公共数据 点击新建文件夹 修改文件夹名称 上传数据 鼠标悬停在文件夹上,右侧出现 鼠标悬停在文件夹上&#x…

matplotlib与opencv图像读取与显示的问题

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 最近在用opencv和matplotlib展示图片,但是遇到了一些问题,这里展开说说 首先需要明确的是,opencv和matplotlib读取图片都是通道在最后,而前者默认可见光图像是BGR,后者是RGB.此外还有PIL以及imageio等读取图像的工具…

python——第十五天

面向对象和面向对象编程 面向对象编程: C语言是一门面向过程的编程语言!!! 面向对象的编程思想 就是分门别类的一种能力 面向对象的概念 类: 对一类事物的统称 对象: 一类事物中的具体案例 面向对象的…

【论文阅读】1 SkyChain:一个深度强化学习的动态区块链分片系统

SkyChain 一、文献简介二、引言及重要信息2.1 研究背景2.2 研究目的和意义2.3 文献的创新点 三、研究内容3.1模型3.2自适应分类账协议3.2.1状态块创建3.2.2合并过程3.2.3拆分过程 3.3评价框架3.3.1性能3.3.1.1共识延迟3.3.1.2重新分片延迟3.3.1.3处理事务数3.3.1.4 约束 3.3.2 …

PromptRank:使用Prompt进行无监督关键词提取

论文题目:PromptRank: Unsupervised Keyphrase Extraction Using Prompt   论文日期:2023/05/15(ACL 2023)   论文地址:https://arxiv.org/abs/2305.04490   GitHub地址:https://github.com/HLT-NLP/PromptRank 文章目录 Ab…

【laBVIEW学习】4.声音播放,自定义图标,滚动条设置

一。声音播放(报错,未实现) 1.报错4810 2.解决方法: 暂时未解决。 二。图片修改 1.目标:灯泡---》自定义灯泡 2.步骤: 1.右键点击--》自定义运行 表示可以制作自定义类型 2.右键--》打开自定义类型 这样就…

文件管理技巧大公开,轻松批量归类相同名称文件到指定文件夹!

在日常生活和工作中,我们经常需要处理大量的文件,包括文档、图片、音频、视频等。然而,随着时间的推移,文件数量不断增加,管理起来也变得越来越困难。为了更高效地整理和分类这些文件,今天我们将向大家介绍…

MySQL处理并发访问和高负载的关键技术和策略

我深知在数据库管理中处理并发访问和高负载的重要性。在这篇文章中,我将探讨MySQL处理并发访问和高负载的关键技术和策略,以帮助读者更好地优化数据库性能。 图片来源:MySQL处理并发访问和高负载的关键技术和策略 MySQL数据库在处理并发访问…

电子学会C/C++编程等级考试2023年03月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:和数(2023.3) 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。 时间限制:10000 内存限制:65536输入 共两行,第一行是数列中…

基于java的职工便利系统【大学期末结课作业】

需求分析 背景和目标 基于现在的各类企业的职工在企业日常工作及生活中所需要的各类需求,通过使用Java语言开发一个职工便利系统,以方便职工完成公司内的日常事务,提高工作效率。 设计目的: 设计职工便利系统的主要目的是为了提升职工的工作…

C#测试开源运行耗时库MethodTimer.Fody

微信公众号“dotNET跨平台”的文章《一个监控C#方法运行耗时开源库》介绍了支持测量方法耗时的包MethodTimer.Fody,使用方便,还可以自定义输出信息格式。本文学习并测试MethodTimer.Fody包的使用方式。   新建控制台程序,通过Nuget包管理器…

文心一言 VS 讯飞星火 VS chatgpt (146)-- 算法导论12.2 1题

一、用go语言,假设一棵二叉搜索树中的结点在1到 1000 之间,现在想要查找数值为 363 的结点。下面序列中哪个不是查找过的序列? a.2,252,401,398,330,344,397,363。 b.9…

unity3d模型中缺失animation

在 模型的Rig-Animationtype 设置成Legacy https://tieba.baidu.com/p/2293580178