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

  • MySQL
  • кластеризація
Читав в мережі, що ВКонтакте використовує MySQL в ролі основного сховища. Та й багато інших проектів використовують MySQL. Цікаве питання в тому, як це реалізовано з технічного боку?
Чи не саме як у них, а то, як це взагалі можна спроектувати, головні вимоги:
  1. Використання безкоштовних баз даних
  2. Прозора робота з базою (тобто скрипти не повинні знати як і що там влаштовано і підключатися або до одного сервера завжди або до випадкового в кластері)
  3. При виході з ладу одного сервера, щоб робота тривала і дані не були б втрачені
  4. Велика продуктивність (оброблялося дуже велика кількість запитів)
  5. Гарна розширюваність (без відключення системи можна було б додати або прибрати сервер)


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

Ось власне кажучи питання: Якими засобами краще це реалізувати?

Сам схиляюся до memcached + MySQL (InnoDB) + NDB, але ось з NDB щось не ясно, багато плюються але не пояснюючи що і як, але часто з'являється інформація що якщо база стане більше ніж ОЗУ на якомусь сервері, то все загнеться (до того ж так і не зрозумів як там реалізована система зберігання, тому що судячи з документації все зберігається в пам'яті), а також немає підтримки зовнішніх ключів, а без них буде досить складно жити. З репликацией теж справа не особливо зрозуміле (там є дублювання дані, але все одно звернення йдуть тільки на master).
Головне завдання: надійне зберігання + відмовостійкість і прийнятна швидкість при великому навантаженні (близько 10к запитів в секунду). Хто що може порадити або дати посилання на статтю або документацію.

До кластеризації адмін приходить з однією з двох проблем
1. Боттлнекі, які неможливо / недоцільно компенсувати нарощуванням потужності одного сервера
2. Побудова високодоступних сервісу (High-availability)

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

Друге зводиться до побудови master / slave кластера, який автоматом змінюється ролями в разі збою. Не рекомендую реплікацію. Можете глянути в бік DRBD || GFS || GPFS + Heartbeat || Pacemaker

Ваш відповідь на питання

Увійдіть, щоб написати відповідь

  • MySQL
  • MySQL
  • Москва
  • Повний робочий день
  • від 150 000 до 600 000 руб.
  • Москва
  • Повний робочий день
  • До 160 000 руб.
  • Москва
  • Повний робочий день
  • До 160 000 руб.
  • Нахабіно, смт
  • Неповний робочий день
  • від 50 000 до 80 000 руб.

70000 руб. / За проект

500 руб. / За проект

Увійдіть на сайт

Щоб задати питання та отримати на нього кваліфіковану відповідь.

Схожі статті