@likejavascript

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы