logo NodeSeekbeta

CF Server Monitor免费探针增加主题商店,切换Agent为Go版本

12345
  • 为何不让agent端也走ws推送,把推送和历史的写入分开,do入站请求才消耗请求次数,do内部ws消息大约是20次消息:1次请求,理论上一天的额度,3秒推送的频率可以支持60台左右,以此类推。历史数据可以从do里面X分钟写入一次到d1,这样的话虽然历史数据受D1限制服务器数量还是原来的,但是前端推送频率可以接近实时。

  • @asphyixa #31 发布于2026/8/13 12:06:51
    为何不让agent端也走ws推送,把推送和历史的写入分开,do入站请求才消耗请求次数,do内部ws消息大约是20次消息:1次请求,理论上一天的额度,3秒推送的频率可以支持60台左右,以此类推。历史数据可以从do里面X分钟写入一次到d1,这样的话虽然历史数据受D1限制服务器数量还是原来的,但是前端推送频率可以接近实时。

    前几天刚和群友讨论过,还没尝试。但x分钟写入也是消耗一样的D1写入行。
    目前瓶颈是Workers请求数和D1写入行数,接下来会往这方面优化

  • @huilang #32 agent端走ws推送就没Workers请求数的消耗了 ,D1就还是保持原来的频率就行了。

  • @asphyixa #33

    就按这个逻辑,可以省下大把Workers额度。
    目前60台,其实也很充足了,只是延迟较大,但不排除用户有多项目

  • 好用好用 正好想改主题 顶楼主 xhj003

  • @asphyixa #31 发布于2026/8/13 12:06:51
    为何不让agent端也走ws推送,把推送和历史的写入分开,do入站请求才消耗请求次数,do内部ws消息大约是20次消息:1次请求,理论上一天的额度,3秒推送的频率可以支持60台左右,以此类推。历史数据可以从do里面X分钟写入一次到d1,这样的话虽然历史数据受D1限制服务器数量还是原来的,但是前端推送频率可以接近实时。

    昨天改了,然后额度崩了。。

    您的 DO 使用了 WebSocket Hibernation API,请求类型几乎全是 hibernation(242,473 次)。这是每次 WebSocket 消息到达时将 DO 从休眠中唤醒的次数,不是 WebSocket 消息本身。每次唤醒被计为 1 次请求(1:1),不走 1:20 比例。

    1:20 的比例只适用于 WebSocket 消息本身(outbound 621,176 条 → 计费 31,059 次),不适用于 hibernation 唤醒。

    只要指标是 Agent -> DO,每条新指标进入 DO 都是一次 incoming event;DO 休眠时就会被唤醒。Outbound WebSocket message 只能用于 DO -> 前端/Agent,不能承载 Agent 主动上报的新数据。
    
      能做的只有这几类取舍:
    
      1. 保持 Hibernation
          - 优点:几乎不产生 idle duration。
          - 缺点:Agent 每次发消息都会唤醒 DO。
          - 适合低频、批量上报。
    
      2. 不用 Hibernation,改成标准 WebSocket
          - DO 不休眠,所以不存在“每 3 秒唤醒”。
          - 但 DO 会被 WebSocket 长连接钉在内存里,持续产生 duration/GB-s。
          - incoming 消息仍然是进入 DO 的事件,不会变成 outbound 免费消息。
          - 这通常不是免费额度场景的好选择。
    
      3. 真正降低成本的改法
          - Agent 仍每 3 秒本地采样,但不要每 3 秒发给 DO。
          - 改成每 30s/60s 发一次 batch:一帧里带 samples: [...]。
          - DO 只被唤醒一次,然后一次性把这批样本 outbound 推给前端。
          - 这样可以把 20 次唤醒/分钟/服务器 降到 1-2 次唤醒/分钟/服务器。
    
      所以可行方案不是“唤醒一次后改 outbound”,而是“把多次 Agent inbound 合并成一次 inbound,再由 DO outbound 广播”。当前项目已经有 batchUpdate 协议基础,比较适合往这个方向改。
    

    白折腾了,上报不支持走1/20比例的扣费凡是

  • @asphyixa #37

    agent 每3秒上报就不能改成Outbound WebSocket 消息消息吗,而不是每次了Hibernation 唤醒
    
    
    • Searching the web
    
    • Searched the web for site:developers.cloudflare.com/durable-objects/platform/pricing Durable Objects WebSocket outgoing messages incoming messages pricing
    
    ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
    
    • 不能。Outbound WebSocket message 的方向必须是 DO 发出去:
    
      DO -> Agent
      DO -> 前端
    
      但 Agent 上报指标的方向天然是:
    
      Agent -> DO
    
      这在 DO 看来永远是 incoming message。只要这条消息里带 CPU/内存/流量数据,DO 就必须收到并执行 webSocketMessage(),因此 hibernated DO 会被唤醒。不能通过改 Agent 把“Agent 发给 DO 的指标”变成“DO outbound 免费消息”。
    
      我看了你新增的 cfsm-agent,它的 WSS 方式本身不是错的:
    
      - cfsm-agent/internal/cfprobe/report_transport.go 会把 https://.../update 转成 wss://.../update
      - 用 GET + Upgrade 建立 WebSocket
      - 建连后复用同一条连接 WriteText(...) 发业务 JSON
      - Worker 侧 MetricsBroadcaster 用的是 state.acceptWebSocket(server),后续走 webSocketMessage()
    
      所以它已经是 DO WebSocket incoming message,不是每 3 秒重新 HTTP 请求,也不是错误走法。你看到的每 3 秒 hibernation 唤醒,正是这个模式的正常结果。
    
      能改的是策略:
    
      现在:
      Agent 每 3 秒发一次 -> DO 每 3 秒醒一次
    
      建议:
      Agent 本地每 3 秒采样
      Agent 每 30/60 秒批量发一次 samples
      DO 每 30/60 秒醒一次
      DO 再 outbound 推给前端
    
      或者更简单一点:服务端 ack 不再返回 nextWssReportAfterMs = 3000,而是始终返回 report_interval,让 Agent 保持 WSS 长连接但低频上报。这是最直接降 hibernation wakeup 的改法。
    

    就是说不能走1/20的方式,搞不懂

  • @huilang #38 你前面的回复不都是答案吗,这个推送频率用不到休眠,免费额度足够一个do实例7x24小时不间断。

12345

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有71803位seeker

🎉欢迎新用户🎉