2024 年 PHP Conference Japan

mysqlnd 插件與 MySQL Proxy 的比較

Mysqlnd 插件和 MySQL Proxy 是使用不同方法的不同技術。兩者都是解決各種常見任務的有效工具,例如負載平衡、監控和效能增強。一個重要的區別是 MySQL Proxy 可與所有 MySQL 用戶端一起使用,而 mysqlnd 插件則專用於 PHP 應用程式。

作為 PHP 擴充,mysqlnd 插件與 PHP 的其餘部分一起安裝在 PHP 應用程式伺服器上。MySQL Proxy 可以運行在 PHP 應用程式伺服器上,也可以安裝在專用機器上以處理多個 PHP 應用程式伺服器。

在應用程式伺服器上部署 MySQL Proxy 有兩個優點

  1. 沒有單點故障

  2. 易於擴展(水平擴展,按用戶端擴展)

MySQL Proxy(和 mysqlnd 插件)可以輕鬆解決原本需要更改現有應用程式才能解決的問題。

然而,MySQL Proxy 確實有一些缺點

  • MySQL Proxy 是一個需要學習及部署的新組件和技術。

  • MySQL Proxy 需要 Lua 腳本語言的知識。

MySQL Proxy 可以使用 C 和 Lua 編程自訂。Lua 是 MySQL Proxy 的首選腳本語言。對於大多數 PHP 專家來說,Lua 是一種需要學習的新語言。可以使用 C 語言編寫 mysqlnd 插件。也可以使用 » PECL/mysqlnd_uh 以 PHP 編寫插件。

MySQL Proxy 以常駐程式(daemon)的形式運行,即在背景中運行。MySQL Proxy 可以記住先前的決策,因為所有狀態都可以被保留。然而,mysqlnd 插件受限於 PHP 基於請求的生命週期。MySQL Proxy 還可以在多個應用程式伺服器之間共享一次計算的結果。mysqlnd 插件需要將數據儲存在持久性媒介中才能做到這一點。需要使用另一個常駐程式來達到此目的,例如 Memcache。在這種情況下,MySQL Proxy 佔有優勢。

MySQL Proxy 基於網路通訊協定運作。使用 MySQL Proxy 時,您必須解析和逆向工程 MySQL 用戶端伺服器協定。操作僅限於透過操作通訊協定所能實現的操作。如果網路通訊協定發生更改(這種情況很少發生),MySQL Proxy 腳本也需要更改。

Mysqlnd 插件基於 C API 運作,該 API 反映了 libmysqlclient 用戶端。這個 C API 基本上是 MySQL 用戶端伺服器協定(有時稱為網路通訊協定)的包裝器。您可以攔截所有 C API 呼叫。PHP 使用 C API,因此您可以攔截所有 PHP 呼叫,而無需在網路通訊協定層級進行編程。

Mysqlnd 實作了網路通訊協定。因此,插件可以解析、逆向工程、操作甚至替換通訊協定。然而,這通常是不必要的。

由於插件允許您創建使用兩個層級(C API 和網路通訊協定)的實作,因此它們比 MySQL Proxy 具有更大的彈性。如果使用 C API 實作 mysqlnd 插件,則對網路通訊協定的任何後續更改都不需要更改插件本身。

新增註記

使用者提供的註記

此頁面沒有使用者提供的註記。
To Top