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

集思广益,上司提了个需求要短时间可以扛住 200 万 req/s

  •  
  •   owen800q · 2023-12-14 10:37:03 +08:00 via iPhone · 23317 次点击
    这是一个创建于 370 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说下背景,跨境电商,主要是 tiktok 直播带货,我们是下游平台,平台技术架构是用 aws serverless lambda, api gateway 和 dynamodb

    一开始 aws 是给了 3000 的 concurrency quota, 后来业务爆发性增长,年中时我们向 aws 申请加到了 5 万 lambda 并发数,本来以为应该可以应付一切了,但上星期日志出现了大量 500 internal server error, 原来是达到 5 万+了,我们问了下 aws 技术支持,说我们当天的峰值到达了 12 万+ req/s

    导致大量商家无法创建下游订单, 大老板直接提了个要求是不允许再发生这种情况, 要求要扛住至少 200 万 请求

    Api gateway 和 dynamodb 是没性应限制的,主要是 lambda 并发数提不上去, aws 那边说最多只能把 lambda 最大并发只能提到 100k

    第 1 条附言  ·  2023-12-14 14:02:33 +08:00
    Aws Lambda 并发数限制是 每个帐号算
    第 2 条附言  ·  2023-12-14 20:21:13 +08:00
    后续更新,根据 v 友的建议,我们排查了一整天,发现当天实际有效请求刚好是突破了 4 万多,

    这 4 万多请求是来自依赖我们底层支持的第三方调用 都是有效请求, lambda A 是直接面向本次高并发的唯一 lambda ,

    同一时间,由于我们在 aws 控制台,设置了这个 lambda A 只能最多用 45000 个並發执行实例, 其他 5000 是供其他 lambda 调用,这导致在 45001 之后的请求出现 429 too many requests, api gateway 返回了 500 (暂时不知道什麼原因,aws 在排查)给上游,某上游不知道为什么无限异步 retry, 由于该上游的 IP 段在白名单列表, 我们没有在 api gateway 层对这个 IP 设置 rate limit, 导致 api gateway 把所有来自他请求转发到 lambda , 即使后来我们在某次 retry 返回了 201 , 还是没有停, 把後續所有請求都堵死了
    第 3 条附言  ·  2023-12-15 10:08:48 +08:00
    那些在这阴阳怪气的人是不时有病,直接出去吧,我没拿枪逼你在这讨论,直接出去不送
    159 条回复    2023-12-15 18:51:34 +08:00
    1  2  
    ah64zzpk
        101
    ah64zzpk  
       2023-12-14 17:59:51 +08:00
    我靠你们赚多少钱,什么平台,也太爽了。
    encro
        102
    encro  
       2023-12-14 18:05:08 +08:00
    你考虑加一个防火墙,防住那 12 万里面超过 10 万的机器人?
    idc906
        103
    idc906  
       2023-12-14 18:45:57 +08:00 via iPhone
    你检查下带宽和 cpu 吧,感觉是被 CC 攻击了,你说的这个量实在是很大,感觉是同行刷的量,我这边是做安全的,也可以交流下,名字是 VX 。
    lipcao
        104
    lipcao  
       2023-12-14 19:02:45 +08:00
    mark 看看大佬的解决方案
    hangszhang
        105
    hangszhang  
       2023-12-14 19:03:31 +08:00
    @wqhui #10 抢票的 QPS 是千万量级的,双十一淘宝的列表页能到百万,底层接口调用次数会被放大,并发量一下子就上来了
    southwolf
        106
    southwolf  
       2023-12-14 19:20:22 +08:00
    真要有这么大的并发 你们就该去跟 AWS 单独谈了...

    这么大量的话 就要开始分析一下读写比例, 如果大量的读多写少, 甚至可以考虑定期静态化成 JSON 丢在 S3 + CDN 做 static hosting...
    xyjincan
        107
    xyjincan  
       2023-12-14 19:21:36 +08:00
    kafka 消息队列集群,ssd
    owen800q
        108
    owen800q  
    OP
       2023-12-14 19:59:05 +08:00 via iPhone
    @8355 主要是一开始没想过能有场景可以突破 aws 给我们的限额,我们查看了下 cloudwatch, 排除上星期突如其来的高并发,2023 年最高也就 1 万多个 req/s
    deterrer
        109
    deterrer  
       2023-12-14 20:01:39 +08:00
    @keshawnvan 很精准,怀疑你是某猫厂的
    Achilless
        110
    Achilless  
       2023-12-14 20:37:37 +08:00
    2w 你老板都要笑嘻了,AWS 自己都达不到 200w/s 吧,听到这个要求他们估计吓坏了
    paradoxs
        111
    paradoxs  
       2023-12-14 20:53:59 +08:00
    各位认真回答的,我真的是笑死。

    还直播带货呢? 你咋直播的 ? 让主播写你们的网址,然后让用户打开你们的网站,再下单吗?

    说这话,根本就不现实。
    paradoxs
        112
    paradoxs  
       2023-12-14 20:58:41 +08:00
    根本不可能有那么多用户会脱离 tiktok 平台去下单, 正常的场景就是在 tiktok 软件内完成整个购物流程。
    你也不会遇到什么所谓的并发压力。


    除非你的业务是虚构的
    yifangtongxing28
        113
    yifangtongxing28  
       2023-12-14 21:06:44 +08:00
    lambda 不是这么用的,你的场景明显需要动态扩容的后端集群
    springz
        114
    springz  
       2023-12-14 21:11:43 +08:00
    京东+阿里+拼多多 这三家加起来都不一定有楼主量大,算了吧,估计面试题套答案。
    springz
        115
    springz  
       2023-12-14 21:14:51 +08:00
    底层接口碰到这种情况难道不是协调业务方合并优化吗?这量都 CC DDoS 自己了。
    546L5LiK6ZOt
        116
    546L5LiK6ZOt  
       2023-12-14 21:32:33 +08:00
    记得淘宝双 11 也是两三百万 qps
    wdlth
        117
    wdlth  
       2023-12-14 21:40:35 +08:00
    https://blog.cloudflare.com/ddos-threat-report-2023-q3-zh-cn
    https://radar.cloudflare.com/reports/ddos-2023-q3
    200 万 QPS 的请求差不多达到 HTTP/2 Rapid Reset 漏洞的攻击和中东两地网站的平均攻击量……
    owen800q
        118
    owen800q  
    OP
       2023-12-14 21:43:09 +08:00 via iPhone
    @paradoxs 看来你对 TikTok shop 一无所知。没建设性的讨论出去吧不送
    owen800q
        119
    owen800q  
    OP
       2023-12-14 21:44:48 +08:00 via iPhone
    @paradoxs 我上面哪一个字说用户脱离 TikTok ?
    27149
        120
    27149  
       2023-12-14 22:14:20 +08:00
    产品 mark 下,这个话题有意思
    inframe
        121
    inframe  
       2023-12-14 22:32:42 +08:00
    可以考虑下云自己建服务机房了
    Features
        122
    Features  
       2023-12-14 22:54:56 +08:00   ❤️ 5
    基本确定了,OP 是个菜鸟,缺乏运维的基本常识
    系统卡 bug 了,第一时间不是怀疑系统出啥毛病了
    着手检查和从业务代码层面优化问题,而是兴匆匆跑来 V 站装波大 B

    “看看,我司系统每秒 12W 的并发,并且还要提升到 200W ,我够厉害吧”

    结果出了洋相,装 B 失败
    liangch
        123
    liangch  
       2023-12-14 23:15:03 +08:00
    你以为 tb 级别的流量,一两句话就能有方案了?
    owen800q
        124
    owen800q  
    OP
       2023-12-14 23:15:08 +08:00 via iPhone
    @Features 这种浪费大家时间的回覆 直接 block 了
    ilcn
        125
    ilcn  
       2023-12-15 03:10:38 +08:00   ❤️ 2
    @owen800q 说句不好听的 你才是浪费大家时间。当然了 开心一笑也不能算是完全浪费。
    Zxien
        126
    Zxien  
       2023-12-15 08:43:36 +08:00
    我司有抗 DDOS
    yongzhenchen682
        127
    yongzhenchen682  
       2023-12-15 08:59:50 +08:00
    就事论事,虽然 lamba 开了 5w 实例,也假设 5w 实例基本都在处理业务,要处理 12w 的 qps ,则 12/5 说明了你们一个实例 1s 内处理不了 2.4 笔,实例被占用了没被释放出来。
    同推论 200w/5w=40 笔每秒。也就是说你们内部做压测至少要优化到 tps 要大于 40 的结论,结合网络延迟等因素得出一个 tps 。至于 5w 并发是否有必要,似乎没有这么必要?
    dayeye2006199
        128
    dayeye2006199  
       2023-12-15 09:21:34 +08:00 via Android
    卖一块钱的百洁布,一个小时也可以卖七千万了,这是下一个 pdd 节奏。

    上队列,然后 lambda 慢慢处理啊
    salmon5
        129
    salmon5  
       2023-12-15 09:24:17 +08:00
    举个例子:OP 说他有 100 亿资产,来 v2 问大家该怎么花。
    xwayway
        130
    xwayway  
       2023-12-15 10:02:31 +08:00   ❤️ 1
    @yongzhenchen682 #127 没用过 lambda 。看了你的才反应过来,12w/s 只是峰值流量,不可能一直是这个流量,看来 lambda 和普通的服务器还不太一样,一个 lambda 同一时间只能处理一个请求,gateway 只负责转发请求到 lambda ,发现 lambda 并发满了后就直接快速失败了,不像普通应用,还会阻塞,等待超时了才会返回失败。
    owen800q
        131
    owen800q  
    OP
       2023-12-15 10:03:51 +08:00 via iPhone
    @yongzhenchen682 没错。如果 lambda 能及时释放 出来,5 万的限额是可以应付那 12 万请求的
    YienX
        132
    YienX  
       2023-12-15 10:05:39 +08:00
    @x86 什么都要加钱加钱,直接加钱就可以那我请你来干嘛(🐶)
    owen800q
        133
    owen800q  
    OP
       2023-12-15 10:06:51 +08:00 via iPhone
    @yongzhenchen682 沒人叫你在这讨论,我拿枪指住你叫你回覆?有病就去看医生
    qiyilai
        134
    qiyilai  
       2023-12-15 10:10:31 +08:00
    大家换个思路看,证明跨境电商确实赚钱啊~
    owen800q
        135
    owen800q  
    OP
       2023-12-15 10:12:28 +08:00 via iPhone
    @xwayway 没错
    owen800q
        136
    owen800q  
    OP
       2023-12-15 10:17:04 +08:00 via iPhone
    @qiyilai 我们是为 TikTok shop 提供基础服务,像打通 Shopify ,shopee, 流量不是只来自下单, 要那么赚,我也不用在这
    xwayway
        137
    xwayway  
       2023-12-15 10:17:36 +08:00   ❤️ 1
    @owen800q #135 但是我感觉这个玩意儿也有问题,他们检测到你的请求 12w/s 应该是 一个时间窗口的流量吧?不是瞬时流量。但你的 5w lambda 可以粗浅的认为是 5w 个线程数。5w 线程处理 12w/s 的流量,再怎么说也应该够啊。那一台白名单机器,1s 内最多能发起多少请求,占用你多少线程,感觉这是个问题。
    8355
        138
    8355  
       2023-12-15 10:22:24 +08:00
    @owen800q #108 你们在 lambda 里执行啥功能的业务代码啊,直接接到请求里执行的嘛?我们 lambda 只是部分消费回调或着队列消费拉起
    Torpedo
        139
    Torpedo  
       2023-12-15 10:37:34 +08:00
    @keshawnvan #18 双十一不会这么低吧
    esile
        140
    esile  
       2023-12-15 10:39:41 +08:00 via Android
    考虑一下 cc 攻击吧 接入 cf
    keshawnvan
        141
    keshawnvan  
       2023-12-15 10:43:08 +08:00
    12 万 QPS 已经接近天猫双十一的量了。
    @deterrer 之前在业务中台干过,现在在☁️。
    keshawnvan
        142
    keshawnvan  
       2023-12-15 10:43:57 +08:00
    @Torpedo 只算下单的 TPS ,峰值是 20 万/s
    break
        143
    break  
       2023-12-15 10:47:54 +08:00
    12306 春运也才 100 万/s 的级别吧
    work220602
        144
    work220602  
       2023-12-15 10:53:44 +08:00
    有点假
    cnoder
        145
    cnoder  
       2023-12-15 10:54:01 +08:00
    我能想到的 qps200w 的场景只有春晚抢红包
    walkleyhe
        146
    walkleyhe  
       2023-12-15 11:57:33 +08:00
    @owen800q 我是 AWS 架构师,可否加 v 私聊? v id(base64): d2Fsa2xleWhl
    PVXLL
        147
    PVXLL  
       2023-12-15 14:13:39 +08:00 via iPhone
    哈哈哈,张口就来 200w/s ,是真不懂还是在这玩呢
    fionasit007
        148
    fionasit007  
       2023-12-15 14:39:31 +08:00
    @paradoxs tiktok 不知道,抖音是有的,但是还是基于抖音平台下单,但是订单信息回推送到自己服务器,用户其他事务,抖音还有小程序,和用户下单同步的积分之类的东西,然后一个 mcn 下面好多直播间,一晚上几百万订单量是有的,我最近在做这个,还不是龙头 mcn ,更大的肯定更厉害
    JeromeCui
        149
    JeromeCui  
       2023-12-15 14:48:27 +08:00
    试试 AWS fargate ,通过流量自动扩容
    salmon5
        150
    salmon5  
       2023-12-15 14:51:56 +08:00
    简单一点,一个域名 DNS 解析几十个 NLB ,后面堆 EC2 ,缓存+分库。别用 Lambda 、API Gateway 这种 PaaS 服务。就堆 EC2 。
    adolphdudu
        151
    adolphdudu  
       2023-12-15 14:52:48 +08:00
    waiting room 。或者直接队列 延时处理吧,这样实时性不高,但是理论上能保证业务成功
    salmon5
        152
    salmon5  
       2023-12-15 14:55:35 +08:00
    EKS+EC2/Fargate 。
    maomaosang
        153
    maomaosang  
       2023-12-15 15:09:29 +08:00
    127 楼的老兄说到了点上啊,你没把你的瓶颈描述清楚。
    看你 135 楼的回复,看起来是这是一个转发业务?
    我脑子简单点,一个并发量如此之大的接口,应该足够简单,就算加了个外部请求,总执行时间就算 300ms 吧,每秒可以处理 3 个,你有 5 万 lambda 实例,如果这个实例释放不存在延迟问题,那就应该可以处理 15w qps 。
    所以你的业务,具体复杂度如何啊?运算和本地 IO 耗时多少?需要依赖外部(比如你说的 shopee )接口的耗时多少?一定要实时返回吗?
    lazywen
        154
    lazywen  
       2023-12-15 15:19:36 +08:00 via Android
    想起几年前帮看过一个项目,后端服务是被自己人打挂的,前端水平很垃圾,每个页面拼命的往后端请求数据,一个页面有几十个请求,真的是几十个,高峰期上来可能有一万用户,后端流量就是几十万请求,而且因为页面出不来用户在不停的刷新页面,这个请求量有点像人工 dos 了,牛逼的是前端负责人(工号应该是前 2 的)和前端团队都很强势,不配合做优化,一直甩锅说都是后端的问题,最后老板没法把前端负责人干掉了,前端那边好好配合优化之后轻松抗住高峰期
    lbfjkaou
        155
    lbfjkaou  
       2023-12-15 15:21:10 +08:00
    @maomaosang #153 👍确实,等 op 描述清楚吧
    harryge
        156
    harryge  
       2023-12-15 16:51:08 +08:00
    看讨论学到了很多。感谢楼主和认真回复的 v 友们
    nomagick
        157
    nomagick  
       2023-12-15 16:55:45 +08:00
    @tqyq88 12306 就是这么做的
    lovelylain
        158
    lovelylain  
       2023-12-15 18:32:06 +08:00 via Android
    @cnoder 春晚抢红包很多请求都被丢弃了,前端丢一部分后台再丢一部分,只有部分请求到达实际的处理服务器。
    yeyuefeng
        159
    yeyuefeng  
       2023-12-15 18:51:34 +08:00
    哈哈,不应该首先考虑同行攻击或者出 bug 了么
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1652 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:40 · PVG 00:40 · LAX 08:40 · JFK 11:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.