Мини-обзор Spock Proxy.
В продолжение темы прокси для MySQL, я рассмотрел очередной продукт под названием Spock Proxy.
Официальный сайт проекта — http://spockproxy.sourceforge.net/
Привожу вольный перевод избранных мест документации, которые вызвали наибольший интерес.
Итак:
Что такое Spock Proxy?
Spock Proxy поддерживает горизонтальное масштабирование (http://en.wikipedia.org/wiki/Partition_(database)) больших баз данных MySQL. Прокси перехватывает SQL запросы от клиента, шлёт запросы на подходящий сегмент базы данных, основываясь на информации о распределении базы данных. Затем, агрегирует результаты от каждого сегмента базы, и возвращает клиенту ответ как результат регулярного выражения MySQL.
Замысел идеи.
Основная задача Spock Proxy — горизонтальное распределение существующих монолитных данных на несколько частей, для повышения производительности и масштабируемости.
В то же время, многие веб-сайты строят распределённую логику внутри приложений, Spock построен на Rails (http://www.rubyonrails.com веб-ориентированной среде разработки, прим. пер.) и паттерне ActiveRecord (средство работы с базой данных, прим. пер.) Мы любим Rails, но это не делает масштабирование легче. Итак, мы предпочли бы сегментирование баз средствами MySQL. Приложение шлёт SQL-данные на прокси. Прокси пересылает данные одному, или нескольким сегментам базы данных, основываясь на соответствии значения столбцов предопределённым данным. Наконец, прокси возвращает полученный результат.
Продукт нацелен на приложения, которые заинтересованы в сегментировании базы данных, но хотят избежать больших изменений в существующем коде приложения.
Чем это отличается от…?
от MySQL Proxy.
Spock Proxy это вилка проекта MySQL Proxy (http://forge.mysql.com/wiki/MySQL_Proxy). Большие части кода не изменены, но архитектура фундаментально отличается.
Нет Lua-скриптов.
MySQL Proxy поддерживает использование скриптового языка Lua (http://www.lua.org/) в качестве инструмента настройки, в отличие от Spock Proxy. Хотя Lua мощный, хороший скриптовый язык, мы были обеспокоены по поводу производительности, особенно в объединении конечных результатов.
…
Время, требуемое для копирования результатов, объединённых при помощи Lua, от нескольких баз данных внутри Lua-структур, и затем копирование данных обратно в Си окружение, требует очень много ресурсов. Lua-язык совершенно заброшен, и нам сложно написать С/С++ реализацию. Проект, однако, поддерживает идею вызовов как у MySQL Proxy, но все структуры основаны на общей библиотеке на Си.
Аутентификация клиента
MySQL Proxy разрешает каждому клиенту непосредственно аутентифицироваться на каждой базе данных. Это проблема, потому что клиент устанавливает минимум подключений до начала работы прокси. В ходе нормальной эксплуатации, если какое-либо из этих «кэшированных» соединений теряется или отключается, клиент не может получить доступ к этой базе данных, если соединение не восстановится.
Spock Proxy предназначен для отдельного соединения от сервера клиенту. Spock Proxy автоматически аутентифицирует клиентов, используя имя пользователя/пароль, указанные при запуске.
MySQL Cluster
MySQL Cluster предназначен для повышения отказоустойчивости и производительности, но не масштабирования. Все индексы основных данных хранятся в основной памяти, что вызывает проблемы, если комбинированные данные больше чем объём памяти. Это так же требует изменения устройства хранения.
Известные ограничения.
Не все запросы, поддерживаемые MySQL, полностью поддерживаются Spock Proxy. Когда прокси не может разобрать запрос, клиент получит ошибку, или запрос перенаправится к следующему сегменту базы данных.
Известные следующие проблемы:
• Мы исключили управление такими SQL запросами, как CREATE.
• Поддержка хранения процедур и транзакций ограничена.
• Не возможно выполнить JOINs, которые выполняются по базам данных.
• Вложенные запросы не поддерживаются.
• Для запросов SELECT не более 2-х таблиц, JOINs поддерживаются. GROUP BY пока не поддерживается.
• Для запросов INSERT список столбцов всегда ожидаем.
• Для запросов, использующих функции MySQL, до сих пор поддерживаются только MAX, MIN, SUM, AVERAGE, если запрос использует данные из нескольких партиций базы.
• Spock Proxy не понимает различие серверов для чтения/записи (master) и только чтения (slave).
• Spock Proxy не устанавливает должным образом insert_id и таблицы разбиваются внешним ключом с auto-increment primary key, возможен конфликт значений id.
• Загрузка данных из файла не тестировалась.
___________________________________________________
Собственно, для моих насущных задач, наличие описанных ограничений является весьма критичным. Особенно остужает невозможность разделения запросов на master/slave сервера.
Да и сама версия текущего релиза — 0.8.7, имхо, не способствует пред-продакшен тестированию.
Popularity: 1%
Этот материал находится на сайте http://compiling.ru
Оставьте свой отзыв