ProxySQL官檔翻譯__16_ProxySQL_Threads_01_主要的線程

16_ProxySQL_Threads_01_主要的線程

備註:文章編寫時間201904-201905期間,後續官方在github的更新沒有被寫入
~
~
ProxySQL的線程[ProxySQL Threads]
ProxySQL是多線程守護程序,每個模塊有一個或多個線程。
以下是正常運行的線程列表:

一、Main thread

該線程僅負責引導核心模塊並啓動其他核心線程。

二、Admin thread

該線程負責以下內容:
1)它負責初始化和引導Admin interface;
2)它負責根據配置文件或數據庫文件執行配置的初始加載;
3)如果啓用,它可啓動處理Web UI的HTTP服務器;
4)如果啓用,則可配置羣集模塊;
5)它啓動一個監聽器,負責接受對Admin界面(Admin interface)發起的新連接,併爲每個 admin/stats 連接創建一個新線程;

三、MySQL workers

mysql-threads 線程負責處理所有MySQL流量,所有客戶端連接和所有後端連接。它實現爲:幾個線程處理任意數量的連接。MySQL工作線程會相同的端口上監聽所有請求。
當一個新客戶端連接時,一個MySQL工作線程將成功接受該連接並創建一個MySQL會話:MySQL會話/客戶端綁定到該特定工作線程,直到客戶端斷開連接。換句話說,客戶端連接成功後,其請求始終由同一個MySQL工作線程處理。

四、MySQL auxiliary threads

這些線程也稱爲"空閒線程"("idle threads")。
如果使用 --idle-threads 選項啓動proxysql,則會爲每個MySQL工作線程啓動一個輔助線程。每個MySQL工作線程及其輔助線程將一起工作:第一個線程(主工作線程)負責處理活動連接,並將所有空閒連接分配給第二個線程(輔助線程),而第二個線程只等待空閒連接上發生事件(或超時),如果發生這種情況(由空閒邊活躍),則將它們傳回第一個線程。

當活動客戶端連接數與空閒客戶端連接數相比非常小時,建議使用"空閒線程"("idle threads")。通過這樣的方式,可以使ProxySQL處理數十萬個連接(測試多達100萬個連接)。

五、HTTP server (new in 1.4.4)

ProxySQL有一個使用了 libmicrohttpd 的內置HTTP服務器。請爲其配置 MHD_USE_INTERNAL_POLLING_THREAD 參數,因此它可能使用到多個線程。

六、Cluster threads (new in 1.4.2)

對於ProxySQL羣集中的每個ProxySQL節點,需要爲他們每一個啓動一個線程並僅負責管理一個與他們自己相對應得同伴實例(對等體)。如果添加或刪除了節點,則線程數可以動態增加或減少。

七、Query Cache purge thread

此線程充當查詢緩存的垃圾收集器。垃圾收集器用於確保對不在服務通道中得數據(客戶端正在等待回覆得鏈路數據)執行清除。

八、ClickHouse Server thread (new in 1.4.3)

如果啓用了ClickHouse Server(如果編譯了對ClickHouse的支持,並且使用--clickhouse-server啓動了proxysql),則此線程負責以下內容:
1)它負責初始化ClickHouse模塊;
2)它啓動一個監聽器,負責接受新連接,併爲每個想要訪問ClickHouse的客戶端連接創建一個新線程。

九、SQLite3 Server thread (new in 1.4.3)

如果啓用了SQLite3 Server(proxysql以--sqlite3-server啓動),則此線程負責以下內容:
1)它負責初始化SQLite3服務器模塊;
2)它啓動一個監聽器,負責接受新連接併爲每個想要訪問內置SQLite3服務器的客戶端連接創建一個新線程;

十、Monitor threads

Monitor模塊啓動了多個線程。
它的實現在過去發生了些變化,造成有些版本減少了線程數量,有些版本中增加了線程數量。

在ProxySQL 1.4中,Monitor模塊啓動的線程有如下這些:
1)一個主要的線程負責爲每個監視器類別啓動一個線程(總共5個);
2)一個線程調度負責連接的檢查;
3)一個線程調度負責ping檢查;
4)一個線程調度負責read-only檢查;
5)一個線程調度負責複製延時檢查;
6)一個線程調度負責組複製監控;
7)還有一個線程池(最初大小是mysql-threads大小的兩倍);

線程池負責執行由調度線程調度的所有檢查和監視。線程池的大小可以根據監視器隊列中的待檢查數的多少自動增長和縮小。相同的線程還負責根據檢查結果立即採取措施,例如避開節點或重新配置主機組。

十一、Note on CPU usage

上面列出的線程具有非常不同的CPU使用情況。

通常,MySQL工作線程是最繁忙的線程,負責大部分CPU使用。而其他線程的CPU使用率非常低,但如果ProxySQL必須檢查數百或數千臺服務器,則Monitor模塊可能會大幅增加Monitor線程池的大小。
繼而使得Monitor線程大量增加,導致它們使用的了大量的CPU資源。

~
~
完畢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章