《5-文一 PostgreSQL Latch 簡介:一種事件實現機制.pdf》由會員分享,可在線閱讀,更多相關《5-文一 PostgreSQL Latch 簡介:一種事件實現機制.pdf(12頁珍藏版)》請在三個皮匠報告上搜索。
1、PostgreSQL Latch 簡介一種事件實現機制文一應急管理大學 在讀本科生PostgreSQL Latch 簡介Latch 模塊在 PostgreSQL 扮演著事件處理框架的角色,被應用于處理與響應:客戶端的接入與退出主進程狀態變化、通知 walwriter 寫入 wal 日志一些其它的事件(比如,等待超時)而在這一次技術報告中,我將向就 Latch 模塊的理論基礎、事件對象及工作流程展開討論,期待促進大家對 Latch 模塊的理解。PostgreSQL Latch 理論基礎在 Latch 模塊中,三類角色在各自的領域承擔起了事件處理的工作:事件傳遞者事件的傳遞者負責事件的遞達與傳輸,
2、是事件通知者與事件監聽者的溝通橋梁,它與 Latch 所依托的系統接口息息相關。事件通知者事件通知者需要在事件發生的時候,主動在“事件集合”中發送通知以“喚醒”事件監聽者,由此展開事件處理的工作。事件監聽者事件監聽者會“等待”事件的發生,在事件通知者引發“事件集合”的狀態變化,進而使得自身“被喚醒”之后,主動展開事件的處理。PostgreSQL Latch 理論基礎無論應用的場景有多么廣泛,Latch 模塊本質上只需要應對兩種類型的事件:內部事件內部事件就是由服務器端自主處理即可響應完成的事件,典型的案例就是在 postmaster 進程退出時,主進程借助 Latch 模塊的接口喚醒所有的子進
3、程,以此讓 PostgreSQL 退出時所需要做的資源清理工作順利完成。外部事件外部事件需要由“客戶端-服務器”共同負責,典型的案例就是客戶端接入時,保持著事件等待狀態的服務端被喚醒,由此展開后續的會話建立工作。PostgreSQL Latch 實現原理Latch 模塊依托于系統接口而實現,PostgreSQL 會根據編譯時的選項選擇對應的實現方案:poll(Unix)epoll(Linux)kqueue(BSD)Event(Windows)在這次技術演講中,我將把咱們的關注點,放置于“基于 Linux Epoll 模型實現的 Latch 版本”,因為 Linux Epoll 應用廣泛,知名度
4、高。Linux Epoll 編程接口Epoll 接口負責對一組文件的狀態展開檢測:Linux I/O 模型在 Linux 中,所有的設備都被抽象為“文件”,設備的狀態變化體現為“文件”的狀態變化。進程通信機制(IPC)進程之間、進程內部可以通過信號、管道、信號描述符(signal fd)等進程通信機制展開信息交流,這些機制可以作為事件通知的基礎設施而被使用。Epoll 允許攜帶自定義的數據(User Data)在注冊監聽設備的同時,我們可以同時提供自定義的數據,如此就可以讓我們的工作能夠契合更豐富的場景。PostgreSQL Latch 事件對象在 Latch 模塊的工作之中:WaitEven
5、tSet 負責整合 Latch 變量與 WaitEvent,將其文件描述符集合集體整合到一起,與 Epoll 等接口通信WaitEvent 包含在 epoll 接口的“用戶自定義數據”中,在文件描述符狀態發生變化以后,隨描述符一并返回Latch 變量會包含在一個等待事件集合之中,作為一個標記值而存在。PostgreSQL Latch 自定義事件的工作原理PostgreSQL 的自定義事件分為三種基本的操作:SetLatch讓 PostgreSQL 發送信號(在 Linux 下,為 SIGURG),讓對應的文件描述符狀態發生變化,進而結束 PostgreSQL 的事件等待狀態,讓 Postgre
6、SQL 轉向事件處理,并將事件等待集合(WaitEventSet)中的 Latch 變量標記為 trueResetLatch對 Latch 變量進行重置,將其標記為 false,代表沒有事件發生WaitLatch調用 epoll 或其它系統接口(不會直接調用,調用的是中間層接口),等待 Latch 被設置(PostgreSQL 有一個專門的 LatchWaitSet 全局變量,負責單純的自定義事件等待)PostgreSQL Latch 客戶端相關事件的工作原理客戶端相關事件,屬于由客戶端程序與服務器程序共同決定,而經由操作系統進行通知的事件,因此要講解它的原理及應用,需要結合于實踐的經歷。參考
7、下面的兩張截圖,是我在使用 psql(客戶端)與 gdb(調試器)分析 PostgreSQL 服務端行為時所截下來的。PostgreSQL Latch 總結PostgreSQL Latch 模塊在 PostgreSQL 中是一種通用的事件處理框架,在客戶端響應、自定義事件的處理中發揮著重要的作用,它會根據編譯時指定的編譯選項,選擇對應的系統接口加以實現。想要了解 Latch 的原理與應用,我們只需要把握“三類角色”“兩類事件”這條工作主軸,結合對應平臺下的進程通信機制,就可以明白清晰地達成目的。寫在最后作為一名應急管理大學的在讀本科生,今天能夠來到中國科學院,代表團隊向大家分享我們在數據庫內核領域的學習成果,我感到非常榮幸和自豪,在此感謝中國科學院與中國 PG 分會的工作人員,謝謝你們提供給我們團隊發表報告的機會,非常感謝!同時,我也要向我的家人們,我的本科生導師,袁國銘博士,團隊同學楊梅,李雋爍,中國 PG 分會的魏波老師,王其達老師,以及 紅發哥,Makio,是非哥,進化哥,可可,周熙彥,劉威,周杰洋,肖詩怡,謝冰琳等同志們致以誠摯的謝意!非常期待在未來能夠與各位繼續進步,祝大家工作順利,謝謝!THANK YOU我們的聯系方式18569487851(文一)15878485116(楊梅)18730663784(李雋爍)