Как поддерживать синхронизацию нескольких серверов БД для чтения / записи? - PullRequest
0 голосов
/ 26 августа 2009

Мне любопытно узнать, как большие сайты распределяют нагрузку между различными серверами БД в случае, когда пользователи пишут столько, сколько они читают, т.е. когда стандартное решение о наличии одного главного устройства для приема записи и нескольких подчиненных, которые позволяют пользователям только читать данные, не работает, потому что оно просто превращает главный сервер в узкое место.

Для тех из вас, кто управляет большим сайтом с помощью балансировщика нагрузки -> нескольких веб-серверов -> нескольких серверов БД, как равномерно распределить нагрузку между серверами БД, чтобы пользователям (в лучшем случае) не приходилось это делать подождать, пока мастер обновит ведомые, или (в худшем случае) пользователи закончат чтение грязных данных с ведомых, которые еще не были обновлены?

Спасибо.

1 Ответ

0 голосов
/ 01 декабря 2009

Мы не совсем в том месте, где наш главный сервер баз данных является узким местом, но он быстро приближается. У нас 70% чтения / 30% записи.

Есть несколько решений, ни одно из которых не доставляет большого удовольствия. Мы застряли с MySQL, поэтому наши основные опции:

  • киньте аппаратное обеспечение в проблему. Это стратегия, которой мы придерживались в течение многих лет, и она хорошо нам помогла. К сожалению, наша кривая роста означает, что нам это не сойдет с рук гораздо дольше.
  • Несколько основных настроек MySQL. Взгляните на «Топологии репликации» в главе 8 High Performance MySQL , чтобы понять, о чем я говорю. Как объясняется в этом разделе, репликация не является отличным вариантом для масштабирования записей.
  • MySQL кластер. Мне все еще нужно изучить это правильно и проверить, можем ли мы улучшить нашу производительность записи.
  • Патч нашего программного обеспечения, чтобы использовать меньше операций записи на операцию. Это было частично сделано, но я не знаю, сколько еще мы можем выжать из этого.
  • Патч нашего программного обеспечения для разделения записей между несколькими независимыми мастерами. Это очень больно, и я хотел бы избежать этого, если это возможно.
  • Исправьте наше программное обеспечение, чтобы оно было менее зависимым от MySQL, и найдите другую базу данных SQL, которая дает нам лучшие возможности масштабирования при записи.

Это варианты, которые у меня есть на данный момент, но если вы работаете с другой базой данных или начинаете и можете выбирать, ваши варианты могут быть радикально другими.

...