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

最大的 DDos 来自同事

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

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

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

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

    方便讲讲这块的业务逻辑吗?是啥业务,a2 是干嘛用的。
    guanzhangzhang
        37
    guanzhangzhang  
       8 小时 50 分钟前
    @Chaidu #9 看着像是类似 react 那样的副作用没处理好,多次执行
    kuanat
        38
    kuanat  
       8 小时 49 分钟前
    如果前后端现在的工作模式无法改变,有一个解决方式是加一层 BFF(backend for frontend),让前端的请求先走到带缓存的 BFF 层,前端自己去做 BFF 的缓存策略。
    HaibaraDP
        39
    HaibaraDP  
       7 小时 38 分钟前
    乱掉接口能让后端优化我是没想到的,哪天调用频率又增加一个数量级就乐了
    opengps
        40
    opengps  
       7 小时 7 分钟前
    这不叫 ddos ,这只是大量轮训
    wxg4net
        41
    wxg4net  
       6 小时 6 分钟前
    之前遇到的前端 ddos 是

    setInterval(() => {
    console.log("每 2 秒执行一次");
    }, 20000000000000);
    hefish
        42
    hefish  
       6 小时 4 分钟前
    神经。 我特么真后悔点进来。
    seers
        43
    seers  
       4 小时 14 分钟前 via Android
    @Chaidu 小伙子太年轻,你在 NGINX 直接加个 ratelimit 不就是了,美其名曰限流减轻服务器压力,领导说为啥要限制?因为他 app 刷爆了,这不就转移了矛盾
    106npo
        44
    106npo  
       3 小时 51 分钟前 via Android
    @SoulFlame 你会发现不少进度查询是在后端做的超时 🤣
    shuiduoduo
        45
    shuiduoduo  
       2 小时 48 分钟前
    @Chaidu 你不给他限流
    clarkethan
        46
    clarkethan  
       1 小时 49 分钟前
    建议你给接口的时候,写一下使用建议和注意事项,如果真乱搞,直接屌人
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1139 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 202ms · UTC 17:44 · PVG 01:44 · LAX 09:44 · JFK 12:44
    ♥ Do have faith in what you're doing.