这是道面试题,想不懂,请教大家
这是道面试题,请教大家
有 web 架构, NGINX + PHP-FPM + MYSQL, 利用 NGINX 实现负载均衡,MYSQL 实现主从分离
现发现评论表有如下数据
UserID | Comment | Created |
---|---|---|
10001 | 东西很棒! | 2020-09-02 11:00:00 |
10002 | 非常满意 | 2020-09-02 11:00:00 |
10002 | 非常满意 | 2020-09-02 11:00:00 |
10003 | 下次还会再买 | 2020-09-02 11:00:05 |
请分析下可能产生的原因
==========分割线============
2020-12-11
这是中高级PHP的最后一道笔试题,接口重复提交肯定是原因,但也就只能是这种水平。
web架构会因什么原因造成数据重复,这应该才是面试官想要你答的
本作品采用《CC 协议》,转载必须注明作者和本文链接
高认可度评论:
甩锅前端,没有做重复点击限制。
可能原因:
解决方法:
欢迎补充或指正
因
MySQL
实现了主从读写分离,存在网络原因或其他原因,导致主从同步延迟,最终导致主库数据插入成功,而从库未及时同步数据,造成用户以为没有提交成功而重复提交或造成程序中判断异常进行了重复插入。因
Created
时间是相同的,所以可能是因为后者,主从同步延迟导致程序中判断异常出现重复插入的情况mark
抛砖引玉 userId非primary key非unique,客户端在2020-09-02 11:00:00发送了两次请求 有没有更靠谱的说法
甩锅前端,没有做重复点击限制。
加个锁呗,插入操作前上锁并判断是否存在锁,结束时解锁。
应该还有其他的方案,期待大神补充
像评论这种接口肯定要做「防重放」。
表单重复提交的问题
接口幂等
加锁
可能原因:
解决方法:
欢迎补充或指正
既然是中高级面试题,那考察的就不会是那些基础的幂等性如何实现,应该从架构设计方向去想,我觉得题中的很多关键词大家都忽略了,比如
Nginx
的负载均衡、MySQL
的主从复制,我不清楚这两项如果在某种特殊的配置条件下是否会导致请求重复处理或者重复保存,进而出现这个结果,抛转引玉希望有真大佬来给一些提示。因
MySQL
实现了主从读写分离,存在网络原因或其他原因,导致主从同步延迟,最终导致主库数据插入成功,而从库未及时同步数据,造成用户以为没有提交成功而重复提交或造成程序中判断异常进行了重复插入。因
Created
时间是相同的,所以可能是因为后者,主从同步延迟导致程序中判断异常出现重复插入的情况排除业务场景,单看解决问题,不知道锁表有没有用?
这个就是分布式,主从延时导致的并发问题,,应该从nginx负载 和主从同步误差方面解决,不过得先问一下nginx负载做的是哪一种
是因为前端提交了两次,nginx负载均衡的转发,然后导致mysql两次请求的两个事务并发,写入了相同数据
看到两个1002没有
是主从分离还是读写分离?
当数据量大读写分离有毛用
这个问题居然跑这里来了。。。。www.zhihu.com/question/434311322/a...
debounce
throttle
好文章!
答案可能是这个 blog.51cto.com/fengwan/2461291
自己动手实战就行了,光讨论只是纸上得来终觉浅
我觉得考查的应该是 api 做好
幂等
。我一般会把
post
,put
,delete
的请求数据用redis
的sadd
去把请求了一次的数据存起来,比如我给redis
这个key
设置有效期时间为1秒,那么一秒内sadd
插入不了相同的请求数据