最大的 DDos 来自同事 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
fionasit007
V2EX    程序员

最大的 DDos 来自同事

  •  
  •   fionasit007 6 小时 18 分钟前 3990 次点击
    给的数据接口,服务器动不动就被打死,一排查前端老是重复请求定时请求,上百万的活跃量承受不住啊
    38 条回复    2025-12-31 16:55:10 +08:00
    CodeCodeStudy
        1
    CodeCodeStudy  
       6 小时 4 分钟前
    直接限流就好了,同一个 IP 同一个用户同一个接口限制某段时间内只能访问 N 次,其他的拒绝
    fionasit007
        2
    fionasit007  
    OP
       5 小时 54 分钟前
    @CodeCodeStudy #1 客户端基数太大了,都是真实 ip 和请求,限是限不完的,主要这种数据接口应该是用户主动调用的,要是真给限流了,要是真想去看数据反而被限了,这类情况而且这类情况不止一次一个接口了,主要感觉还是前端同事对业务不熟和考虑不周
    guo4224
        3
    guo4224  
       5 小时 20 分钟前 via iPhone
    加个缓存呗
    jiangzm
        4
    jiangzm  
       5 小时 3 分钟前
    标题党
    gkiwi
        5
    gkiwi  
       5 小时 1 分钟前
    @fionasit007 沟通明确下场景,对业务不熟导致的设计问题,那就解决设计问题~
    twofox
        6
    twofox  
       5 小时 0 分钟前
    这是没沟通好呗。业务场景是否需要真的实时更新?轮询改 websocket ? SSE ?反正你们确定这个业务场景是需要的,那就可以改。改不动再加机器
    finab
        7
    finab  
       4 小时 56 分钟前
    说实话都有问题,甚至后端更大
    给出接口时是否设想过接口会被如何调用,是否会被定时器轮询,如果不能接受定时器轮询应该提前给出其他的方案。
    sojourner
        8
    sojourner  
       4 小时 56 分钟前
    设置单位时间内接口请求数超过某个阈值就记录日志,在测试期盯着这条日志,监测到就让前端改。
    Chaidu
        9
    Chaidu  
       4 小时 46 分钟前   4
    我以前参与的一个项目就是,用户点任何功能,APP 都向后端 API 并发请求很多次(接口一样,请求内容,返回内容一样)。我是后端+运维,我这个情况告诉 APP 端开发,让他排查 APP 端的 Bug ,他秒回说:“我这边没任何问题,是你的问题,自己找原因”。然后我把后端日志和 nginx 日志发出来,他就说是我诬陷他、公报私仇(我跟他除了工作上的沟通,没有其他交集,哪来的仇?),各种脏话骂我。我一脸懵逼,不再说话。几个领导都不懂技术,他们见 APP 端的开发这样在群里喷我,我不说话,就理所当然的认为是我理亏,接连站出来批评我。。。
    bbbblue
        10
    bbbblue  
       4 小时 42 分钟前
    @finab cf 前面有次自己服务瘫了就是前端 useEffect 死循环无限调用
    这种变成 DDos 业务上基本没办法了 要么服务器挂了业务挂了 要么用户侧感觉不可用(限流了 但是服务器没挂)
    wwd179
        11
    wwd179  
       3 小时 58 分钟前
    以为是同事们对你的大脑发起了 ddos
    fionasit007
        12
    fionasit07  
    OP
       3 小时 47 分钟前
    @finab #7 a 模块里面有 a1,a2 接口,a 接口需要一直请求刷新,b 接口只是初始化请求;他每次刷新调用 a1 接口时直接调用 a 模块,导致 a2 接口也被调用了,千叮嘱万嘱咐都是没用的,这种情况出现过好几次了
    fionasit007
        13
    fionasit007  
    OP
       3 小时 46 分钟前
    @guo4224 #3 再考虑了,但是实际这个功能根本使用率一点不高,只能为了弥补这个问题多此一举了
    fionasit007
        14
    fionasit007  
    OP
       3 小时 25 分钟前
    @Chaidu #9 这种就很很头疼,每次反复确认说没问题,然后我还得看日志找原因,让他再去看是不是调用有问题
    siweipancc
        15
    siweipancc  
       3 小时 24 分钟前 via iPhone
    很常见的场景啊,改呗,订阅模式
    fionasit007
        16
    fionasit007  
    OP
       3 小时 23 分钟前
    @sojourner #8 你这个可以试试,下次测试期我加个频率监控
    fionasit007
        17
    fionasit007  
    OP
       3 小时 23 分钟前
    @wwd179 #11 哈哈哈
    wanniwa
        18
    wanniwa  
       3 小时 16 分钟前
    @Chaidu 你为啥不说话。。。
    liuidetmks
        19
    liuidetmks  
       2 小时 52 分钟前
    自己优化吧这次,
    你不在测试阶段暴露出问题,现在上线了
    你再让别人配合你优化改动,比较难。(在别人老板看来,业务上线了,是好的,服务器扛不住,是服务器优化的问题)
    别人即使改了回有怨气,老板会觉得你能力不行
    mingliao
        20
    mingliao  
       2 小时 45 分钟前   1
    在程序中记录他的犯罪情况,按一个最小周期统计指标,整体反馈到群里,艾特他的 boss 亦或更大的 boss ,讲述海量数据请求后台需要的机器成本,一个接口类比到一个功能模块类比到一个 app ,讲清楚他的行为带来的代价。

    当然也可以直接在群里喷他,心中有火,喷出来挺好的,骂他两句没啥,憋坏了自己不好。

    蹲一个后续
    Razio
        21
    Razio  
       2 小时 45 分钟前
    重复请求前端该去优化,但并不代表后端可以不做限制
    fionasit007
        22
    fionasit007  
    OP
       1 小时 59 分钟前
    @Razio #21 限制都是有限制的,光数据来说我们都是做了加密的,但是这种请求完完全全都是正常的请求,而且你再限制能抵得住日活百万的重复请求吗,相当于百万个客户端来攻击你,不是一般的攻击手段,我是解决不了了
    fionasit007
        23
    fionasit007  
    OP
       1 小时 55 分钟前
    @liuidetmks #19 这不是我测试的啊,接口本身我肯定测试了的,我给他前说了接口咋用的,不能重复请求的,我前面其他楼举了例子( a 模块里面有 a1,a2 接口,a 接口需要一直请求刷新,b 接口只是初始化请求;他每次刷新调用 a1 接口时直接调用 a 模块,导致 a2 接口也被调用了,千叮嘱万嘱咐都是没用的,这种情况出现过好几次了),光数据来说我们都是做了加密的,但是这种请求完完全全都是正常的请求,而且你再限制能抵得住日活百万的重复请求吗,相当于百万个客户端来攻击你,不是一般的攻击手段,我是解决不了了,至于你说的老板这些他也懂啊,谁没事再客户端写个重复请求请求客户端,以前遇到过这种他直接他让我改域名,老域名不用了
    fionasit007
        24
    fionasit007  
    OP
       1 小时 50 分钟前
    @mingliao #20 我们后端服务器配置和成本实际挺低的,虽然日活高,但是我们也不是盲目去加配置,因为有的接口或者服务就不是为了高并发去做的,遇到这种情况后续都是给他说改了,主要是经常这样搞,但是群里说这个就算了,抛开这类小问题氛围还是挺好的哈哈
    hushuikun
        25
    hushuikun  
       1 小时 15 分钟前
    @Chaidu 你不说话,为什么发出来让我们难受……
    Chaidu
        26
    Chaidu  
       1 小时 8 分钟前
    @wanniwa #18
    @hushuikun #25
    我把后端日志和 nginx 日志都拿出来了,懂技术的一看就知道是怎么回事。问题在于没人懂技术,我说再多都没用!
    fadaixiaohai
        27
    fadaixiaohai  
       1 小时 6 分钟前
    测试阶段你自己就要瞄一眼日志了
    不太懂后端,不过像这种异常流量,一般应该是网关来拦截吧
    不然带宽还有 cpu 可能都被占完,甚至宕机
    rabbbit
        28
    rabbbit  
       1 小时 6 分钟前
    直接限制 a2 接口调用频率呗,这样问题直接就在测试的时候暴漏出来了。
    angeni
        29
    angeni  
       1 小时 5 分钟前
    那叫 cc
    vultr
        30
    vultr  
       48 分钟前
    @Chaidu 和老板说服务器不行了,要升级,升级还不行就做分布式微服务等,哈哈。
    kfpenn
        31
    kfpenn  
       46 分钟前
    后端只能做缓存了,前端尽量下版本更新吧
    fionasit007
        32
    fionasit007  
    OP
       44 分钟前
    @rabbbit #28 那用户主动点击咋办,a2 这个接口不是用户重复调用的,本来就是一个使用率很低的接口,但是因为前端搞错了,给放到循环里去了
    fionasit007
        33
    fionasit007  
    OP
       39 分钟前
    @fadaixiaohai #27 测试阶段数据较少,没在意这种重复请求,因为我们日活挺高的,再加上这个接口本来不是为了高并发做的,使用率极低,但是被前端误放进重复请求逻辑里了,对于服务器来说这个都是正常请求
    fionasit007
        34
    fionasit007  
    OP
       37 分钟前
    @angeni #29 搞错了
    SoulFlame
        35
    SoulFlame  
       28 分钟前
    你这算什么,我有个业务是异步接口,提交任务后,让前端轮询调用查询接口,文档还写了建议轮询间隔 5 秒。
    他直接死循环给我调用。。。一秒几十个请求打过来。。。还好在测试阶段被我发现了,上线上那不得炸了。。。
    rabbbit
        36
    rabbbit  
       27 分钟前
    这个还是看业务场景吧,只是举个栗子,在保证服务器不会被打瘫的前提下把锅甩给前端。

    例如
    1 上 redis 缓存
    2 增加 a2 接口的调用难度,例如改成 websockets

    方便讲讲这块的业务逻辑吗?是啥业务,a2 是干嘛用的。
    guanzhangzhang
        37
    guanzhangzhang  
       26 分钟前
    @Chaidu #9 看着像是类似 react 那样的副作用没处理好,多次执行
    kuanat
        38
    kuanat  
       25 分钟前
    如果前后端现在的工作模式无法改变,有一个解决方式是加一层 BFF(backend for frontend),让前端的请求先走到带缓存的 BFF 层,前端自己去做 BFF 的缓存策略。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4563 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 09:20 PVG 17:20 LAX 01:20/a> JFK 04:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86