跳至主要內容
hs-sql-agent
2.0.3
文件 2.0.3
文件 維運

分散式部署

多個 hs-sql-agent 執行個體共用服務端點時,需要共享哪些控制平面與協調狀態。

程式庫提供 .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 並行執行。