Swoole MySQL Proxy
一個基於 MySQL 協議,Swoole 開發的MySQL資料庫連線池。
原理
將資料庫連接作為物件儲存在記憶體中,當使用者需要存取資料庫時,首次會建立連接,後面並非建立一個新的連接,而是從連接池中取出一個已建立的空閒連線物件。使用完畢後,使用者並非將連線關閉,而是將連線放回連線池中,以供下一個請求存取使用。而連結的建立、斷開都由連接池本身來管理。
同時,也可以透過設定連線池的參數來控制連線池中的初始連線數、連線的上下限數以及每個連線的最大使用次數、最大空閒時間等等。也可以透過其自身的管理機制來監視資料庫連線的數量、使用情況等。超出最大連線數會採用協程掛起,等到有連線關閉再恢復協程繼續操作。
特性
支援讀寫分離支援資料庫連接池,能夠有效解決PHP 帶來的資料庫連接瓶頸支援SQL92 標準採用協程調度支援多個資料庫連接,多個資料庫,多個用戶,靈活搭配遵守MySQL 原生協議,跨語言,跨平台的通用中間件代理支援MySQL 事務支援HandshakeV10 協議版本完美兼容MySQL4.1 - 8.0兼容各大框架,無縫提升性能
設計初衷
PHP 沒有連接池,所以高並發時資料庫會出現連接打滿的情況,Mycat 等資料庫中間件會出現部分SQL 無法使用,例如不支援批量添加等,而且過於臃腫。所以就自己編寫了這個僅支援連接池和讀寫分離的輕量級中間件,使用 Swoole 協程調度 HandshakeV10 協議轉發使程式更加穩定,不用像 Mycat 一樣解析所有 SQL 包體,增加複雜度。
開發與討論
文件:https://smproxy.louislivi.com
若被牆請造訪:https:/ /smproxy.gitee.louislivi.com
QQ群:722124111歡迎各類Issue 和Pull Request。
貢獻者清單