首页 > 其他分享 >系统设计之业务逻辑错误处理的妥善方式

系统设计之业务逻辑错误处理的妥善方式

时间:2024-10-27 23:13:09浏览次数:1  
标签:重试 逻辑 错误 妥善 业务 发送 错误处理 感知 客户端

由于业务中存在不可控因素,包括网络、部署环境、客户端环境等等,系统出现错误不可避免。

如何妥善处理业务系统中的报错呢?本文以错误结果产生的影响这个角度来思考此问题。

一、最终结果正确类
例如IM软件,聊天消息下送失败,导致未收到此消息。解决方案如下:

1. 通过产品设计,抹平错误影响
发送时将聊天数据落地,接收人客户端重新获取数据即可,推拉结合保证结果不丢。
优点:最终正确
缺点:客户无法正确感知消息到达。

2. 发送端同步发送
采用可幂等的发送逻辑:系统报错时透传错误给客户端,发送端客户感知后重试即可。
优点:第一时间感知错误;
缺点:重试可能还是失败

产生的原因,大概率有以下2个大类:
分布式系统网络问题
系统负载问题

二、结果不正确
一个任务内操作多个数据记录,其中某步骤失败,数据未回滚,导致脏数据。
异步任务执行失败无法感知,导致结果不对。解决方案如下:

  1. 重要任务上事务,出错即回滚;
  2. 分布式服务的一次业务操作在一个服务内,避免分布式事务;

正确的操作步骤
根据业务重要与否,以及具体业务,考虑数据操作使用事务,执行失败即回滚业务。即使重试也不影响结果逻辑一致

标签:重试,逻辑,错误,妥善,业务,发送,错误处理,感知,客户端
From: https://www.cnblogs.com/abyte/p/18509232

相关文章

  • PHP中的错误处理最佳实践
    在PHP中,错误处理最佳实践包括错误日志记录、使用异常处理机制、设置自定义错误处理器,和配置错误报告级别。其中,使用异常处理机制可以让代码更加健壯,并且易于调试。异常处理允许开发者将错误处理代码与业务逻辑分离,使得后者更清晰,更准确地反映出程序应有的流程。通过抛出异常,代码......
  • PostgreSQL逻辑复制常见错误以及处理方式
     在PostgreSQL和SQLServer中,有一个共同的特点,相比如物理复制,逻辑复制可能会存在较多的一些细节和可能错误的发生,作为SQLServerReplication(逻辑复制)的深入用户,有必要深入学习试验一下PostgreSQL的逻辑复制的一些细节。 订阅端的主要订阅选项信息createsubscriptionslave......
  • 人工智能_神经网络103_感知机_感知机工作原理_感知机具备学习能力_在学习过程中自我调
    由于之前一直对神经网络不是特别清楚,尤其是对神经网络中的一些具体的概念,包括循环,神经网络卷积神经网络以及他们具体的作用,都是应用于什么方向不是特别清楚,所以现在我们来做教程来具体明确一下。当然在机器学习之后还有深度学习,然后在深度学习中对各种神经网络的探讨就会比较......
  • PostgreSQL 16逻辑复制改进 (译)
    原文地址:https://www.pgedge.com/blog/postgresql-16-logical-replication-improvements-in-action 我之前简要介绍了PostgreSQL中的复制方法,并概述了PostgreSQL16中逻辑复制的一些关键特性。在这篇博客中,我将深入探讨逻辑复制的几个性能特性,展示这些特性在实际操作中的步骤,并......
  • js逆向实战之某天下登陆参数pwd加密逻辑
    声明:本篇文章仅用于知识分享,不得用于其它用途网址:https://passport.fang.com/加密逻辑随便输入用户名和密码,看触发的数据包。可以看到pwd明显被加密了,全局搜索url中的关键字loginwithpwdStrong.api。只有两处,全部打上断点,重新登录一次,看触发哪个。触发了jquery这里,并且......
  • 03 布尔逻辑与逻辑门
    晶体管二进制,只显示两种信号状态,电路连接为真,电路断开为假,成千上万的晶体管中同时多状态容易出错布尔提出逻辑运算:输入真与假,对输入进行not,and,or的运算,产生输出晶体管控制线通电,将控制线作为input,来电一极连接导出线作为output,控制线通电on电流可以从晶体管线路贯穿走而......
  • [超详细有案例]理解白盒测试的5种逻辑覆盖
    [超详细有案例]理解白盒测试的5种逻辑覆盖    白盒测试是穷举路径测试,在逻辑覆盖中有6种,分别是语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,组合覆盖,路径覆盖,下面我将以每种覆盖的定义,实例讲解,优点,缺点了帮助大家理解。(1)语句覆盖        语句覆盖是最起码的结构覆......
  • 3.Java 运算符(算术运算符、赋值运算符、逻辑运算符、关系运算符、三元运算符、标识符
    一、算术运算符1、基本介绍运算符说明+正号-负号运算符说明+加-减*乘/除%取模(取余)运算符说明示例结果++自增(前),先运算后取值a=2;b=++a;a=3;b=3;++自增(后),先取值后运算a=2;b=a++;a=3;b=2;–自减(前),先运算后取值a=2;b=--a;a=1;b=1;–自减(后),先......
  • CodeQL学习笔记(1)-QL语法(逻辑连接词、量词、聚合词、谓词和类)
    最近在学习CodeQL,对于CodeQL就不介绍了,目前网上一搜一大把。本系列是学习CodeQL的个人学习笔记,根据个人知识库笔记修改整理而来的,分享出来共同学习。个人觉得QL的语法比较反人类,至少与目前主流的这些OOP语言相比,还是有一定难度的。与现在网上的大多数所谓CodeQL教程不同,本系列基于......
  • 几张图就让你掌握InnoDB 存储引擎底层逻辑架构
    前言......