TGViewer
Владимир Балун Владимир Балун @vladimir_balun_programming · 8.61K subscribers
Post #864 3.23K
💭 Постоянно сталкиваюсь с тем, что некоторые разработчики не совсем верно понимают, какие задачи решает репликация

Очень часто можно услышать примерно такую логику:

«У нас база данных не справляется с записью, давайте сделаем несколько мастеров. Теперь запись можно будет распределить между ними, значит пропускная способность системы вырастет».


На первый взгляд звучит логично. Если серверов стало больше, почему бы просто не отправлять записи в разные узлы? Но проблема в том, что репликация устроена не так.

Представим, что у нас есть два мастера. Пользователь записал данные в первый мастер. Чтобы данные оставались одинаковыми на обоих серверах, эту запись нужно синхронизировать со вторым мастером. Если другой пользователь записал данные во второй мастер, эти изменения нужно передать обратно в первый. В итоге каждый мастер вынужден обрабатывать не только свои записи, но и записи, пришедшие в остальные мастера.

Из-за этого репликация практически не позволяет масштабировать пропускную способность записи. Да, запросы могут приходить в разные серверы, но сами данные все равно приходится распространять между ними. Если каждый узел должен применить все изменения системы, то объем работы никуда не исчезает.

Что тогда дает master-master репликация? В первую очередь отказоустойчивость. Если один узел станет недоступен, система сможет продолжить работу через другой. Кроме того, она может снизить задержки. Например, пользователи из разных регионов могут писать в ближайший датацентр, а синхронизация между регионами будет происходить асинхронно.

Но если цель заключается именно в том, чтобы увеличить количество записей, которые способна обработать система, то обычно смотрят в сторону шардирования. При шардировании разные данные физически размещаются на разных серверах, поэтому каждая запись обрабатывается только своим шардом, а не всеми узлами сразу.

Поэтому когда слышу фразу «давайте добавим еще несколько мастеров и масштабируем запись», обычно задаю простой вопрос: сколько серверов в итоге должны обработать одну запись пользователя? Если ответ «все», то масштабирования записи здесь, скорее всего, не произошло.

Кто я | Навигация | Спасибо
  • 👍 15
  • ❤ 4
  • 🔥 4
  • ✍ 3
  • ⚡ 1
  • ❤‍🔥 1
  • 🏆 1
More from @vladimir_balun_programming
  1. Sep 17, 2026Avito.Tech.Conf уже совсем скоро 26 сентября соберутся руководители, тимлиды и все, кто от…
  2. Sep 16, 2026💭 Недавно выложил видео со своего выступления на конференции про базу продуктивности и эф…
  3. Sep 15, 2026🚀 26 сентября проведем бесплатную онлайн-конференцию для backend-разработчиков #РАЗНЕСИ_С…
  4. Sep 14, 2026💭 На выходных ходил в поход в горы Архыза Несколько часов подъема с рюкзаком, палатка, сп…
  5. Sep 10, 2026💭 В разработке редко бывают решения, где есть очевидно правильный ответ Переписывать стар…
  6. Sep 9, 2026💭 Не так давно выступал на нескольких конференциях с докладом о том, как айтишникам больш…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →