软件设计中你考虑过重试了吗?

这篇具有很好参考价值的文章主要介绍了软件设计中你考虑过重试了吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

你好,我是刘牌!

人生做事情失败了,拍拍裤子,站起来再试试,那么为啥软件中请求失败了为何就放弃了,而不是不再试试呢!

前言

今天分享一下重试操作,我们知道网络是不可靠的,那么在进行网络请求时,难免会出现请求失败,连接失败等情况,为了保证软件的稳定性和良好的体验,很多时候我们不应该将程序内部出现的问题都抛出给用户,而是应该尽最大可能将软件内部不可抗拒的问题在程序内部处理掉,那么很多时候我们会采取重试操作。

背景和问题

程序产生网络故障或者其他一些故障是无法避免的,可能因为一些原因导致某些服务在短时间或者一段时间断连,可能是服务器负载过高而导致的,也可能是数据库导致故障从而影响服务,也可能是GC过于频繁而导致服务很不稳定等等,总之,导致服务不可用的因素很多很多。

对于程序的出错,如果不属于业务上的异常,不应该抛给用户,比如抛出“无法连接远程服务”,“服务器负载过高”,“数据库异常”这类异常给用户实际上没有任何意义,反而会影响用户用户体验,因为用户并不关心这些,他们也读不懂这些领域词汇,所以应该去避免这些问题。

解决方案

程序发生异常是无法避免的,我们只有采取一些补救措施,在最大程度上提高程序的稳定性和用户体验,对于程序产生的问题,有一些可能只是瞬时的,系统能够很快恢复,有一些需要一定的时间,而有一些需要介入人工,所以需要花费的时间更多,那么就需要根据不同的情况来处理,下面对其进行分类。

取消

当系统中的异常是暂时无法处理的,这时候就应该直接取消任务,因为如果不取消,而是让用户一直等待,那么就会导致用户的操作无法进行下一步,而是一直等待,用户体验就会变得很差,这时候应该给用户友好的提示,提醒他们稍后再进行办理,浪费别人的时间等于谋财害命。

重试

如果请求因为网络原因或者服务短暂的不可用,这种故障时间很短,很快就能恢复,比如一些服务是多实例部署,刚好请求到的那个服务出现网络故障而没能请求成功,如果我们直接返回异常,那么肯定不合适,因为其他服务实例还能提供服务,所以应该对请求进行重试,重试后可能请求到了其他正常的服务,即使请求到了之前的服务,那么可能它已经恢复好了,能够正常提供服务了,这里重试是没有时间间隔的,是不间断地请求,直到请求成功,这种适用于服务很够很快恢复的场景。

间隔重试

间隔重试就是不会一下进行重试,而是隔一个时间段再进行重试,比如一些服务因为过于繁忙导致负载过高而暂时对外提供服务,那么这时候如果不断发起重试,只会导致服务负载更高,我们应该隔个时间段再进行重试,让服务处理堆积的任务,等服务负载降下来再重试,这个时间间隔需要我们进行考量,按照合适的值去设置,比如1s,这完全根据实际场景去衡量。

上面对三种方案进行描述,我们只描述了重试,但是重试次数也是我们要去考量的一个值,如果一个服务20s才恢复,那么我们重试20秒肯定不太合适,不过也要看具体业务,面向客户的话肯定大多客户接受不了,这时候我们应该设置重试次数,比如重试了三次还不能成功,那么久取消任务,而不是一直重试下去。

重试次数也要根据实际情况来设置,如果一直重试,而服务一直无法恢复,那么也会消耗资源,并且用户导致用户请求一直在等待,用户体验不好,设置设置次数过少,那么可能会导致没有足够重试,从而导致浪费了一些重试次数,最后还没有成功,如下,第三次就重试成功,如果设置为两次,那么前两次没有成功就返回,用户还需重新再发起请求。

从上面可以看出,这些设置都没有黄金值,而是需要我们根据业务和不断地测试才能找出合适的值。

怎么重试,参数怎么管理

上面对重试进行一些理论的讲解,那么在实际场景中我们应该如果去做呢,首先要考虑我们的业务中是否真的有必要重试,如果没必要,那么就完全没必要去增加复杂度,如果需要,那么就需要进行良好的设计,保证其优雅和扩展性。

不同的业务有不同的重试逻辑,所以我们需要在不同的地方实现不同的逻辑,但是重试次数和重试时间间隔这些参数应该是需要可动态配置的,比如今天服务负载过高,那么时间间隔可以设置稍微长一点,次数可以设置多一点,然后负载较低的时候,参数可以设置小一点,这些配置信息可以写入配置中心中。

也有一些重试框架供我们使用,比如spring-retry,我们可以借助一些框架来管理我们的重试任务,更方便管理。

总结

