Lumen × LangGraph × Kova
Lumen × LangGraph × Kova
目標:ある LangGraph Agent の Checkpointer を SqliteSaver から LumenCheckpointer に置き換え、Kova へデプロイして、クラッシュ復旧を比較します。
Before / After
Before — 純粋な LangGraph
単一マシン・リモートバックアップなし · プロセス間ではロックが必要 · クラッシュ復旧はミリ秒級 · コスト追跡なし。
After — Lumen + Kova
マイクロ秒級のクラッシュ復旧(Kova WAL エンジン)· ネイティブなマルチプロセス安全性 · 自動 Trace + Cost · リモート永続化。
Before
python
from langgraph.checkpoint.sqlite import SqliteSaver
graph = wf.compile(checkpointer=SqliteSaver.from_conn_string("./state.db"))After
python
from lumen_ai import LumenCheckpointer, LumenTracer
from kova import KovaClient
kova = KovaClient("kova://prod-cluster")
graph = wf.compile(
checkpointer=LumenCheckpointer(kova_client=kova),
callbacks=[LumenTracer()],
)ローカル検証
ローカルで Kova を起動
bashdocker run -d --name kova -p 9999:9999 ghcr.io/hanmahong5-arch/kova:latestあなたの Agent を実行
bashpython my_agent.pyクラッシュをシミュレート
bashkill -9 $(pgrep -f my_agent)再起動 — 中断点から再開
bashpython my_agent.py
Kova へのデプロイ
yaml
# agent.yaml
name: my-research-agent
entry: python my_agent.py
replicas: 3
checkpointer: lumen
wal:
retention: 7dbash
lumen deploy --target kova://prod-clusterクラッシュ復旧の比較実験
| 指標 | SqliteSaver | Lumen + Kova |
|---|---|---|
| 復旧レイテンシ | 8ms(単一マシン) | マイクロ秒級 |
| 複数レプリカ | 追加のロックが必要 | ネイティブ |
| 複数データセンター間 | 手動コピー | 非同期レプリケーション内蔵 |
| LLM 再呼び出し | SQLite 書き込みが失敗すると再呼び出し | 再呼び出しは決して発生しない |
| Trace | なし | 自動関連付け |
マイクロ秒級の復旧はどこから来るのか
Kova エンジンのスケジューリングレイテンシは最小 3μs です(FIFO の完全パイプラインの Criterion ベンチマークで 3.17μs、315K ops/s)。LumenCheckpointer は LangGraph の checkpoint 書き込みを Kova WAL に委譲します —— 復旧は SQLite のファイルレベルではなくエンジンレベルの WAL リプレイを経由するため、マイクロ秒級となり、単一マシンの SQLite のミリ秒級よりはるかに高速です。