SMProxy:基於 MySQL 協議,Swoole 開發的 MySQL 資料庫連線池
中文 |English
/$$$$$$/$$/$$ /$$$$$$$ /$$__$$| $$$/$$$| $$__$$ | $$\__/| $$$$/$$$$| $$\ $$ /$$$$$$/$$$$$$/$$/$$ /$$/$$ |$$$$$$ | $$ $$/$$ $$| $$$$$$$//$$__$$ /$$__$$|$$ /$$/| $$| $$ \____$$| $$$$$| $$| $$____/| $$\__/| $$\ $$ \$$$$/ | $$| $$ /$$\ $$| $$\$ | $$| $$| $$| $$| $$>$$$$ | $$| $$ |$$$$$$/| $$ \/| $$| $$| $$|$$$$$$/ /$$/\$$|$$$$$$$ \______/ |__/|__/|__/|__/\______/ |__/\__/ \____$$ /$$| $$ |$$$$$$/ \______/
SMProxy
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
- QQ群:722124111
- 歡迎各類 Issue 和 Pull Request。
貢獻者列表
因為有你們,SMProxy 才能走到現在。
Backers
Thank you to all our backers!
Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor ]