exactly-once 是謊言:前端工程師終於學會「冪等」
寫了很多年前端,「冪等(idempotent)」這個詞我當然看過——HTTP 規範裡有、面試題裡有。但我從來沒有意識到它:沒有在設計系統時把它當成一個要主動守住的性質。直到我的爬蟲系統經歷了一連串資料庫事故(覆盤見系列第二篇),我才發現整個系統能自癒的地基就是這兩個字,而且回頭一看——前端其實天天在用它,只是沒人告訴我它的名字。
寫了很多年前端,「冪等(idempotent)」這個詞我當然看過——HTTP 規範裡有、面試題裡有。但我從來沒有意識到它:沒有在設計系統時把它當成一個要主動守住的性質。直到我的爬蟲系統經歷了一連串資料庫事故(覆盤見系列第二篇),我才發現整個系統能自癒的地基就是這兩個字,而且回頭一看——前端其實天天在用它,只是沒人告訴我它的名字。
我是前端工程師,對資料庫的心智模型來自 MySQL/Postgres 的常識:row-level lock、多個連線併發寫入、connection pool。直到我用 Turso(雲端版 SQLite / libSQL)跑了一個爬蟲系統、經歷了幾次事故(覆盤見系列上一篇),才發現這套常識在 SQLite 世界整組不適用。
前情提要:我有一個 vibe coding 出來的台股行情爬蟲,跑在 Fly.io 上、資料庫用 Turso(libSQL,SQLite over HTTP)。上一篇〈讓 AI 全面 review 我 vibe code 出來的 production 專案〉提到,我做過一次全面 review、修掉 20 個問題。兩週後,它還是在盤中死掉了。
我有一個 side project:一個台股行情資料的爬蟲系統,每天開盤自動啟動、收盤停止、晚上全量重抓,跑在雲端、透過 Telegram 推播訊號。它是我一路 vibe coding 迭代出來的——功能一直長,但我從來沒有系統性地檢視過整個 codebase。它能跑,而且跑了好幾個月。