程式庫提供 .env.distributed.example 作為多執行個體拓樸範例。重點不只是「加上 Redis」,而是所有必須跨節點保持一致的狀態,都要使用共用 provider。
共用控制平面
分散式範例使用 PostgreSQL 作為管理資料庫,而不是本機 SQLite:
ADMIN_DATABASE_PROVIDER=Postgres
ADMIN_DATABASE_CONNECTION_STRING=Host=postgres;Port=5432;Database=hsqlagent;Username=postgres;Password=postgres;
同一個邏輯 hs-sql-agent 部署中的所有執行個體,都應指向相同的控制平面資料庫。
Redis 協調狀態
範例把以下子系統移到 Redis:
- 快取;
- 速率限制器;
- 安全政策同步;
- 外送同步;
- SQL 並行執行協調。
例如:
CACHE_PROVIDER=Redis
CACHE_CONNECTION_STRING=redis:6379
RATE_LIMITER_PROVIDER=Redis
RATE_LIMITER_CONNECTION_STRING=redis:6379
RATE_LIMITER_FAILURE_MODE=FailClosed
SQL_CONCURRENCY_PROVIDER=Redis
SQL_CONCURRENCY_CONNECTION_STRING=redis:6379
SQL_CONCURRENCY_FAILURE_MODE=FailClosed
失敗模式具有安全意義
對負責保護執行邊界的協調機制,範例使用 FailClosed。當分散式協調器無法使用時直接拒絕操作,比讓每個節點各自做獨立判斷更安全。
增加副本前,先確認哪些決策可以只存在單一程序、哪些必須共享;否則可能出現彼此不一致的速率限制、過期安全政策,或沒有協調的 SQL 並行執行。