深入解讀阿裏雲數據庫POLARDB核心功能物理復制技術
穩定性方面,日誌的增量模式減少了需要寫出的數據量,日誌的順序寫對於IO操作十分友好,可以充分節約尋道時間(機械硬盤)和寫入緩存,使得日誌的寫操作可以十分平穩,在面對高並發的事務時,不易出現劇烈的抖動,從而得到高的穩定性和性能。按照日誌的組織形式,可以分為物理日誌和邏輯日誌,物理日誌使用更偏向底層數據塊操作的方式來描述變更,邏輯日誌則偏向於使用記錄鏡像或SQL語句的方式來描述變更,事務引摯一般使用物理日誌的模式來記錄事務的底層操作,而非事務引摯則一般使用邏輯日誌的方式。
用編程語言來打比方的話,物理日誌相當於使用匯編語言來記錄了操作,而邏輯日誌則相當於使用Go/Python等級別的語言來記錄操作,物理日誌相比邏輯日誌具有更高的可靠性、穩定性和性能。回顧數據庫的歷史,商業數據庫都只支持物理日誌,從來沒有邏輯日誌的說法。MySQL因為其上下分層(SQL層和引摯層)的設計導致事務存貯引摯層必須有獨立的物理日誌,以及多引摯支持的原因,必須在SQL層設計邏輯日誌以透明化不同存儲引摯(主備可以不同引摯)的支持,形成了一個雙日誌的現狀,對MySQL的穩定性和性能帶來了極大的困難和挑戰。
物理日誌因其格式比較底層,使其非常難以創建只讀實例,並且從只讀實例切換為讀寫實例需要比較長的時間,可以參考Oracel數據庫的發展歷程,長久以來一直沒有支持隨時只讀的備庫,將備庫切換為主庫需要極期嚴格的步驟,需要比較長的時間,比較難以實現自動化,無法輕松實現互聯網讀擴展流量擴展的需求。而邏輯日誌因其格式比較上層,使其非常容易創建只讀實例,從只讀實例轉換為讀寫實例可以在秒級完成,並形成了一整套的增量數據訂閱消費。MySQL在享受邏輯復制好處時,也承受了邏輯復制帶來的一些限制:
存儲引摯層難以直接產生邏輯日誌,為了數據的一致性,在物理日誌和邏輯日誌之間引入了XA(2PC)機制,給穩定性和性能帶來了極大的限制和挑戰,導致事務處理性能和傳統商業數據庫相比有較大差距,基於物理日誌則差距極小。
同一事務的MySQL邏輯日誌需要連續寫出,因此無法支持較大的事務操作,過大的事務會導致操作失敗。基於物理日誌,同一個操作的日誌可以分段(事務開始、操作1、操作2、事務提交)寫出,因此可以支持大事務操作。
MySQL現有邏輯日誌保存了整條記錄的前後鏡象,造成邏輯日誌寫入量較大增加IO壓力,易引起性能下降和抖動。物理日誌只記錄變化字段,格式緊湊以減少總日誌量,具備較好的IO性能,不易引起性能下降和抖動,肯有更高的性能和穩定性。
MySQL邏輯日誌,不包含事務信息,無法做連續性檢測,可以從任意點開始恢復,不熟悉不專業的操作容易,造成問題;物理日誌包含完整事務信息,可以做連續性檢測,會自動識別上一次的中斷點,減少人工判斷操作,可有效防止人為誤操作。
因此基於邏輯復制的MySQL在大表加字段、建索引等操作上,主備復制的體驗非常不夠好。POLARDB在充分認識到MySQL邏輯復制的優缺點後,選擇以物理復制為基礎實現復制節點(Replica),提升了主備復制的效率和體驗,為廣大客戶提供了穩定、可靠、高性能能的只讀節點,引領了新一代復制技術的發展。
相關文章:
雲數據庫POLARDB優勢解讀系列文章之①——10分鐘入門
https://yq.aliyun.com/articles/673623
雲數據庫POLARDB優勢解讀系列文章之②——高性價比
https://yq.aliyun.com/articles/673636
雲數據庫POLARDB優勢解讀系列文章之③——分鐘級彈性
https://yq.aliyun.com/articles/669029
雲數據庫POLARDB優勢解讀系列文章之④——物理復制
https://yq.aliyun.com/articles/674229
雲數據庫POLARDB優勢解讀系列文章之⑤——會話讀一致性
https://yq.aliyun.com/articles/674234
深入解讀阿裏雲數據庫POLARDB核心功能物理復制技術