SMProxy,讓你的項目數據庫操作快三倍!

SMProxy

GITHUB:https://github.com/louislivi/...

swoole msyql proxy 一個基於mysql協議,swoole 開發的mysql數據庫連接池

數據庫連接池

數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重複使用一個現有的數據庫連接,而不是再重新建立一個;
釋放空閒時間超過最大空閒時間的數據庫連接來避免因爲沒有釋放數據庫連接而引起的數據庫連接遺漏。
這項技術能明顯提高對數據庫操作的性能。 

特性

  • 支持讀寫分離
  • 支持數據庫連接池,能夠有效解決PHP帶來的數據庫連接瓶頸
  • 支持SQL92標準
  • 遵守Mysql原生協議,跨語言,跨平臺的通用中間件代理。
  • 支持多個數據庫連接,多個數據庫,多個用戶,靈活搭配。
  • 支持mysql事物
  • 採用協程調度
  • 支持 HandshakeV10 協議版本
  • 完美兼容mysql5.6-5.7

設計初衷

php沒有連接池,所以高併發時數據庫會出現連接打滿的情況,
mycat等數據庫中間件會出現部分sql無法使用,例如不支持批量添加等,而且過於臃腫。
所以就自己編寫了這個僅支持連接池和讀寫分離的輕量級中間件,
使用swoole協程調度HandshakeV10協議轉發使程序更加穩定不用像mycat一樣解析所有sql包體,增加複雜度。

環境

  • swoole 2.1+
  • php 7.0+

安裝

下載的文件直接解壓即可。

運行

  • bin/server start : 運行服務
  • bin/server stop : 停止服務
  • bin/server restart : 重啓服務
  • bin/server status : 查詢服務運行狀態
  • bin/server reload : 平滑重啓
  • bin/server -h : 幫助

SMProxy連接測試

測試SMProxy與測試mysql完全一致,mysql怎麼連接,SMProxy就怎麼連接。

推薦先採用命令行測試:

mysql -uroot -p123456 -P3366 -h127.0.0.1

也可採用工具連接。

測試

$start = microtime(true);
print_r(Db::query('select * from account limit 1'));
print_r(microtime(true)-$start);

未使用SMProxy連接池運行:

0.17314600944519

使用SMProxy連接池運行:

0.073625087738037

配置文件:

ROOT 當前SMProxy跟目錄

database.json

{
  "database": {
    "account": {
      "root": {
        "user": "root", 
        "password": "123456"
      }
    },
    "serverInfo": {
      "server1": {
        "write": {
          "host": "127.0.0.1",
          "port": 3306,
          "timeout": 0.5,
          "flag": 0,
          "account": "root"
        },
        "read": {
          "host": "127.0.0.1",
          "port": 3306,
          "timeout": 0.5,
          "flag": 0,
          "account": "root"
        }
      }
    },
    "databases": {
      "db1": {
        "serverInfo": "server1",
        "maxSpareConns": 10,
        "maxConns": 20,
        "charset": "utf-8"
      }
    }
  }
}
account 賬號信息 serverInfo 服務信息 databases 數據庫連接池信息
account.root 用戶標識 與 serverInfo...account.root 對應 serverInfo.server1 服務標識 與 databases..serverInfo 對應 databases.db1 數據庫名稱
account..user 用戶名 serverInfo..write 讀寫分離 write 寫庫 read 讀庫 databases..serverInfo 服務信息
account..password 密碼 serverInfo..host 數據庫連接地址 databases..maxSpareConns 最大空閒連接數
serverInfo..prot 數據庫端口 databases..maxConns 最大連接數
serverInfo..timeout 數據庫超時時長(秒) databases..charset 數據庫編碼格式
serverInfo..flag TCP類型目前支持0阻塞 不支持1.非阻塞
serverInfo..account 與 databases.account 對應

server.json

{
  "server": {
    "user":"root",
    "password":"123456",
    "charset":"utf8mb4",
    "host": "0.0.0.0",
    "port": "3366",
    "mode": 3,
    "sock_type": 1,
    "logs": {
      "open":true,
      "config": {
        "system": {
          "log_path": "/var/www/swoole/swoole-mysql-proxy/logs",
          "log_file": "system.log",
          "format": "Y/m/d"
        },
        "mysql": {
          "log_path": "/var/www/swoole/swoole-mysql-proxy/logs",
          "log_file": "mysql.log",
          "format": "Y/m/d"
        }
      }
    },
    "swoole": {
      "worker_num": 2,
      "max_coro_num": 16000,
      "open_tcp_nodelay": true,
      "daemonize": 0,
      "heartbeat_check_interval": 60,
      "heartbeat_idle_time": 600,
      "reload_async": true,
      "log_file": "/var/www/swoole/swoole-mysql-proxy/logs/error.log",
      "pid_file": "/var/www/swoole/swoole-mysql-proxy/logs/pid/server.pid"
    },
    "swoole_client_setting": {
      "package_max_length": 16777216
    },
    "swoole_client_sock_setting": {
      "sock_type": 1,
      "sync_type": 1
    }
  }
}
user 服務用戶名 password 服務密碼 charset 服務編碼 host 鏈接地址 port 服務端口 多個以,隔開 mode sock_type 1 tcp logs 日誌配置 swoole swoole配置 swoole_client_setting 客戶端配置 swoole_client_sock_setting 客戶端sock配置
logs.open 日誌開關 worker_num work進程數量 package_max_length 最大包長 sock_type 1.tcp
logs.config 日誌配置項 max_coro_num 最大攜程數 sync_type 1.異步
logs.system or mysql 配置模塊 open_tcp_nodelay 關閉Nagle合併算法
logs..log_path 日誌目錄 daemonize 守護進程化
logs..log_file 日誌文件名 heartbeat_check_interval 心跳檢測
logs..format 日誌日期格式 heartbeat_idle_time 最大空閒時間
reload_async 異步重啓
log_file 日誌目錄
pid_file 主進程pid目錄

其他學習資料

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