­

華為雲企業級Redis揭秘第16期:超越開源Redis的ACID”真”事務

摘要: 開源Redis只支援偽事務,應用場景受限。高斯Redis發布企業級事務特性,支援完備ACID,為交易、庫存等上層業務帶來全新可能。

本文分享自華為雲社區《華為雲企業級Redis揭秘第16期:超越開源Redis的ACID”真”事務》,作者: 高斯Redis官方部落格 。

日常生活中的shopping、交通、手游都離不開高頻的金融消費、虛擬交易。熟悉MySQL的讀者,一定知道資料庫事務(Transaction)可以搞定這類關鍵場景,事務不但極大簡化了上層業務的編程模型,給開發者帶來便利,同時它也讓「交易」等核心業務正確可靠。

其實,Redis也有事務,但社區版只做了簡版實現,無法滿足ACID要求,因此應用有限。

本文將介紹華為雲企業級資料庫GaussDB(for Redis)(下文簡稱為高斯Redis)的事務功能,與社區版不同,高斯Redis提供了滿足ACID的企業級事務特性。

1.什麼是事務?

請設想如下場景:

在一個月黑風高之夜,一場交易正在進行。玩家B收款成功,但A卻沒拿到裝備。

好了,一場PK在所難免。

玩家做幾次點擊即可完成交易,但底層資料庫內部,卻需要執行至少4個關鍵操作:

試想,如步驟4失敗,而前置步驟成功,會發生邏輯錯亂,這將帶來災難性的用戶體驗。

事務是如何解決這類場景的?這依賴於4大特性:

  • 原子性(Atomicity):一組操作要麼全成功,要麼全失敗。
  • 一致性(Consistency):即滿足既定約束,保證系統不脫離合理狀態。例如,如果A、B各有50枚金幣,那麼全局總數應始終保持100。
  • 隔離性(Isolation):多個事務的執行相互隔離,互不影響。
  • 持久性(Durability):提交成功的事務應帶來永久性狀態變化,即使掉電,數據也不應丟失。

其中,一致性是最關鍵的,而原子性、隔離性、持久性都是為了保證一致性。當然,為了確保整體系統的一致性,也需要業務層的共同設計實現,本文不詳細展開。

那麼,開源Redis事務存在哪些問題,GaussDB(for Redis)的企業級事務功能又是什麼樣的?下面我們來具體看看。

2. 從四大特性看Redis的事務

2.1 原子性

社區版Redis

開源Redis事務是一種極簡設計,並不支援事務失敗時的回滾操作,不滿足事務的原子性。

此外還有以下問題:

  • 入隊校驗不完備:只校驗簡單語法,無法識別key的類型錯誤;
  • 錯誤處理不完備:直接跳過錯誤,繼續執行後續命令。

GaussDB(for Redis)

如圖所示,開源Redis事務在第一條命令出錯的情況下仍舊執行了下面的命令,而高斯Redis則避免了這樣的問題。

  • 每個事務的執行在提交前會進行錯誤判斷,如有錯誤則會觸發回滾邏輯,放棄之前的操作,對原數據無影響

高斯Redis在保留社區版事務使用邏輯的同時,在底層實現了對回滾的支援,滿足了事務的原子性。

2.2 隔離性

社區版Redis

事務在並發執行時,應當處理各種隔離性問題。

開源Redis對命令的執行是單執行緒設計,因此的確可以保證不會有兩個事務同時被執行,具體來看:

  • 開源Redis不存在隔離性問題;
  • 代價是性能的降低和對整體吞吐的影響,事務只能單執行緒處理,對其他請求的干擾較大。

GaussDB(for Redis)

高斯Redis是多執行緒架構,內部對數據進行自動分片,在同數據分片內保留序列化的隔離性級別,同時極大提高整體實例的並發能力。

2.3 持久性

社區版Redis

開源Redis是純記憶體設計,不提供可靠的數據存儲能力。掉電後數據丟失,即使開啟RDB或AOF,也只能在一定程度上挽回部分數據,具體來看:

  • RDB方式會丟失部分數據,數據只能恢復到上次快照的時間
  • 即使是AOF方式,持久性也存在問題,從命令執行到保存到硬碟之間,仍舊存在時間差
  • AOF方式恢復緩慢、維護文件龐大,維護管理成本都會非常高,重建時間也很長

綜合來看,社區版Redis的持久化能力有限,不足以支援事務的持久性要求。

GaussDB(for Redis)

高斯Redis採用存算分離的設計理念,底層使用高性能分散式存儲池保存全量數據,結合RocksDB存儲引擎,可保證核心數據的可靠存儲,架構圖:

GaussDB(for Redis)核心優勢:

  • 核心數據存儲:全量數據落盤,3副本冗餘,不怕丟數據
  • 高可用:秒級故障接管,即使N-1節點故障,全量數據也可用
  • 低時延:自動冷熱分離,亞毫秒級時延,能Hold快取場景
  • 高吞吐:全部節點可寫,QPS可水平擴展,能抗流量高峰
  • 強一致:3副本強一致同步,不會發生臟讀,業務免踩坑
  • 秒擴容:例如,8G到64G擴容只需1秒,且對業務0影響
  • 降成本:數據量越大價格越香,能夠真正幫用戶省成本

高斯Redis強大的持久化保障,支援核心數據的可靠存儲,也為事務的執行提供了有力的保證。

2.4 一致性

從資料庫層面,資料庫通過原子性、隔離性、持久性來保證一致性,可以說在ACID中一致性是事務的目的,其他特性是手段。

如上文所述,開源Redis在原子性和持久性上都存在種種問題,一致性自然也無法保障。在上述特性的保障下,不論是正常執行還是存在命令失敗場景,高斯Redis事務都有可靠的一致性。

2.5 對比總結

通過上述介紹我們從事務的四大特性出發詳細地介紹了高斯Redis的事務,最後做一個總結:

3. 結語

近年來,以Redis為代表的KV資料庫逐漸在越來越多的場景發揮作用,而高斯Redis作為華為雲旗艦KV資料庫,可滿足企業核心數據的可靠存儲要求。

高斯Redis的事務能力相比社區版Redis有極大提升,在ACID事務的加持下,更可在「庫存」、「交易」等關鍵場景簡化業務設計,帶來可靠數據存儲能力。

4. 附錄

  • 本文作者:華為雲資料庫GaussDB(for Redis)團隊
  • 杭州/西安/深圳簡歷投遞:yuwenlong4@huawei.com
  • 產品資料導航:

 

點擊關注,第一時間了解華為雲新鮮技術~