V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
justthewayyouare
V2EX  ›  程序员

服务接受请求过多就崩溃

  •  
  •   justthewayyouare · 2023-10-24 08:26:17 +08:00 via iPhone · 4476 次点击
    这是一个创建于 367 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我同一时间给服务器发送 1000 个 ajax 请求,服务器就崩了,得重启。 万一有人想搞我的网站,也同时发 1000 个 ajax 过来,那我网站不就崩了? 有没有办法让服务器接受大量请求不崩溃的办法?

    27 条回复    2023-10-24 15:27:21 +08:00
    zjsxwc
        1
    zjsxwc  
       2023-10-24 08:28:42 +08:00
    - jvm 的加大内存。
    - 改换用 php-fpm 重写。
    - 改用 serverless 重新。
    gbw1992
        2
    gbw1992  
       2023-10-24 08:29:52 +08:00   ❤️ 1
    lsk569937453
        3
    lsk569937453  
       2023-10-24 08:30:51 +08:00   ❤️ 4
    如果你的服务器并发超过 1000 的话,那就赚老鼻子钱了,招高级程序员给你打工吧。
    seers
        4
    seers  
       2023-10-24 08:35:39 +08:00 via iPhone
    上消息队列
    opengps
        5
    opengps  
       2023-10-24 08:37:28 +08:00
    1000 并发(并发一般是指 1 秒内的并发请求数量)是非常优秀的业务指标了。
    这个时候你需要的是多机器多站点的去做负载均衡做集群架构部署,而不是拼了命的提高单机性能。道理就好比你的 cpu 主频这么多年也就是个 GHz 了,于其提高单个性能不如再来一个 cpu 满足需要
    sdjl
        6
    sdjl  
       2023-10-24 08:51:52 +08:00
    那我网站不就崩了? 是的,就崩了。

    有没有办法让服务器接受大量请求不崩溃的办法? 对方要搞你,主要是搞钱(例如搞你的 CDN 流量费),不是搞崩。通常情况下,怕搞钱不怕搞崩。

    说回楼主的问题,如何提高并发能力。

    1 、静态资源都走 CDN 。
    2 、能缓存等请求尽量缓存,特别是重复的数据库查询。
    3 、开多进程守护,例如 8 个、80 个、200 个等等。
    4 、进程之间记得共享缓存数据,节约内存和时间。
    5 、做好并发写攻击的防御(特别是涉及到金钱的程序)。
    6 、该崩就崩,人都是要死的,何况程序,别怕。
    sdjl
        7
    sdjl  
       2023-10-24 08:53:06 +08:00
    2 、能缓存请求就尽量缓存,特别是重复的数据库查询。
    blackeeper
        8
    blackeeper  
       2023-10-24 08:53:53 +08:00
    想让服务器不蹦?那么你可以选择换
    1 ,更好的 CPU 、
    2 ,更大的内存条
    3 ,速度更快的硬盘 SSD
    4 ,网口,以及超大带宽
    5 ,换操作系统
    6 ,.......
    还有一堆可以升级的地方,都是可以避免崩溃的地方,关键在于你业务服务器的瓶颈在哪儿
    sdjl
        9
    sdjl  
       2023-10-24 08:56:19 +08:00
    “服务器就崩了,得重启” 这里可能是因为你的进程有异常,没有 catch 住,然后进程死掉了。

    建议从最外围运行的地方 catch 异常,如发现未知异常就 catch 住,然后重启进程或线程,确保异常不会导致进程变“死进程”。
    dode
        10
    dode  
       2023-10-24 09:01:59 +08:00
    限制连接数量和请求速度
    sumarker
        11
    sumarker  
       2023-10-24 09:03:44 +08:00
    加机器 做负载
    dif
        12
    dif  
       2023-10-24 09:13:48 +08:00
    个人网站,崩就崩了。别误伤账单就行。
    另外,合理利用缓存,尽量使用静态化解决。
    nuyan
        13
    nuyan  
       2023-10-24 09:20:49 +08:00
    想搞你,无非你能做的就是技术+金钱。最简单的就是花钱往死往死加机器。
    BinaryDH
        14
    BinaryDH  
       2023-10-24 09:41:40 +08:00
    真正的解决办法是,限流熔断
    newaccount
        15
    newaccount  
       2023-10-24 09:57:59 +08:00
    个人网站 1000 并发……
    公司网站 tomcat 做到 20 并发能不崩我就不继续测了,通过负载均衡拉到七八十应付爬虫就足够足够的
    realJamespond
        16
    realJamespond  
       2023-10-24 10:00:12 +08:00
    把带宽调低,物理限速
    janus77
        17
    janus77  
       2023-10-24 10:05:03 +08:00
    理论上是这样,可是同时发 1000 个请求也是要很高成本的,换句话说如果你的项目不是企业级项目,没有商业价值,那就不会有哪个黑客来花大价钱攻击你,因为他得不到什么东西。
    当然如果你只是单纯想提高一下安全性和性能的话,楼上很多做法都可以来一遍,各个环节能提升的地方都可以提升,就看你愿不愿意花钱了
    IDAEngine
        18
    IDAEngine  
       2023-10-24 10:06:03 +08:00
    开 API 网关,把高价值客户调度到高性能服务器,低价值客户调度到易受攻击的节点
    jioswu
        19
    jioswu  
       2023-10-24 10:15:10 +08:00
    换语言是成本最低的,前提是自己会,否则加机器上负载均衡
    pkoukk
        20
    pkoukk  
       2023-10-24 10:34:29 +08:00
    你这其实是两个问题
    1 、怎么防止被打
    2 、怎么提高服务性能
    方案太多了,一切以你的预算为前提
    qwertyzzz
        21
    qwertyzzz  
       2023-10-24 10:37:20 +08:00
    自己先主动崩
    freezebreze
        22
    freezebreze  
       2023-10-24 10:52:16 +08:00
    鸵鸟模式
    dashabi
        23
    dashabi  
       2023-10-24 12:29:49 +08:00
    并发 1000 ?我站每天有 8 万访问,在线人数 2000-3000.都没达到 并发 1000 、、厉害啊。
    是每个请求处理时间长???有 1000 并发,,弄个高档服务器。
    MeteorCat
        24
    MeteorCat  
       2023-10-24 12:45:22 +08:00 via Android
    买高防清洗掉攻击 IP
    alsas
        25
    alsas  
       2023-10-24 14:01:47 +08:00
    加机器
    kkkbbb
        26
    kkkbbb  
       2023-10-24 15:00:36 +08:00
    @dashabi 他是模拟
    ShuWei
        27
    ShuWei  
       2023-10-24 15:27:21 +08:00
    先在入口限流吧,然后再排查下为什么彻底宕了,估计是有 bug 修修
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1033 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:27 · PVG 07:27 · LAX 16:27 · JFK 19:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.