Aerospike 透過自動資料複寫提供高可用與容錯,預設每筆記錄維護兩份完整副本(複寫因子 = 2)。雖然複寫提升可靠度,但會引入延遲權衡:
為平衡效能與一致性,Aerospike 提供事務級一致性策略,允許應用在每次操作層級自訂副本訪問行為。
| 策略 | 配置鍵 | 預設值 | 備選值 | 影響範圍 |
|---|---|---|---|---|
| 讀取副本選擇 | read.replica |
MASTER(主副本) | ANY(任意副本,隨機) | 僅限客戶端,無伺服器端覆蓋 |
| 讀取一致性層級 | read.consistency_level |
ONE(讀一份) | ALL(讀所有副本取最新) | 客戶端設定可覆蓋伺服器端 namespace 設定 |
| 寫入提交層級 | write.commit_level |
ALL(全副本確認) | MASTER(僅主副本確認,異步複寫) | 客戶端設定可覆蓋伺服器端 namespace 設定 |
使用較低一致性層級會開啟「短暫不一致視窗」:
是否接受取決於應用業務語意(如快取層可容忍、金融帳務不可容忍)。
as_config config;
as_config_init(&config);
as_config_add_host(&config, "127.0.0.1", 3000);
aerospike as;
aerospike_init(&as, &config);
as_policies *p_policies = &as.config.policies;
/* 選擇讀取任意副本(分散熱鍵壓力) */
p_policies->read.replica = AS_POLICY_REPLICA_ANY;
/* 選擇最高讀一致性(重組期間也讀最新) */
p_policies->read.consistency_level = AS_POLICY_CONSISTENCY_LEVEL_ALL;
/* 選擇較低寫一致性(降低延遲,接受髒讀風險) */
p_policies->write.commit_level = AS_POLICY_COMMIT_LEVEL_MASTER;
as_policy_write write_policy;
as_policy_write_init(&write_policy);
write_policy.commit_level = AS_POLICY_COMMIT_LEVEL_MASTER;
// 僅此次寫入使用 MASTER 提交層級
as_status status = aerospike_key_put(&as, &err, &write_policy, &key, &rec);
單一操作指定的非 NULL 策略會覆蓋連接層級設定;伺服器端 namespace 動態配置的覆蓋參數優先級最高。
客戶端事務級策略會覆蓋伺服器端 namespace 級可動態配置的相關參數(讀副本選擇策略僅存在客戶端)。詳細參數請參閱《配置參考手冊》一致性覆蓋章節。