mysqlnd 플러그인과 MySQL 프록시 비교

Mysqlnd 플러그인과 MySQL Proxy는 서로 다른 접근 방식을 사용하는 서로 다른 기술입니다. 둘 다 로드 밸런싱, 모니터링 및 성능 향상과 같은 다양한 일반 작업을 해결하기 위한 유효한 도구입니다. 중요한 차이점은 MySQL Proxy는 모든 MySQL 클라이언트에서 작동하는 반면 mysqlnd 플러그인은 PHP 애플리케이션에만 적용된다는 것입니다.

PHP 확장으로서 mysqlnd 플러그인은 나머지 PHP와 함께 PHP 애플리케이션 서버에 설치됩니다. MySQL 프록시는 PHP 애플리케이션 서버에서 실행하거나 여러 PHP 애플리케이션 서버를 처리하기 위해 전용 시스템에 설치할 수 있습니다.

애플리케이션 서버에 MySQL 프록시를 배포하면 두 가지 이점이 있습니다.

  1. 단일 실패 지점 없음
  2. 스케일 아웃 용이(수평 스케일 아웃, 클라이언트별 스케일 아웃)

MySQL Proxy(및 mysqlnd 플러그인)는 기존 애플리케이션을 변경해야 하는 문제를 쉽게 해결할 수 있습니다.

그러나 MySQL Proxy에는 몇 가지 단점이 있습니다.

  • MySQL Proxy는 마스터하고 배포할 새로운 구성 요소이자 기술입니다.
  • MySQL Proxy는 Lua 스크립팅 언어에 대한 지식이 필요합니다.

MySQL 프록시는 C 및 Lua 프로그래밍으로 사용자 정의할 수 있습니다. Lua는 MySQL Proxy에서 선호하는 스크립팅 언어입니다. 대부분의 PHP 전문가에게 Lua는 배울 수 있는 새로운 언어입니다. mysqlnd 플러그인은 C로 작성할 수 있습니다. » PECL/mysqlnd_uh를 사용하여 PHP로 플러그인을 작성할 수도 있습니다.

MySQL 프록시는 백그라운드 프로세스인 데몬으로 실행됩니다. MySQL Proxy는 모든 상태를 유지할 수 있으므로 이전 결정을 불러올 수 있습니다. 그러나 mysqlnd 플러그인은 PHP의 요청 기반 수명 주기에 바인딩됩니다. MySQL Proxy는 또한 여러 애플리케이션 서버 간에 일회성 계산 결과를 공유할 수 있습니다. mysqlnd 플러그인은 이를 수행하기 위해 영구 매체에 데이터를 저장해야 합니다. 이 목적을 위해 Memcache와 같은 다른 데몬을 사용해야 합니다. 이것은 이 경우 MySQL Proxy에 이점을 제공합니다.

MySQL Proxy는 유선 프로토콜 위에서 작동합니다. MySQL 프록시를 사용하면 MySQL 클라이언트 서버 프로토콜을 구문 분석하고 리버스 엔지니어링해야 합니다. 통신 프로토콜을 조작하여 수행할 수 있는 작업으로 제한됩니다. 유선 프로토콜이 변경되면(매우 드물게 발생) MySQL Proxy 스크립트도 변경해야 합니다.

Mysqlnd 플러그인은 libmysqlclient 클라이언트를 미러링하는 C API 위에서 작동합니다. 이 C API는 기본적으로 MySQL 클라이언트 서버 프로토콜 또는 유선 프로토콜(때로는 호출됨)을 둘러싼 래퍼입니다. 모든 C API 호출을 가로챌 수 있습니다. PHP는 C API를 사용하므로 유선 프로토콜 수준에서 프로그래밍할 필요 없이 모든 PHP 호출을 후크할 수 있습니다.

Mysqlnd는 유선 프로토콜을 구현합니다. 따라서 플러그인은 통신 프로토콜을 구문 분석, 리버스 엔지니어링, 조작 및 교체할 수 있습니다. 그러나 이것은 일반적으로 필요하지 않습니다.

플러그인을 사용하면 두 가지 수준(C API 및 유선 프로토콜)을 사용하는 구현을 생성할 수 있으므로 MySQL Proxy보다 유연성이 뛰어납니다. mysqlnd 플러그인이 C API를 사용하여 구현된 경우 유선 프로토콜에 대한 후속 변경은 플러그인 자체를 변경할 필요가 없습니다.