Кластеризация базы данных

Читал в сети, что ВКонтакте использует MySQL в роли основного хранилища. Да и многие другие проекты используют MySQL. Интересен вопрос в том, как это реализовано с технической стороны?
Не именно как у них, а то, как это вообще можно спроектировать, главные требования:
  1. Использование бесплатных баз данных
  2. Прозрачная работа с базой (т.е. скрипты не должны знать как и что там устроено и подключаться или к одному серверу всегда или к случайному в кластере)
  3. При выходе из строя одного сервера, чтобы работа продолжалась и данные не были бы утеряны
  4. Большая производительность (обрабатывалось очень большое кол-во запросов)
  5. Хорошая расширяемость (без отключения системы можно было бы добавить или убрать сервер)


При этом ограничения следующие:
  1. База относительно не большая (максимум 8 гигов, хотя не факт что может стать больше)
  2. Почти все таблицы связаны через внешние ключи
  3. Запросы относительно простые (наибольшее кол-во SELECT. Чуть меньше Insert и очень мало Update)
  4. Запросы примитивные и чаще всего затрагивают 1-2 таблицы


Вот собственно говоря вопрос: Какими средствами лучше это реализовать?

Сам склоняюсь к memcached + MySQL(InnoDB) + NDB, но вот с NDB что-то не ясно, многие плюются но не объясняя что и как, но часто мелькает информация что если база станет больше чем ОЗУ на каком-нибудь сервере, то всё загнется (к тому же так и не понял как там реализована система хранения, т.к. судя по документации всё хранится в памяти), а также нет поддержки внешних ключей, а без них будет довольно сложно жить. С репликацией тоже дело не особо понятное (там есть дублирование данные, но всё равно обращения идут только на master ).
Главная задача: надежное хранение +отказоустойчивость и приемлемая скорость при большой нагрузке (порядка 10к запросов в секунду). Кто что может посоветовать или дать ссылку на статью или документацию.
  • Вопрос задан
  • 7159 просмотров
Пригласить эксперта
Ответы на вопрос 1
pentarh
@pentarh
К кластеризации админ приходит с одной из двух проблем
1. Боттлнеки, которые невозможно/нецелесообразно компенсировать наращиванием мощности одного сервера
2. Построение высокодоступного сервиса (High-availability)

Соответственно, первое будет очень дорого и геморно. Я чес говоря сталкивался с реально большими нагрузками, но при правильной организации структуры БД, железо все держало. Проще реально оптимизировать структуру в этом случае, чем пробивать всякие там NDB и мастер-мастер репликации.

Второе сводится к построению master/slave кластера, который автоматом меняется ролями в случае сбоя. Не рекомендую репликацию. Можете глянуть в сторону DRBD || GFS || GPFS + Heartbeat || Pacemaker
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы