给客户门店装Chrome监控页,我用Cloud Scheduler卡住成本

先说场景。县城里给一家做建材的客户维护六台门店展示机,装的都是 Chrome 120 左右,首页锁死成一个内部看板页。客户老板要求能远程看到每台机器今天有没有正常开机、页面有没有被人关掉。机器都在店里,没有公网 IP,我也不想为这点事去搞 VPN。

我的做法很土:每台机器上跑一个不到 40 行的本地脚本,Chrome 用 --kiosk 起,脚本每 5 分钟往 Cloud Run 上的一个小接口 POST 一条心跳,带上机器编号和时间戳。接口把数据写进 Firestore,另一个静态页读出来给客户看。

# 门店机器上的定时任务,Windows 用任务计划调这个
curl -s -X POST https://heartbeat-xxxx.run.app/ping \
  -H "Content-Type: application/json" \
  -d "{\"id\":\"store-03\",\"ts\":$(date +%s)}"

Cloud Run 那边我设了最小实例 0,但把 Cloud Scheduler 每 5 分钟打一次 /warm,让它别彻底冷掉。并发设成 20,超时 10 秒。Firestore 只存最近 7 天,用 TTL 字段自动清。

为什么这么干:六台机器,一天不到 2000 次请求,Cloud Run 免费额度完全盖得住。我不上 Pub/Sub、不上监控大盘,是因为客户不会看,我也不想半夜被无关告警吵。代价是实时性差,机器挂了最多 5 分钟才发现,客户认这个延迟。

哪里会失效:第一,date +%s 那套在 Windows 任务计划里调 bash 会踩坑,我后来改成 PowerShell 发请求;第二,Scheduler 的 warm 请求如果打到旧 revision,等于白打,得确认流量都切到新版本;第三,Firestore TTL 不是立即删,我一度以为数据没清,查了半天文档才明白有延迟。还有一次客户店里断网两天,心跳全丢,页面显示离线,老板以为我程序坏了,其实是路由器被拔了。

现在这套跑了三个多月,没出过大问题,但我知道它撑不住二十台以上。你们给这种没公网、机器又少的小场景做心跳,是用现成工具还是自己糊一个?

0
赞同度 100% · 0 条评论 · 6 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。