以上对重试的一些介绍就完了,我们介绍了重试的场景,重试产生的背景,还有一些解决方案,还对重试的一些管理进行介绍,重试的方案很多,实现方式也有很多,它不是固定的技术,而是一种思想,也是我们在软件设计中应该考虑的一个点,它能提高软件的稳定性和用户体验,但是也需要我们进行考量。

今天的分享就到这里,感谢你的观看,我们下期见!文章来源地址https://www.toymoban.com/news/detail-462974.html

到了这里,关于软件设计中你考虑过重试了吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试|使用Python读写yaml文件,你会了吗?

    简介 YAML(YAML Ain\\\'t Markup Language)是一种可读的数据序列化格式,它常用于配置文件和数据交换。Python 提供了许多库来处理 YAML 文件。在本文中,我们将探讨如何使用 PyYAML 库来读取和写入 YAML 文件,以及提供一些示例来说明其用法。 环境准备 在读写yaml文件之前,我们需要先

    2024年01月16日
    浏览(65)
  • 如何做到专注且不错过重要事情

    现代人每天要处理的事情繁多,如何能专注于当下,保持高效,又不错过重要事情? 先说高效,如果你想着一小时后要给张三打个电话,下午两点半有个会,中午需要订高铁票,那么你就很难高度专注地投入手头的事情。 反之,如果你高度专注,怎么保证各种事情到点时,

    2024年03月25日
    浏览(44)
  • 设计模式④ :分开考虑

    有时候不想动脑子,就懒得看源码又不像浪费时间所以会看看书,但是又记不住,所以决定开始写\\\"抄书\\\"系列。本系列大部分内容都是来源于《 图解设计模式》(【日】结城浩 著)。该系列文章可随意转载。 Bridge 模式 :将类的功能层析结构与实现层次结构分离。 Bridge 模式

    2024年01月22日
    浏览(42)
  • 软件测试|如何实现字典的键值互换,你会了吗?

    简介 在Python中,字典是一种非常有用的数据结构,它将数据存储为键值对,并且键必须是唯一的。有时候,我们可能需要将字典的键和值互换,以便查找或操作数据更加方便。本文将详细介绍如何在Python中实现字典键值的互换操作。 字典的基本概念 首先,让我们快速回顾一

    2024年01月21日
    浏览(64)
  • 妙鸭相机推出AI修图,修图软件们慌了吗?

    “这才是真正的科技与狠活吧,闭眼照都能修好。”最近,木木迷上了“AI修脸”。 先上传至少15张照片,生成一个数字分身,随后打开AI修脸选项,上传要修的图片,就可以坐等收图了。即便是闭眼照,或是表情不够理想,都能得到“换脸”的效果。 不仅是木木,各大社交

    2024年01月21日
    浏览(35)
  • 55个软件测试工具,正在做测试的你get到了吗

    网络“黑色星期五”威胁,安全漏洞,网上银行盗窃,系统停机时间,以及许多这样的恶梦让全球的企业忧心忡忡难以入眠。确保性能具有加载的安全性和增强的经验是这个领域每个有能力的玩家所必备的。 我们为你提供了一个丰富的软件测试工具列表,这些测试工具不仅可

    2023年04月24日
    浏览(46)
  • 今天试了试chatgpt

    今天试了试chatgpt,真是服了 arcade? Arcade是一个Python游戏开发库,它提供了一系列的工具和函数,可以帮助开发者快速地创建2D游戏。以下是Arcade的一些特点: 简单易用:Arcade提供了简单易用的API,可以帮助开发者快速地创建2D游戏。 跨平台支持:Arcade支持跨平台开发,可以

    2023年04月25日
    浏览(79)
  • SOLIDWORKS钣金设计需要考虑的折弯问题

    设计需要考虑,究竟哪些是成型前加工,究竟哪些是成型后加工。 考虑工作制作工艺过程中,必须先折弯,后加工部分孔的情况有: 距离折弯边很近的圆孔,方孔,腰圆孔,螺纹等,下料时都需要做处理,如果直接按展开下料,在后续的加工中就没法完成,腰圆在折弯时会

    2024年02月09日
    浏览(43)
  • 什么?你设计接口什么都不考虑?

    如果让你设计一个接口,你会考虑哪些问题? 1.接口参数校验 接口的入参和返回值都需要进行校验。 入参是否不能为空,入参的长度限制是多少,入参的格式限制,如邮箱格式限制 返回值是否为空,如果为空的时候是否返回默认值,这个默认值需要和前端协商 2.接口扩展性

    2024年04月13日
    浏览(40)
  • 从这五个方面提升python的执行效率,才是软件开发层面需要考虑的问题!

    python作为使用最广泛的编程语言之一,有着无穷无尽的第三方非标准库的支持。 简单的语法、优雅的代码块使其在各个业务领域都混的风生水起,除了这些优点,python有一个经常被人诟病的缺点那就是运行速度。 小伙伴通过下面的五个python开发技巧,来充分提高python代码块

    2023年04月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包