一秒内的重复请求如何处理

2016-12-07 09:30:02 +08:00
 twogoods
一个接口部署了三台机器, Nginx 做负载均衡,重复请求怎么处理,上 zookeeper , redis 吗?
12704 次点击
所在节点    程序员
30 条回复
9hills
2016-12-07 09:46:23 +08:00
简单但是有很大局限性的方法

负载均衡改成源地址 Hash ,保证同一来源的请求落到一个后端

其他的都需要有个
9hills
2016-12-07 09:47:42 +08:00
接上

其他的基本都需要类锁服务,但是局限性也少了很多。 Redis 就不错,大部分场景也能 Hold 。
moorlop
2016-12-07 09:54:02 +08:00
requestID
xjp
2016-12-07 09:59:11 +08:00
我们是用用 redis 做锁的 获取到锁的请求才正常处理 其他的请求直接返回错误
lhbc
2016-12-07 10:29:53 +08:00
接口所有操作都是幂等的吗?
幂等的话多次请求并没有关系。
mengskysama
2016-12-07 10:45:20 +08:00
我觉得 lz 没有表达清楚这个问题,这个请求业务逻辑是什么样的。

如果是重复的 get 请求最高效的做法是在 nginx 上做合并回源,确保请求同一个资源只有一个请求打到后端,其他请求都要 pending 这个请求的结果
sciooga
2016-12-07 10:50:48 +08:00
关键词 惊群问题
twogoods
2016-12-07 12:30:39 +08:00
@lhbc 如果业务是 insert 一条数据,那幂等应该怎么处理?最直白就是一秒的相同请求只执行一个其他都丢弃
phpman
2016-12-07 12:33:25 +08:00
重复请求有问题么?一秒内重复请求和一分钟内重复请求有什么区别呢?楼主还是要把业务逻辑表述清楚
ihuotui
2016-12-07 12:56:29 +08:00
nginx session sticky 保持会话
iphash 负载策略
requestToken 过滤重复提交
Infernalzero
2016-12-07 13:00:59 +08:00
session 里加 token
具体可以搜 session 重复提交
jwdstefanie
2016-12-07 13:55:27 +08:00
重复提交 前台通过 ajax 提交的时候就可以过滤了 jquery 的 ajax 方法有个 gobal 属性建议看看
honam
2016-12-07 14:10:18 +08:00
@xjp +1 ,锁的 key 根据请求参数来定,你有什么特别的实现相互交流交流
twogoods
2016-12-07 14:16:02 +08:00
@ihuotui requestToken 过滤重复提交 能否给一个详细的思路
tofishes
2016-12-07 14:54:39 +08:00
@jwdstefanie 数据完整性、安全性等不要依赖前端,必须后端解决。
EthanLiao
2016-12-07 17:28:07 +08:00
@honam @xjp 具体的实现过程是怎样的,可否分享一下。
tinyproxy
2016-12-07 18:04:28 +08:00
hoythan
2016-12-07 18:22:11 +08:00
requestID 年月日时分秒毫秒微妙纳秒+8 位随机数。
frankerzeng
2016-12-07 18:55:23 +08:00
superrz
2016-12-07 18:59:13 +08:00
从前端开始处理掉这个问题吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/325814

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX