Главная > AJAX, Open Source, web2.0, Высокопроизводительная архитектура, СУБД > Apache mod_ndb — MySQL кластер с доступом через HTTP и Ajax.

Apache mod_ndb — MySQL кластер с доступом через HTTP и Ajax.

13 января 2008

mysql_100x52-64.gifПриветствую наших читателей. В сегодняшнем мире Ajax и сложных интернет-приложений построение высокопроизводительной архитектуры с одной стороны, способной обслуживать тысячи и миллионы запросов, и обеспечение взаимодействие с другими сервисами, как в рамках своей системы, так и интеграция со сторонними приложениями, используя базовые стандартные протоколы, как ни когда актуальна, согласитесь. Для решения первой задачи применяют различные методы и подходы, но основным считается сначала применение различного рода оптимизации (поясню, что здесь и далее речь идёт о СУБД MySQL), потом переходим к использованию расширенных но эксклюзивных возможностей нашей СУБД (вроде partition tables), репликация, но в конце концов мы приходим к использованию кластерной архитектуры, как, наверное, единственного решения для высоких нагрузок и обеспечения доступности.

Но вот со второй задачей уже сложности. И чем дальше мы углубляемся в особенности конкретной СУБД, чем больше возможностей и скрытых настроек применяем, тем сложнее и нетривиальность будет получить доступ к нашей системе извне, как нашим же собственным программам, так и в случае интеграции и агрегации с другими сервисами. Не побоюсь постулировать тот тезис, что система, не готовая и не открытая к взаимодействиям с другими сервисами, максимально прозрачно, доступно и стандартно, обречена на закрытое существование. А поэтому мы сразу поставим себе задачу обеспечить прозрачное и быстрое соединение различных сервисов с нашей базой данных. Сама база будет строится на основе кластера MySQL, который ранее был доступен только коммерческим пользователям, но с версии 5.0 уже интегрирован в основную ветку и доступен в бесплатном релизе Community Edition.

Так что же такое этот mod_ndb? Если кратко - это модуль к популярному веб-серверу Apache (поддерживается как версия 1.3.х, так и 2.2.х, и, конечно, для серьёзной работы вторая предпочтительнее из-за её расширенной работы с потоками), который позволяет напрямую подключатся к MySQL Cluster API, и работать с базой данной через HTTP запросы, возвращая данные сразу в виде JSON или в другом понятном вызывающей стороне формате.

Модуль принимает запросы HTTP GET, POST и DELETE, при этом на стороне сервера можно предварительно обрабатывать полученные данные любым образом, используя, к примеру, Apache subquery API, в этом случае можно описывать логику обработки в скриптах на языках PHP/Perl.

Для начала работы необходимо установить базу данных и настроить кластер, поддерживаются версии сервера 5.0 и 5.1, потом настроить веб-сервер Apache, в котором, в конфигурационных файлах следует описать обработчик запросов, подключить модуль mod_ndb, а также в его конфигурациях описать все параметры для доступа к кластеру. Вот здесь проявляется различие между версиями Apache - каждый процесс сервера, который подключается к кластеру, требует NodeID, а нодов в типичном кластере не так и много (обычно два или три), поэтому для обхода ограничения следует использовать многопоточную реализацию Apache 2.х, где будет использоватся только один общий процесс, подключённый к кластеру.

Далее в конфигурации описываются варианты доступа и форматы ответа сервера, к примеру, мы хотим получать именно JSON. Пользователь, подключающийся к серверу, совсем не получает полного контроля и возможности исполнять любые запросы, совсем нет. Он только обращается к предварительно сконфигурированным специальным URL, которые, в свою очередь, уже берут из конфигурации соответствующие запросы, подставляют туда нужные данные и производят операции наб базой (выполняют необходимые SQL запросы, часто не только простые, но и сложные, с под-запросами и транзакциями). В этой же конфигурации прописан и формат ответа - причём, вариантов конфигурации есть очень много - здесь и обычный XML, JSON и HTML, и двоичный, и "чистый" (raw) без обработки, и даже особые варианты сразу форматирование, вроде HTML-ссылок и другие варианты (это все отлично описано в документации, в разделе Mod ndb formats).

Кроме этого, мы уже упоминали, что можно создавать обработчики на обычных языках, встроенных в веб-сервер - поддерживаются PHP, Perl и Ruby. Правда, эти возможности, судя по описанию, так как используются расширенные возможности сервера Apache, то эта возможность будет доступна только для версий 2.х.

Вот кратко и все. Ничего вам не напомнило? Если нет, делаю подсказку - в прошлом ещё году мы писали о разработке программистов из Нью-Йорк Таймс, DBSlayer, который также позволяет взаимодействовать с базой данных  посредством обычных запросов через HTTP. В принципе, можно вспомнить ещё и гораздо более экзотические варианты, вроде специальной СУБД CouchDB, которая позиционируется сразу как готовая для работы с веб-приложениями и в составе оных.

Таким образом мы прямо наблюдаем расширение возможностей уже ставших привычным нам инструментов. Причём, расширение идёт, с одной стороны, в сторону взаимодействия с другими сервисами и программами, с другой - к применению уже ставших стандартом де-факто протоколов и форматов данных. Можно, конечно, спорить о нужности или применимости каждой разработки в каждом конкретном случае, но то, что эти возможности полезные и помогают при разработке серьёзных больших и открытых систем - без сомнения.

Например, этот же mod_ndb можно применить в качестве основы для такой себе веб-ориентированной базы данных, даже можно создать что-то на подобии Amazon EC. А если использовать прозрачную возможность сразу получать данные в формате JSON, и вспомнить, что существуют такие мощные AJAX фреймворки, для построения интерфейса веб-приложений, как ExtJS, в которых есть мощнейшие компоненты для таблиц (с встроенным редактированием, сортировкой и другими возможностями). И представьте, что такой визуальный компонент получат данные от модуля mod_ndb, сразу в нужном формате JSON, а все действия, которые нужно производить над базой (которые приводят к её изменению) делаются через этот же API. Мы получим отличнейшую систему администрирования, по удобству и даже красивости она будет на несколько порядков превосходить тот же phpMyAdmin, вместе с тем приблизится вплотную к десктопным утилитам, вроде тех же официальных MySQL Administrator или MySQL Query.

Вот такие вот перспективы. Если вас это заинтересовало, вот несколько ссылок по теме:

Developers.org.ua