mysql масштабирование
интернет, репликация, кластер, масштабирование, MySQL
Есть движок рекламной сети, который работает на одном сервере и с одной базой MySQL. За сутки в сети совершается несколько миллионов показов в связи с этим огромная нагрузка на БД и отказы сервера.
Как можно распределить нагрузку на несколько серверов?
Имеет ли смысл использовать mysql репликацию ?
Проблема в том что на каждую операцию чтения (выборка подходящих баннеров из базы (сложный JOIN запрос)) приходится операция записи (пишется лог показа этого баннера а так же вычитаются деньги с баланса рекламодателя, это делается сразу чтобы исключить ситуацию когда рекламодатель уйдет в минус)
Подскажите пожалуйста возможные варианты решения этой проблемы, и как вообще масштабируют проекты где много операций записи ?
Можно логи показа баннера и работу с балансом оформить внутренними процедурами на стороне mysql-сервера, а под относительно статичные операции чтения выделить репликой reader-сервер с доступом всех скриптов только на чтение. Писать продолжишь на основной мастер.
Дополнение #1
Имхо это уже необходимое зло. Лишний баннер можно оформить подарком, можно увести пользователя в минус, можно ввести неснижаемый остаток. Проблема отставания реплик, пожалуй, всегда самая мерзкая.