Mysqlnd
插件和 MySQL Proxy 是使用不同方法的不同技术。两者都是解决各种常见任务(如负载平衡、监控和性能增强)的有效工具。一个重要的区别是 MySQL Proxy 可以与所有 MySQL 客户端一起使用,而 mysqlnd
插件特定于 PHP 应用程序。
作为 PHP 扩展,mysqlnd
插件与 PHP 的其余部分一起安装在 PHP 应用程序服务器上。MySQL Proxy 可以运行在 PHP 应用程序服务器上,也可以安装在专用机器上以处理多个 PHP 应用程序服务器。
在应用程序服务器上部署 MySQL Proxy 有两个优点
没有单点故障
易于扩展(水平扩展,按客户端扩展)
MySQL Proxy(和 mysqlnd
插件)可以轻松解决原本需要更改现有应用程序才能解决的问题。
但是,MySQL Proxy 也有一些缺点
MySQL Proxy 是一种新的组件和技术,需要掌握和部署。
MySQL Proxy 需要 Lua 脚本语言的知识。
MySQL Proxy 可以使用 C 和 Lua 编程进行自定义。Lua 是 MySQL Proxy 首选的脚本语言。对于大多数 PHP 专家来说,Lua 是一种需要学习的新语言。一个 mysqlnd
插件可以用 C 编写。也可以使用 » PECL/mysqlnd_uh 使用 PHP 编写插件。
MySQL Proxy 作为守护进程运行 - 后台进程。MySQL Proxy 可以回忆之前的决策,因为所有状态都可以保留。但是,mysqlnd
插件绑定到 PHP 的基于请求的生命周期。MySQL Proxy 还可以跨多个应用程序服务器共享一次性计算的结果。一个 mysqlnd
插件需要将数据存储在持久介质中才能做到这一点。需要为此目的使用另一个守护进程,例如 Memcache。在这种情况下,这使 MySQL Proxy 具有优势。
MySQL Proxy 位于线协议之上。使用 MySQL Proxy,您必须解析和反向工程 MySQL 客户端服务器协议。操作仅限于可以通过操作通信协议实现的操作。如果线协议发生更改(这种情况很少发生),则也需要更改 MySQL Proxy 脚本。
Mysqlnd
插件位于 C API 之上,它反映了 libmysqlclient
客户端。此 C API 基本上是 MySQL 客户端服务器协议或线协议(有时称为)的包装器。您可以拦截所有 C API 调用。PHP 使用 C API,因此您可以挂钩所有 PHP 调用,而无需在线协议级别进行编程。
Mysqlnd
实现线协议。因此,插件可以解析、反向工程、操作甚至替换通信协议。但是,这通常不需要。
由于插件允许您创建使用两个级别(C API 和线协议)的实现,因此它们比 MySQL Proxy 具有更大的灵活性。如果 mysqlnd
插件使用 C API 实现,则线协议的任何后续更改都不需要更改插件本身。