1
CodeCodeStudy 14 小时 29 分钟前
直接限流就好了,同一个 IP 同一个用户同一个接口限制某段时间内只能访问 N 次,其他的拒绝
|
2
fionasit007 OP @CodeCodeStudy #1 客户端基数太大了,都是真实 ip 和请求,限是限不完的,主要这种数据接口应该是用户主动调用的,要是真给限流了,要是真想去看数据反而被限了,这类情况而且这类情况不止一次一个接口了,主要感觉还是前端同事对业务不熟和考虑不周
|
3
guo4224 13 小时 44 分钟前 via iPhone
加个缓存呗
|
4
jiangzm 13 小时 27 分钟前
标题党
|
5
gkiwi 13 小时 25 分钟前
@fionasit007 沟通明确下场景,对业务不熟导致的设计问题,那就解决设计问题~
|
6
twofox 13 小时 25 分钟前
这是没沟通好呗。业务场景是否需要真的实时更新?轮询改 websocket ? SSE ?反正你们确定这个业务场景是需要的,那就可以改。改不动再加机器
|
7
finab 13 小时 21 分钟前
说实话都有问题,甚至后端更大
给出接口时是否设想过接口会被如何调用,是否会被定时器轮询,如果不能接受定时器轮询应该提前给出其他的方案。 |
8
sojourner 13 小时 20 分钟前
设置单位时间内接口请求数超过某个阈值就记录日志,在测试期盯着这条日志,监测到就让前端改。
|
9
Chaidu 13 小时 10 分钟前 我以前参与的一个项目就是,用户点任何功能,APP 都向后端 API 并发请求很多次(接口一样,请求内容,返回内容一样)。我是后端+运维,我这个情况告诉 APP 端开发,让他排查 APP 端的 Bug ,他秒回说:“我这边没任何问题,是你的问题,自己找原因”。然后我把后端日志和 nginx 日志发出来,他就说是我诬陷他、公报私仇(我跟他除了工作上的沟通,没有其他交集,哪来的仇?),各种脏话骂我。我一脸懵逼,不再说话。几个领导都不懂技术,他们见 APP 端的开发这样在群里喷我,我不说话,就理所当然的认为是我理亏,接连站出来批评我。。。
|
10
bbbblue 13 小时 6 分钟前
@finab cf 前面有次自己服务瘫了就是前端 useEffect 死循环无限调用😂
这种变成 DDos 业务上基本没办法了 要么服务器挂了业务挂了 要么用户侧感觉不可用(限流了 但是服务器没挂) |
11
wwd179 12 小时 23 分钟前
以为是同事们对你的大脑发起了 ddos
|
12
fionasit007 OP @finab #7 a 模块里面有 a1,a2 接口,a 接口需要一直请求刷新,b 接口只是初始化请求;他每次刷新调用 a1 接口时直接调用 a 模块,导致 a2 接口也被调用了,千叮嘱万嘱咐都是没用的,这种情况出现过好几次了
![]() |
13
fionasit007 OP @guo4224 #3 再考虑了,但是实际这个功能根本使用率一点不高,只能为了弥补这个问题多此一举了
|
14
fionasit007 OP @Chaidu #9 这种就很很头疼,每次反复确认说没问题,然后我还得看日志找原因,让他再去看是不是调用有问题
|
15
siweipancc 11 小时 48 分钟前 via iPhone
很常见的场景啊,改呗,订阅模式
|
16
fionasit007 OP @sojourner #8 你这个可以试试,下次测试期我加个频率监控
|
17
fionasit007 OP @wwd179 #11 哈哈哈
![]() |
19
liuidetmks 11 小时 16 分钟前
自己优化吧这次,
你不在测试阶段暴露出问题,现在上线了 你再让别人配合你优化改动,比较难。(在别人老板看来,业务上线了,是好的,服务器扛不住,是服务器优化的问题) 别人即使改了回有怨气,老板会觉得你能力不行 |
20
mingliao 11 小时 10 分钟前 在程序中记录他的犯罪情况,按一个最小周期统计指标,整体反馈到群里,艾特他的 boss 亦或更大的 boss ,讲述海量数据请求后台需要的机器成本,一个接口类比到一个功能模块类比到一个 app ,讲清楚他的行为带来的代价。
当然也可以直接在群里喷他,心中有火,喷出来挺好的,骂他两句没啥,憋坏了自己不好。 蹲一个后续 |
21
Razio 11 小时 9 分钟前
重复请求前端该去优化,但并不代表后端可以不做限制
|
22
fionasit007 OP @Razio #21 限制都是有限制的,光数据来说我们都是做了加密的,但是这种请求完完全全都是正常的请求,而且你再限制能抵得住日活百万的重复请求吗,相当于百万个客户端来攻击你,不是一般的攻击手段,我是解决不了了
![]() |
23
fionasit007 OP @liuidetmks #19 这不是我测试的啊,接口本身我肯定测试了的,我给他前说了接口咋用的,不能重复请求的,我前面其他楼举了例子( a 模块里面有 a1,a2 接口,a 接口需要一直请求刷新,b 接口只是初始化请求;他每次刷新调用 a1 接口时直接调用 a 模块,导致 a2 接口也被调用了,千叮嘱万嘱咐都是没用的,这种情况出现过好几次了),光数据来说我们都是做了加密的,但是这种请求完完全全都是正常的请求,而且你再限制能抵得住日活百万的重复请求吗,相当于百万个客户端来攻击你,不是一般的攻击手段,我是解决不了了,至于你说的老板这些他也懂啊,谁没事再客户端写个重复请求请求客户端,以前遇到过这种他直接他让我改域名,老域名不用了
|
24
fionasit007 OP @mingliao #20 我们后端服务器配置和成本实际挺低的,虽然日活高,但是我们也不是盲目去加配置,因为有的接口或者服务就不是为了高并发去做的,遇到这种情况后续都是给他说改了,主要是经常这样搞,但是群里说这个就算了,抛开这类小问题氛围还是挺好的哈哈
![]() |
26
Chaidu 9 小时 33 分钟前
|
27
fadaixiaohai 9 小时 30 分钟前
测试阶段你自己就要瞄一眼日志了
不太懂后端,不过像这种异常流量,一般应该是网关来拦截吧 不然带宽还有 cpu 可能都被占完,甚至宕机 |
28
rabbbit 9 小时 30 分钟前
直接限制 a2 接口调用频率呗,这样问题直接就在测试的时候暴漏出来了。
|
29
angeni 9 小时 29 分钟前
那叫 cc
|
31
kfpenn 9 小时 10 分钟前
后端只能做缓存了,前端尽量下版本更新吧
|
32
fionasit007 OP @rabbbit #28 那用户主动点击咋办,a2 这个接口不是用户重复调用的,本来就是一个使用率很低的接口,但是因为前端搞错了,给放到循环里去了
|
33
fionasit007 OP @fadaixiaohai #27 测试阶段数据较少,没在意这种重复请求,因为我们日活挺高的,再加上这个接口本来不是为了高并发做的,使用率极低,但是被前端误放进重复请求逻辑里了,对于服务器来说这个都是正常请求
|
34
fionasit007 OP @angeni #29 搞错了
![]() |
35
SoulFlame 8 小时 52 分钟前
你这算什么,我有个业务是异步接口,提交任务后,让前端轮询调用查询接口,文档还写了建议轮询间隔 5 秒。
他直接死循环给我调用。。。一秒几十个请求打过来。。。还好在测试阶段被我发现了,上线上那不得炸了。。。 |
36
rabbbit 8 小时 51 分钟前
这个还是看业务场景吧,只是举个栗子,在保证服务器不会被打瘫的前提下把锅甩给前端。
例如 1 上 redis 缓存 2 增加 a2 接口的调用难度,例如改成 websockets 方便讲讲这块的业务逻辑吗?是啥业务,a2 是干嘛用的。 |
37
guanzhangzhang 8 小时 50 分钟前
@Chaidu #9
看着像是类似 react 那样的副作用没处理好,多次执行 |
38
kuanat 8 小时 49 分钟前
如果前后端现在的工作模式无法改变,有一个解决方式是加一层 BFF(backend for frontend),让前端的请求先走到带缓存的 BFF 层,前端自己去做 BFF 的缓存策略。
|
39
HaibaraDP 7 小时 38 分钟前
乱掉接口能让后端优化我是没想到的,哪天调用频率又增加一个数量级就乐了
|
40
opengps 7 小时 7 分钟前
这不叫 ddos ,这只是大量轮训
|
41
wxg4net 6 小时 6 分钟前
之前遇到的前端 ddos 是
setInterval(() => { console.log("每 2 秒执行一次"); }, 20000000000000); |
42
hefish 6 小时 4 分钟前
神经。 我特么真后悔点进来。
|
43
seers 4 小时 14 分钟前 via Android
@Chaidu 小伙子太年轻,你在 NGINX 直接加个 ratelimit 不就是了,美其名曰限流减轻服务器压力,领导说为啥要限制?因为他 app 刷爆了,这不就转移了矛盾
|
45
shuiduoduo 2 小时 48 分钟前
@Chaidu 你不给他限流
|
46
clarkethan 1 小时 49 分钟前
建议你给接口的时候,写一下使用建议和注意事项,如果真乱搞,直接屌人
|