該文章來自于阿裡巴巴技術協會(ata)精選文章。
傳統資料庫通過共享存儲保障主備庫的資料一緻性,去除共享存儲後,由于網絡、伺服器、磁盤等的不可靠,資料庫的主庫與備庫的資料一緻性成為很大的挑戰(更多資訊參見下文“共享存儲能否解決網際網路資料庫的一緻性”)。oceanbase立足于網際網路,必須解決網際網路資料庫的資料一緻性問題,不僅要為淘寶、天貓等商業系統提供資料庫,而且要為支付寶等金融系統提供資料庫。
資料庫資料一緻性問題的根源是軟體(作業系統軟體、網絡軟體、應用軟體等)和硬體(網絡硬體、伺服器硬體、磁盤等)的不可靠,是以解決這個問題的根本方法是備援。傳統raid技術(例如raid10,raid5)等提供了較高的可靠性,但如果所在的伺服器故障,則資料還是無法通路,是以也無法保證資料的高一緻性。為了解決這個問題,oceanbase引入了雲計算思路和paxos協定,通過3個(或者更多節點)的投票來保證資料的高度一緻,并兼顧服務的高可用,如下圖:
上述三個機群構成一個資料庫,其中一個是主機群,所有事務都由主機群的updateserver(稱為主updateserver,其他updateserver稱為備updateserver)執行,事務的redo log同步到3個updateserver中的超過半數(即至少2個,包括主updateserver自己),則事務成功并應答客戶。如果3個updateserver中有一個故障:
*主updateserver故障:剩餘的兩個updateserver會自動選舉出一個新的主updateserver(參見後文“oceanbase分布式選舉的實作”),由于舊的主updateserver資料至少在一個活着的updateserver中存在,是以資料不會有任何丢失,兩個活着的updateserver經過很短時間(通常是毫秒級)的互相同步後就可以繼續對外服務,保證了資料的一緻性和服務的高可用。
*單個備updateserver故障:主updateserver有全部資料,剩餘兩個updateserver仍然超過半數,資料一緻性和服務都不受任何影響。
如果把上述三個機群部署出于三個不同的機房,那麼即使一個機房出現電源、網絡或者空調等故障,剩餘兩個機群仍然能夠繼續工作,資料一緻性和服務可用性都不受影響。如果采用5機群部署,則系統甚至可以抵禦2個機群的故障。
上述方案已經用于支付寶的交易庫和其他核心系統并線上上生産運作中。