Serverless 里怎么处理需要建立长连接的外部资源? - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
FlashEcho

Serverless 里怎么处理需要建立长连接的外部资源?

  •  1
     
  •   FlashEcho 4 days ago 1576 views

    最近在 Cloudflare Workers 上接外部 Redis / Valkey ,发现传统 Node 服务那套“建一个 Redis client 然后复用连接”的思路不太行

    Worker 会冷启动、冻结、恢复或回收,模块级 client 虽然能复用,但不像常驻进程里的连接池那么可靠。实际遇到的现象是:client 看起来 ready ,但 Redis 命令经常 timeout ,后续还会引发一些连带错误。尤其是从 cloudflare 阿姆斯特丹机房到 digital ocean 班加罗尔机房的连接质量差得离谱,已经超时到无法忍受了

    我现在的临时处理是:Serverless 侧不直接维护 Redis TCP 连接,改成通过 HTTP 访问 Redis ,把连接池放到更适合常驻运行的地方。现在从 cloudflare 全球机房,到 racknerd 洛杉矶机房的 redis 代理,到 digital ocean 旧金山机房里的真实 redis 。虽然绕路更多了,但是基本不超时了

    Worker -> HTTP -> Redis proxy -> Redis 但自建 Redis proxy 也挺麻烦,平台原生的 redis 资源又很贵

    想请教大家:Serverless / Edge Runtime 里访问 Redis 、数据库、MQ 这类需要连接的外部资源,大家一般是直接连、HTTP API / proxy ,还是尽量改用平台原生存储?这种情况下有没有什么最佳实践?

    14 replies    2026-05-13 06:59:16 +08:00
    tf2
        1
    tf2  
       4 days ago
    官方那个 Durable Object 啊
    FlashEcho
        2
    FlashEcho  
    OP
       4 days ago
    @tf2 #1 DO 更是贵的离谱,本来就是为了节约成本从 KV 迁到外部 redis ,这样成本反而会增加
    CupTools
        3
    CupTools  
       4 days ago via Android   1
    wudiiiii
        4
    wudiiiii  
       4 days ago
    我觉得直接连接比较好,传统服务中用连接池的意义是多个 http 请求打过来可以复用已建立的连接,但是在 serverless 中意义就不大了
    cryptovae
        5
    cryptovae  
       4 days ago
    有点本末倒置了,在 Serverless 中,直接就直连,甚至连连接池都不用,拿到链接直接访问,服务退出后释放连接就行,当然,量起来的时候肯定是通过 proxy 维护连接池的
    HanMeiM
        6
    HanMeiM  
       4 days ago
    量起来了还会用 Serverless 吗?
    Jiubia
        7
    Jiubia  
       4 days ago
    @cryptovae 是的,如果访问量不大的话建议直连,如果到了不得不使用连接池的地步时,那就不应该再使用 serverless 了
    或者你是有什么原因导致不得不使用 serverless ?
    当然,使用 http 来实现一个 redis pool 也是一个可行的方案,至少我就是这么做的 :)。主要我也没想到更好的方案了
        8
    sujin190  
       4 days ago
    网络可靠,短连接除了性能差一点,以及需要考虑端口回收有时间导致的连接数不够问题,区别不大吧

    网络不可靠的话,那解决网络不可靠的问题不就好了,vpn 、代理什么的加一层就是了,反正只是代理流量资源消耗也低,Serverless 拆出来放在 ecs 里就是了,搞个最低配的估计就足够了,也花不了多少钱,没必要啥都 Serverless 吧,或者云本来就是异地组网服务吧

    如果这样一个低配的 ecs 都嫌贵的话,你这 Serverless 量这么低确定用 Serverless 服务能省钱?不是直接 ecs 更省?
    FlashEcho
        9
    FlashEcho  
    OP
       4 days ago
    @sujin190 #8 为什么大量使用 Serverless ,因为我长期处于 Cloudflare 月付 5 刀甜点区中,计算存储各种东西加到都是每个月 5 刀

    当时刚订阅的时候感觉这资源简直是无限啊,怎么用得完。现在量起来了,进入了一个尴尬区,量既没有多到需要专门用一个传统的云服务商,全部迁走只会更贵

    现在只是在部分资源,比如 KV 存储这边用超了,于是就开始把部分资源从平台原生改成外部托管
    CupTools
        10
    CupTools  
       1 day ago via Android
    哥们你这个 KV overage 具体是咋用出来的?读爆了还是写/list 爆了?
    FlashEcho
        11
    FlashEcho  
    OP
       1 day ago
    @CupTools #10 写爆了,上个月额外多写了 94k 次,多收了我 5 刀,是真的贵啊
    CupTools
        12
    CupTools  
       1 day ago via Android
    @FlashEcho KV 用途是什么
    FlashEcho
        13
    FlashEcho  
    OP
       1 day ago
    @CupTools #12 当成 redis 用,在这个( https://rsshub-balancer.virworks.moe ) 项目里面,存访问某个实例的失败记录的
    About     Help     Advertise     Blog     API     FAQ     Solana     4389 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 00:08 PVG 08:08 LAX 17:08 JFK 20:08
    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