Plugins Mysqlnd
e Proxy MySQL são tecnologias
diferentes que usam abordagens diferentes. Ambas são ferramentas válidas para
resolver uma variedade de tarefas comuns, como balanceamento de carga, monitoramento
e melhorias de desempenho. Uma diferença importante é que o Proxy
MySQL funciona com todos os clientes MySQL, enquanto
os plugins mysqlnd
são específicos para aplicações PHP.
Como uma extensão PHP, um plugin mysqlnd
é
instalado no servidor de aplicativos PHP, junto com o restante do PHP.
O Proxy MySQL pode ser executado no servidor de aplicativos PHP ou pode ser
instalado em uma máquina dedicada para lidar com vários servidores de aplicações
PHP.
A implantação do Proxy MySQL no servidor de aplicativos tem duas vantagens:
Nenhum ponto único de falha
Fácil de escalonar horizontalmente (escalonar por cliente)
O proxy MySQL (e os plugins mysqlnd
) podem resolver
facilmente problemas que de outra forma exigiriam alterações em
aplicações existentes.
No entanto, o Proxy MySQL tem algumas desvantagens:
Proxy MySQL é um novo componente e uma nova tecnologia para dominar e implantar.
O Proxy MySQL requer conhecimento da linguagem de script Lua.
O proxy MySQL pode ser customizado com programação C e Lua. Lua é a
linguagem de script preferida do Proxy MySQL. Para a maioria dos especialistas em PHP, Lua
é uma nova linguagem para se aprender. Um plugin mysqlnd
pode
ser escrito em C. Também é possível escrever plugins em PHP usando
» PECL/mysqlnd_uh.
O proxy MySQL é executado como um daemon - um processo em segundo plano. O proxy MySQL pode
recuperar decisões anteriores, pois todo o estado pode ser retido. Entretanto, um
plugin mysqlnd
está vinculado ao ciclo de vida baseado em
solicitações do PHP. O Proxy MySQL também pode compartilhar resultados computados
únicos entre vários servidores de aplicativos. Um
plugin mysqlnd
precisaria armazenar dados em um
meio persistente para poder fazer isso. Outro daemon precisaria ser
usado para essa finalidade, como o Memcache. Isso dá ao Proxy MySQL uma
vantagem neste caso.
O proxy MySQL funciona sobre o protocolo de fio. Com o Proxy MySQL é necessário analisar e fazer engenharia reversa do protocolo MySQL Client Server. As ações são limitadas àquelas que podem ser alcançadas através da manipulação do protocolo de comunicação. Se o protocolo de fio for alterado (o que acontece muito raramente), os scripts do proxy MySQL também precisarão ser alterados.
Os plugins Mysqlnd
funcionam sobre a API C, que
espelha o cliente libmysqlclient
.
Esta API C é basicamente um encapsulador em torno do protocolo clienten-servidor
MySQL, ou protocolo de fio, como às vezes é chamado. Pode-se
interceptar todas as chamadas da API C. O PHP faz uso da API C, portanto
pode-se conectar todas as chamadas PHP, sem a necessidade de programar
no nível do protocolo de fio.
Mysqlnd
implementa o protocolo de fio. Os plugins podem,
portanto, analisar, fazer engenharia reversa, manipular e até mesmo substituir o
protocolo de comunicação. No entanto, isso geralmente não é necessário.
Como os plugins permitem criar implementações que utilizam dois níveis (API
C e protocolo de fio), eles têm maior flexibilidade que o Proxy
MySQL. Se um plugin mysqlnd
for implementado usando
a API C, quaisquer alterações subsequentes no protocolo de fio não requerem
alterações no próprio plugin.