Atlas:來自360的MySQL中間層
Atlas是由 Qihoo 360公司Web平臺部基礎架構團隊開發維護的一個基于MySQL協議的數據中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎上,修改了大量bug,添加了很多功能特性。目前該項目在360公司內部得到了廣泛應用,很多MySQL業務已經接入了Atlas平 臺,每天承載的讀寫請求數達幾十億條。
Atlas主要功能:
- 讀寫分離
- 從庫負載均衡
- IP過濾
- 自動分表
- DBA可平滑上下線DB
- 自動摘除宕機的DB </ul>
- 將主流程中所有Lua代碼用C重寫,Lua僅用于管理接口
- 重寫網絡模型、線程模型
- 實現了真正意義上的連接池
- 優化了鎖機制,性能提高數十倍 </ul>
Atlas相對于官方MySQL-Proxy的優勢
Atlas是一個位于應用程序與MySQL之間中間件。在后端DB看來,Atlas相當于連接它的客戶端,在前端應用看來,Atlas相當于一個 DB。Atlas作為服務端與應用程序通訊,它實現了MySQL的客戶端和服務端協議,同時作為客戶端與MySQL通訊。它對應用程序屏蔽了DB的細節, 同時為了降低MySQL負擔,它還維護了連接池。Atlas的整體架構,可參考下面這兩幅圖:
Atlas啟動后會創建多個線程,其中一個為主線程,其余為工作線程。主線程負責監聽所有的客戶端連接請求,工作線程只監聽主線程的命令請求。如圖 所示,主線程接收到客戶端的連接請求,將該請求的相關信息封裝為一個名為CON的結構,再把該結構推入一個異步隊列。然后通過round-robin方式 選擇一個工作線程,向其發送一個字節的數據包以激活它。工作線程在收到主線程的激活指令后,從異步隊列中取出CON結構,開始處理客戶端的請求。
參考文檔:https://github.com/Qihoo360/Atlas
</div> 引用地址:http://www.biaodianfu.com/atlas.html 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!