閱讀255 返回首頁    go 技術社區[雲棲]


OceanBase如何解決支付寶數據庫的高一致性

該文章來自於阿裏巴巴技術協會(ATA)精選文章。

傳統數據庫通過共享存儲保障主備庫的數據一致性,去除共享存儲後,由於網絡、服務器、磁盤等的不可靠,數據庫的主庫與備庫的數據一致性成為很大的挑戰(更多信息參見下文“共享存儲能否解決互聯網數據庫的一致性”)。OceanBase立足於互聯網,必須解決互聯網數據庫的數據一致性問題,不僅要為淘寶、天貓等商業係統提供數據庫,而且要為支付寶等金融係統提供數據庫。

數據庫數據一致性問題的根源是軟件(操作係統軟件、網絡軟件、應用軟件等)和硬件(網絡硬件、服務器硬件、磁盤等)的不可靠,因此解決這個問題的根本方法是冗餘。傳統RAID技術(例如RAID10,RAID5)等提供了較高的可靠性,但如果所在的服務器故障,則數據還是無法訪問,因此也無法保證數據的高一致性。為了解決這個問題,OceanBase引入了雲計算思路和Paxos協議,通過3個(或者更多節點)的投票來保證數據的高度一致,並兼顧服務的高可用,如下圖:
1
上述三個機群構成一個數據庫,其中一個是主機群,所有事務都由主機群的UpdateServer(稱為主UpdateServer,其他UpdateServer稱為備UpdateServer)執行,事務的redo log同步到3個UpdateServer中的超過半數(即至少2個,包括主UpdateServer自己),則事務成功並應答客戶。如果3個UpdateServer中有一個故障:
*主UpdateServer故障:剩餘的兩個UpdateServer會自動選舉出一個新的主UpdateServer(參見後文“OceanBase分布式選舉的實現”),由於舊的主UpdateServer數據至少在一個活著的UpdateServer中存在,因此數據不會有任何丟失,兩個活著的UpdateServer經過很短時間(通常是毫秒級)的相互同步後就可以繼續對外服務,保證了數據的一致性和服務的高可用。
*單個備UpdateServer故障:主UpdateServer有全部數據,剩餘兩個UpdateServer仍然超過半數,數據一致性和服務都不受任何影響。
如果把上述三個機群部署出於三個不同的機房,那麼即使一個機房出現電源、網絡或者空調等故障,剩餘兩個機群仍然能夠繼續工作,數據一致性和服務可用性都不受影響。如果采用5機群部署,則係統甚至可以抵禦2個機群的故障。

上述方案已經用於支付寶的交易庫和其他核心係統並在線上生產運行中。

最後更新:2017-04-01 13:37:07

  上一篇:go 一個簡單的C語言詞法分析與語法分析器
  下一篇:go 在雲上搭建大規模實時數據流處理係統