論文:FaRM
前面我們聊到對于分布式事務(wù)來說,很難同時保證一致性,高并發(fā)和可用性(CAP 原則),核心的原因是資源競爭,這里的資源是指 master 的 CPU,內(nèi)存和網(wǎng)絡(luò),由于要保證一致性就得對資源加鎖,但要提高并發(fā)性就得減少鎖的消耗,而要滿足可用性就不得不對數(shù)據(jù)增加備份,每增加一個備份都會增加了一致性的負(fù)擔(dān)。
當(dāng)然我們看整個系統(tǒng)不能只看上層的軟件部分,因?yàn)槲覀冏罱K的目的是讓硬件處理我們的數(shù)據(jù),而軟件是對硬件一層一層的封裝。所以上面所述的問題是當(dāng)前計(jì)算機(jī)硬件基礎(chǔ)設(shè)施所決定的。
今天我們我講的 FaRM(fast remote memory) 目標(biāo)是挑戰(zhàn) CAP 原則,主要是針對新一代基礎(chǔ)設(shè)施提出的設(shè)計(jì)方案。什么新新硬件?Non-Volatile DRAM 和 RMDA。
RMDA (Remote Memory Direct Access),簡單的說就是在 MDA 的基礎(chǔ)上實(shí)現(xiàn)機(jī)器和機(jī)器之間的遠(yuǎn)程數(shù)據(jù)傳輸,而數(shù)據(jù)的讀取復(fù)制都不需要 CPU 參與。
Non-Volatile DRAM,可以理解為 SSD (固態(tài)硬盤)
兩個技術(shù)帶來的好處是解放了 CPU 的 IO 負(fù)載。然后我們的真?zhèn)€事務(wù)處理流程變成四階段提交:
- Lock:某個集群的 Primary 接受 client 請求,加鎖,處理本地?cái)?shù)據(jù),更新版本號。
- Validation:FaRM 通過 RDMA 方式讀寫所有涉及到的數(shù)據(jù)版本號,判斷失誤是否沖突,此過程不需要服務(wù)器的 CPU 參與。
- Backup commit:備份服務(wù)器寫入本次事務(wù)的操作 log,不需要 CPU 參與。
- Primary commit:以 RDMA 的方式向 Primary 寫入 commit-primary 數(shù)據(jù),Primary 的監(jiān)聽程序會釋放鎖。
正所謂有得必有失,由于 IO 不經(jīng)過 CPU,導(dǎo)致某些情況下 CPU 失去了對數(shù)據(jù)的控制,比如不能確定本次事務(wù)是否有足夠的存儲空間,所以需要在準(zhǔn)備階段需要預(yù)約足夠的空間。