@likejavascript

Как реализовать гарантированное выполнение операций на сервере при больших нагрузках?

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

Теперь возьмем наше приложение в котором также нужно выполнять гарантированное сохранение данных. Казалось бы ничего сложного: отправил запрос, дождался записи в базу и вот она "гарантированная запись". Когда количество пользователей не большое, то можно на этом и закончить, но как быть если их много и все они активно работают с приложением? Если каждый клиент будет ждать ответ, то это просто положит всю систему.

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

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

Подскажите как реализовываются системы в которых требуется гарантированно выполненная запись на больших нагрузках?
  • Вопрос задан
  • 2558 просмотров
Пригласить эксперта
Ответы на вопрос 2
@NewTypes
На себя
Я не профессионал в данной области, а потому не имею права ничего вам рекомендовать. Но как я помню, сервера высоконагруженных сервисов (Google, Yandex etc) редко грузятся выше 20 процентов и если порог превышается, нагрузка балансируется на другие, размазывая общую нагрузку на весь парк задействованных серверов. Мне кажется, вопрос не в сложности реализации очередей, а в том, куда писать изменения, учитывая, что они не всегда могут происходить на одно сервере. Потому присоединяюсь к данному вопросу и буду рад если меня поправят и разъяснят как происходит объединение изменений, если они размазаны (ли?) на разных машинах.
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
Да нет в гуглдоксах гарантированной записи, так же уходит иногда в офлайн.
Тут либо плюшки либо ехать, если серверам хватает ресурсов обслуживать клиентов то какие проблемы с записью вы видите?
Если не хватает ресурсов, то проблему программно вы все равно не решите.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы