在電商和新零售領域,權益分發適用於對特定的使用者進行指定營運活動的情境。技術層面上,此種情境的DB和緩衝的資料強一致性較難保證。針對該問題,阿里雲雲訊息佇列 RocketMQ 版推出了權益分發解決方案。本文將以電商情境為例說明權益分發解決方案的背景資訊、方案架構、以及方案優勢等內容。
背景資訊
在電商平台營運決定對特定使用者進行營銷活動時,會針對不同的使用者群設定不同的營銷策略,可能會涉及但不局限於以下內容:
- 使用者規則:針對什麼樣的使用者下發許可權,如新使用者、會員等,結合業務需求設定具體的判斷條件。
- 權益類型:紅包、積分或是優惠券等不同類型的權益。
- 領取成本:需要付出成本才能擷取相應權益,如消耗會員積分才能領取折扣券。
- 時間控制:發放權益的時間點,如早上10:00針對新使用者下發100張優惠券。
- 庫存:權益的個數是否充足、與配置的使用者個數是否匹配等。
這些營運資料寫入DB後,轉換成技術策略,寫入緩衝,再轉換成使用者發放鏈路資料(變成一條一條的規則)。只有符合這些規則的使用者才能領取對應的權益。
痛點
讓使用者通過訪問快取資料來領取對應的權益,這樣既保證了使用者高效的訪問,也減輕了DB的壓力。但是,這就會引發新的問題:
- 當規則特別多時,DB寫入緩衝的資料量也會特別大,下遊的緩衝壓力較大(此類情況較少)。
- DB寫入資料至緩衝時唯寫一次,可能會因為網路抖動等原因導致資料寫入失敗,進而造成資料更新不及時的結果。例如,庫存原定需設定100,000,但營運策略變成10個,如果資料沒有及時同步,那麼就無法通知到下遊,造成資損。
方案架構
因為雲訊息佇列 RocketMQ 版具有重試功能且能保證訊息不丟失,所以推出此方案來確保DB和快取資料的強一致性,即在DB和緩衝間使用雲訊息佇列 RocketMQ 版,架構如下圖所示。

方案優勢
雲訊息佇列 RocketMQ 版有以下優勢:
- 巨大的資料輸送量。
- 支援海量訊息堆積,為下遊應用減輕流量洪峰的衝擊。
- 可以協助簡化DB和緩衝間的實現,大大減少代碼開發量。如果沒有雲訊息佇列 RocketMQ 版,實現方法則十分複雜。
- 支援即時訊息收發以及重試功能,確保訊息不丟,從而保證訊息強一致性。