前车之鉴,后车之师
问题 | 分类 | 具体解释 | 可能导致的后果 | 解决方法 | 备注 | |
---|---|---|---|---|---|---|
主从延迟 | 数据库 | 写后立即读的场景,比如订单落地成功抛消息,消息接收方再读订单推订单中心、发触达、落地数据等场景,再读数据时走从库,可能读不到数据。 | 脏数据业务逻辑有问题 | 延迟消费。方案简单,但无法保证彻底解决。强制走主库。底层服务提供方需要注意,强制走主库的逻辑要收口,主库不能被拉挂。 | 收口的意思是只是部分的appkey允许走主库?需要告知提供方走主库的需求 | |
水平越权 | 业务逻辑 | 如果未进行数据权限校验,则可能会出现A用户能看到B用户数据的场景,会造成严重的数据泄漏。如订单详情页把订单ID参数改一下,就可以看到别人的订单。 | 数据泄漏 | 所有私密数据的访问,都需要做水平越权防护,而且用来校验的ID来源一定要是前端Token解析出来的,而不是直接传的。 | 根据id查询用户信息、poi信息等隐私数据时,不能根据前端传递来的参数就直接rpc查询,需要向kms申请权限校验。即获取司机手机号,获取的加密后的token。需要解密才能拿到具体的手机号 | |
表情符号支持 | 数据库 | 如果数据库charset为utf8,则不支持字符串中的表情符号 | 插入数据失败 | 数据库charset改为utf8mb4。插入数据库时做过滤。 | ||
长度截断 | 数据库 | 备注之类的字符串字段,一般建表语句会限制长度,偶尔有某些数据超过了长度限制,插入时会被截断。虽然可能有些业务前端会做一些拦截,但并不能保证所有的地方都会有。 | 数据丢失 | 建表时字段选长点,但该方法不能真正完全解决问题。插入数据前手工数据截断,但数据一致性要求不高,但数据不能丢的场景适用,如插入新客资。接口进来时检查长度,过长向前端提示错误。无论何种处理方法,都不应该有数据库截断异常抛出来。 | 1.字段设计的时候,长度要限制住2.接口进来时检查长度,过长向前端提示错误区别list过大,插入数据库存在性能问题,需要list.partion截断 | |
Limit深分页 | 数据库 | 全量向外部同步数据的场景,有时会写代码根据查询条件并limit,但如果limit到最后可能会出现慢查询。 | 慢查询 | 不要使用limit,使用主键,每次查询的时候都主键id>上次返回的主键id即可。 | criteria.andIdGreaterThan*(id)* | |
消息重复 | 消息组件 | 一般的消息中间件,比如Kafka,会保证消息的必达性,但不会保证消息的唯一性,有可能消息会被重复消费。 | 脏数据逻辑重复执行 | 底层接口支持幂等。这个要注意,但凡是监听消息做某事的,逻辑一定要能幂等。 | 使用分布式redi将key比如orderId记录在redis中实现幂等疑惑:分布式系统,redis存入了,别的微服务能拿到对应的key-val么 | |
MapiGet重复请求 | 前端相关 | mapi接口如果是Get请求,客户端如果请求超时的话会发起重复请求的,这样后端可能就会连续收到两次请求,导致重复处理。 | 逻辑重复执行 | 写逻辑使用Post协议,否则一定要考虑好幂等问题。 | ||
强流程型业务中断无重试 | 业务逻辑 | 审核等强流程型的业务,中间某一步执行失败无重试、告警、定时扫描等处理,导致失败的流程永远无法再执行,如一直处于审核中。 | 业务流程问题,引起ASK | 强流程型业务失败接入Redo重试。流程失败时打告警。定时扫描失败的业务数据,如超期审核中的数据。 | 1.可以将失败的key发送至队列中,定时消费一下2.swan异步重试机制 | |
链接配置HTTPS | 前端相关 | 目前iOS限制链接都要为HTTPS,且公司各平台也都支持了HTTPS,在各种地方配置链接,如前端页面链接、触达跳转链接、推送订单中心链接等,都要配置HTTPS而不是HTTP。 | 全业务不可用,页面打不开 | 配置场景的链接一定要为HTTPS,如果一定要走HTTP,要有充足的理由并且要做说明。 | ||
类静态变量不要被修改 | 代码相关 | 有时我们会在Bean里面定义一些做为常量使用的静态变量,该静态变量如果是个对象,而业务代码中去修改该对象的内容,会导致不同请求的内容串掉。 | 业务脏数据 | 静态变量不要被修改。静态变量一般应该是基础类型,对象类型的可以考虑每次new一个。 | 共享变量只能读,不要写 | |
重复数据提交 | 并发控制 | 分布式场景,添加数据时,如果依赖查询是否有数据然后在做业务逻辑,比如插入,预约频次限制,强走主库没有作用,需要分布式锁控制,数据锁等手段 | 业务脏数据 | 大流量分布式锁做校验(推荐)小流量,影响数据行数少的情况,数据库锁一些场景采用重复提交校验组件 | 1.小流量使用乐观锁2.大流量使用redis分布式锁、zk分布式锁(t1、t2查询发送给供应商的消息时候都不存在,所有都可以执行insert,t1执行了insert,t2执行相同的insert语句的时候会抛出异常么?) | |
事务提交(写场景) | 高并发 | 同一个逻辑代码,如果采用了事务,事务存在先查后做逻辑判断的场景,高并发情况下需要考虑事务的可见性,未提交的事务在例外一个机器上是不可见的。由于不可见可能导致重复插入,逻辑判断错误等异常情况 | 业务脏数据 | 1.队列技术,kafka 按照ID 路由同一个partition,消费单线程处理(同一个供应商的msg,发送到同一个partion中,有序的消费)2.分布式控制3.数据库排他锁 | ||
关键业务异常,增加异常处理重试 | 可用性 | 如果触达或者客资服务突然完全不可用了,是否有最快的办法解决丢失的流量,回放流量问题 | 服务异常时间过长,服务不可用 | 1.方案设计可以采用WAH 思路,先记录消息。比如kafaka 消息等形式。 | ||
SimpleDateFormat 非线程安全 | 代码相关 | 不要在多线程情况下用SimpleDataFormat ,容易导致异常 | 业务异常 | 1.线程新建,不要共享此变量2.使用LocalDateTime工具类。 | 使用LocalDate类 | |
SimpleDateFormat格式化错误 | 代码相关 | 格式化YYYY是指基于周的年,所以2020-12-31这一天所在的周已经是2021年,所以使用YYYY-MM-dd格式化的时候会变成2021-12-31,这个只有一年最后一周才可能会出问题,极其隐蔽。另外DD指的是一年中的第几天,dd指的是一月中的第几天 | 业务异常 | 一般情况下应该使用yyyy及dd,不要使用大写的。LocalDateTime,放弃老式时间格式化类 | 使用LocalDate类 | |
时间边界问题 | 代码相关 | 前端向后端传的筛选条件如果为时间类型,比如按日期筛选订单,则可能只传了2021-01-01及2021-01-10,后端如果直接将OrderDate与这两个时间判断,可能2021-01-10的数据就筛选不出来。 | 业务异常 | 最后一天的日期在转化为时间戳时,要转化为当天的23:59:59,而不是00:00:00 | 01-01 00:00:00 - 01-02 00:00:0001-09 00:00:00 -01-10 00:00:0001-10 00:00:00 - 01-11 00:00:00这样10的数据也能覆盖 | |
价格数据类型 | 代码相关 | 1.使用浮点表示价格会有精度问题。2.使用整型表示价格,单位要统一,否则有些为元,有些分分,不对齐可能会有单位错误。 | 资损 | 统一使用整型,以分为单位,上下游接口沟通注意对齐。 | 1元 = 100分1.2元 = 120分遇到时,具体内容要学习他人代码或网上搜一下 | |
MySQL updatetime字段 | 数据库、代码相关 | 建表的时候必须设置该字段,并且设置更新赋值。同时,再做变更时注意updatetime字段会被同步更新。 | 排查问题时为了缩小范围,往往会有updatetime字段进行限制,如果没有更新会影响排查过程。 | 建表的时候指定更新时变更更新数据时,保证updatetime字段被更新 | updatetime字段的类型要注意 change_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
前车之鉴,后车之师
问题分类具体解释可能导致的后果解决方法备注主从延迟数据库写后立即读的场景,比如订单落地成功抛消息,消息接收方再读订单推订单中心、发触达、落地数据等场景,再读数据时走从库,可能读不到数据。脏数据业务逻辑有问题延迟消费。…...
![](https://img-blog.csdnimg.cn/e50a63fd4aa144459a4d683ac7906490.png)
WEB使用VUE3实现地图导航跳转
我们在用手机查看网页时可以通过传入经纬度去设置目的地然后跳转到对应的地图导航软件,如果没有下载软件则会跳转到下载界面 注意: 高德地图是一定会跳转到一个新网页然后去询问用户是否需要打开软件百度和腾讯地图是直接调用软件的这个方法有缺陷&…...
![](https://img-blog.csdnimg.cn/img_convert/70815d34cf3f8b40b6ca77fead72f6ab.png)
今天聊一聊高性能系统架构设计是什么样的
Java全能学习面试指南:https://javaxiaobear.cn 今天聊一聊大家常听到的高性能系统架构。 高性能系统架构,主要包括两部分内容,性能测试与性能优化。性能优化又可以细分为硬件优化、中间件优化、架构优化及代码优化,知识架构图如…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
鼠标不动了怎么办?3招解决问题!
“这是怎么回事呢?我的鼠标怎么会用着用着就突然不动了呢?现在有一些比较重要的工作要处理。请问有什么方法可以快速解决这个问题吗?” 随着电脑在我们日常生活和工作中的广泛应用,鼠标是我们操作电脑不可或缺的工具之一。但是&am…...
![](https://www.ngui.cc/images/no-images.jpg)
2023-09-23力扣每日一题
链接: 1993. 树上的操作 题意 **Lock:**指定用户给指定节点 上锁 ,上锁后其他用户将无法给同一节点上锁。只有当节点处于未上锁的状态下,才能进行上锁操作。**Unlock:**指定用户给指定节点 解锁 ,只有当…...
![](https://img-blog.csdnimg.cn/2029821ee8bd45539f50adc01c3543e9.png)
C#中使用Newtonsoft.Charp实现Json对象序列化与反序列化
场景 C#中使用Newtonsoft.Json实现对Json字符串的解析: C#中使用Newtonsoft.Json实现对Json字符串的解析_霸道流氓气质的博客-CSDN博客 上面讲的对JSON字符串进行解析,实际就是JSON对象的反序列化。 在与第三方进行交互时常需要封装对象,…...
![](https://www.ngui.cc/images/no-images.jpg)
Golang开发--互斥锁和读写锁
互斥锁(Mutex) 互斥锁(Mutex)是一种并发控制机制,用于保护共享资源的访问。互斥锁用于确保在任何给定时间只有一个 goroutine(Go 语言中的并发执行单元)可以访问被保护的共享资源,从…...
![](https://www.ngui.cc/images/no-images.jpg)
Springboot 集成WebSocket作为客户端,含重连接功能,开箱即用
使用演示 public static void main(String[] args) throws Exception{//初始化socket客户端BaseWebSocketClient socketClient BaseWebSocketClient.init("传入链接");//发送消息socketClient.sendMessage("填写需要发送的消息", (receive) -> {//这里…...
![](https://www.ngui.cc/images/no-images.jpg)
java调整字符串
package 字符串练习;public class 调整字符串 {/* 如果调整成功则给提示,返回不成功也给提示调整 例如:abcde -> bcdea -> cdeab 就是把第一个值放到最后的位置上现在是给定两个字符串, 选定其中一个进行调整, (我们想一下,如果调整字符串的长度次,那不就是返回到原来的字…...
![](https://img-blog.csdnimg.cn/c33b6e2810f34a748b3cfef7a2a7c46d.png)
2023-9
内核向应用层发送netlink单播消息: nlmsg_unicast -> netlink_unicast -> netlink_sendskb -> __netlink_sendskb -> 把skb链入struct sock 的 sk_receive_queue 链表中,再调用sk->sk_data_ready(sk); -> sock_def_readable -> wak…...
![](https://img-blog.csdnimg.cn/85400546c8b44d8f9fbcfffc9d442bd8.jpg)
软考高级+系统架构设计师教程+第二版新版+电子版pdf
注意!!! 系统架构设计师出新版教程啦,2022年11月出版。所以今年下半年是新版第一次考试,不要再复习老版教程了,内容改动挺大的。 【内容简介】系统架构设计师教程(第2版)作为全国计…...
![](https://img-blog.csdnimg.cn/7bcc750e211541f9bf66388335c5ebeb.png)
【产品运营】如何提升B端产品竞争力(下)
“好产品不是能力内核,做好产品的流程才是” 一、建立需求池和需求反馈渠道 需求池管理是B端产品进化最重要的环节,它的重要性远超产品设计、开发等其他环节。 维护需求池有主动和被动两种。 主动维护是产品经理在参与售前、迭代、交付、售后、竞品分…...
![](https://www.ngui.cc/images/no-images.jpg)
uniapp 微信小程序使用echarts
本文目的:通过分包的方式,尽可能在微信小程序中使用最新的echarts。 当然你也可以直接使用现成的uchart或者市场里别人封好的echarts. 准备工作 下载echarts-for-weixin源码。 复制ec-canvas文件夹以及下属文件,在uniapp项目中与pages同级的地…...
![](https://img-blog.csdnimg.cn/4f1dd682c55047938e645231d3ef7698.png)
【漏洞复现】企望制造 ERP命令执行
漏洞描述 由于企望制造 ERP comboxstore.action接口权限设置不当,默认的配置可执行任意SQL语句,利用xp_cmdshell函数可远程执行命令,未经认证的攻击者可通过该漏洞获取服务器权限。 免责声明 技术文章仅供参考,任何个人和组织…...
![](https://img-blog.csdnimg.cn/3843c68ef1104afcbfe98c4cee2b6fc9.png#pic_center)
2023 “华为杯” 中国研究生数学建模竞赛(E题)深度剖析|数学建模完整代码+建模过程全解全析
问题一 血肿扩张风险相关因素探索建模 思路: 根据题目要求,首先需要判断每个患者是否发生了血肿扩张事件。根据定义,如果后续检查的血肿体积比首次检查增加≥6 mL或≥33%,则判断为发生了血肿扩张。 具体判断步骤: (1) 从表1中提取每个患者的入院首次影像检查…...
![](https://img-blog.csdnimg.cn/78b531f8496d4f4ebb4345bd1e35e903.png)
【腾讯云国际站】CDN内容分发网络特性介绍
为什么使用腾讯云国际站 CDN 内容分发网络? 当用户直接访问源站中的静态内容时,可能面临的体验问题: 客户离服务器越远,访问速度越慢。客户数量越多,网络带宽费用越高。跨境用户访问体验较差。 腾讯云国际站CDN 如何改…...
![](https://img-blog.csdnimg.cn/f35fff544c4447228d2cb858db1885d1.png#pic_center)
【工业机器人视觉】
工业机器人视觉 工业机器人的定位、抓取任务是工业生产线上一项重要的应用,一般通过预先示教的方式让机器人执行预定的指令动作。但是,一旦工件的状态发生改变时,机器人便无法完成工作任务。区别:就像人睁眼走直线和闭眼走直线。…...
![](https://www.ngui.cc/images/no-images.jpg)
跨域(浏览器)
跨域问题 是前端开发中常遇到的一个挑战。由于浏览器的同源策略限制,前端在发起异步请求时会受到限制,只能向相同源(域名、协议和端口号都相同)的服务器发送请求。当请求的目标服务器与当前页面的源不一致时,就会触发…...
![](https://www.ngui.cc/images/no-images.jpg)
Leetcode 2866. Beautiful Towers II
Leetcode 2866. Beautiful Towers II 1. 解题思路2. 代码实现 题目链接:2866. Beautiful Towers II 1. 解题思路 这一题其实思路上还是比较明显的,就是一个单调数组的问题,问题在于说如果具体去设计这个单调数组。 我们从题目出发&#x…...
![](https://img-blog.csdnimg.cn/f9149f3594234c2ba9683f1957e7f3d7.png#pic_center)
电脑C盘爆红怎么办?(小白篇)
文章目录 前言:1、清理临时和系统文件2、更改电脑默认软件安装位置3、微信、QQ文件存储路径放在其它盘4、卸载一些不常用的软件彩蛋 前言: C盘作为电脑的系统盘,如果出现爆满或者剩余空间很小整个C盘变红,这样会导致电脑系统运行…...
![](https://www.ngui.cc/images/no-images.jpg)
Office Xml 2003转XLSX
一、使用到的依赖包 1、xelem-3.1.jar 下载地址:管网下载地址 2、poi-3.17.jar 下载地址:https://mvnrepository.com/artifact/org.apache.poi/poi 二、实现方法 1、Xml2003公式转XLSX公式算法 (1)Xml2003函数格式 SUM(R[-1…...
![](https://www.ngui.cc/images/no-images.jpg)
skyWalking搭建(一)
title: “SkyWalking搭建(一)” createTime: 2021-07-27T14:34:2108:00 updateTime: 2021-07-27T14:34:2108:00 draft: false author: “name” tags: [“skywalking”] categories: [“java”] description: “测试的” 基于 docker 部署 skywalking 并实现 SpringBoot 全链路…...
![](https://www.ngui.cc/images/no-images.jpg)
Golang开发--sync.WaitGroup
sync.WaitGroup 是 Go 语言标准库中的一个并发原语,用于等待一组并发操作的完成。它提供了一种简单的方式来跟踪一组 goroutine 的执行状态,并在所有 goroutine 完成后恢复执行。 下面是关于 sync.WaitGroup 的实现细节的详细解释: 创建 Wa…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux命令教程:使用cat命令查看和处理文件
文章目录 教程:使用cat命令在Linux中查看和处理文件1. 引言2. cat命令的基本概述3. 查看文件内容4. 创建文件5. 文件重定向和管道6. 格式化和编辑文件7. 实际应用示例7.1 使用cat命令浏览日志文件7.2 利用cat命令合并多个配置文件7.3 使用cat命令将文件内容发送到其…...
![](https://img-blog.csdnimg.cn/30d92c3181dd4731b957d43c8d2f9544.png)
Websocket集群解决方案以及实战(附图文源码)
最近在项目中在做一个消息推送的功能,比如客户下单之后通知给给对应的客户发送系统通知,这种消息推送需要使用到全双工的websocket推送消息。 所谓的全双工表示客户端和服务端都能向对方发送消息。不使用同样是全双工的http是因为http只能由客户端主动发…...
![](https://www.ngui.cc/images/no-images.jpg)
科技的成就(五十一)
397、初等数论的不可解问题 1936 年 4 月,邱奇证明判定性问题不可解。33 岁的邱奇发表论文《初等数论的不可解问题》,运用λ演算给出了判定性问题一个否定的答案。λ演算是一套从数学逻辑中发展起来的形式系统,采用变量绑定和替换,…...
![](https://img-blog.csdnimg.cn/3e8a40ea6c9c4ac6a116eec4946fe393.png)
Tomcat8 任意写文件PUT方法 (CVE-2017-12615)
Tomcat 任意写文件PUT方法 (CVE-2017-12615) 文章目录 Tomcat 任意写文件PUT方法 (CVE-2017-12615)1 在线漏洞解读:2 版本影响3 环境搭建4 漏洞复现4.1 访问4.2 POC攻击点4.2.1 直接发送以下数据包,然后shell将被写入Web根目录。4.2.2 访问是否通,可以访…...
![](https://www.ngui.cc/images/no-images.jpg)
SAP服务器修改主机名操作手册
1、业务背景 SAP服务器P2V:虚拟化后的服务器主机名(或叫计算机名、设备名,hostname,下文同)会和原参照克隆的服务器主机名一样,若两台服务器处于同一网域,会出现域冲突,导致以下事故发生 (1)、使得原服务器出现掉域情况(DEV->CLN->PRD后台服务器访问失效) …...
![](https://img-blog.csdnimg.cn/0a17f23e32cc42bd804b87148b3c075f.png#pic_center)
【大数据】Doris 构建实时数仓落地方案详解(一):实时数据仓库概述
本系列包含: Doris 构建实时数仓落地方案详解(一):实时数据仓库概述Doris 构建实时数仓落地方案详解(二):Doris 核心功能解读Doris 构建实时数仓落地方案详解(三)&#…...
![](https://img-blog.csdnimg.cn/1b853ed154cc4197bbc9a5cd441f83d0.png)
C++ list容器的实现及讲解
所需要的基础知识 对C类的基本了解 默认构造函数 操作符重载 this指针 引用 模板等知识具有一定的了解,阅读该文章会很轻松。 链表节点 template<class T>struct list_node{T _data;list_node<T>* _next;list_node<T>* _prev;list_node(const T&…...
![](http://img1.51cto.com/attachment/201211/194628592.jpg)
htdocs wordpress/seo怎么优化武汉厂商
2019独角兽企业重金招聘Python工程师标准>>> 最近因为要给刚毕业的学生做一次演讲,所以就职业发展这类话题先以写博客的形式做一些思考,希望届时能给同学们带去质量更高的内容。我在《驾驭你的“职场布朗运动”》一文中谈了25条职场感悟并提出…...
![](https://img-blog.csdnimg.cn/7817e9ae3fe0473e821d74a5de406bf9.png)
南京高端网站建设/网络客服
Yolov5的模型定义分两个阶段,分别是基础模块设计阶段和完整模型搭建阶段。基础模块设计阶段,是基于pytorch架构的基本神经网络算子,进一步构造成具有特定功能和含义的自定义神经网络模块。完整模型搭建阶段,是通过结构化文件&…...
![](/images/no-images.jpg)
重庆网站服务器建设推荐/提高关键词排名的软文案例
API Testing 入门基础系列 之 API Testing 7 - HTTP状态码 在前面文章中《API Testing 4 - Http方法-CRUD操作》有涉及几种简单的状态码,状态码对API 测试来说比较重要,在面试过程中也会经常被问到。 HTTP 状态码 当发起一个HTTP 请求时,服…...
![](https://img-blog.csdnimg.cn/20210714212927725.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxOTM0OTkw,size_16,color_FFFFFF,t_70)
博客式笑话网站织梦源码/潍坊seo招聘
Spring AOP AOP介绍 Aop为Aspect Oriented Programming的缩写,面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 AOP 是 OOP 的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容&…...
![](https://img2018.cnblogs.com/blog/1197012/201901/1197012-20190116151526255-1005624108.png)
wordpress使用html界面/搜索网页内容
1.在iis中选择物理路径。配置域名 2.添加php默认文档 3.修改处理程序映射 4.设置模块映射信息 转载于:https://www.cnblogs.com/zhangyouwu/p/10277174.html...
哈尔滨网站建设30t/广西seo搜索引擎优化
在源代码编辑器中按住Option键单击一个符号(或单击Command键并单击该符号,然后选择“显示快速帮助”),以在弹出窗口中查看该符号的简要说明。要关闭弹出窗口,请按Escape键或单击文件中的任何位置。 技术交流 QQ:336505…...