e_asphyx
@e_asphyx

Как делать линейно масштабируемые веб-приложения?

Расскажите, пожалуйста, в двух словах, как вообще проектируются линейно масштабируемые (способные работать на нескольких узлах одновременно) веб-приложения с долгоживущими разделяемыми объектами типа диспетчеров (шин) сообщений? То есть, когда синхронизация не только на базу завязана, но и ещё на что-то. Выносить это что-то в отдельный процесс? Ок, усложним: а если необходимо синхронизировать обращения к БД и отправку сообщений?
  • Вопрос задан
  • 2335 просмотров
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
что значит "синхронизировать отправку сообщений/обращения к БД"? Синхронизировать отправку сообщений нету смысла, они для каждой ноды свои. БД - реплекация либо она выносится на отдельный сервер. Сделать маршрутизацию сообщений в очередях на штуках типа rabbitmq не составляет особо проблем.

Намного интереснее организовывать процесс деплоя сей фигни.
Ответ написан
@s1dney
Лоад балансер, ноды-воркеры, общаются между собой посредством amqp, кластеры баз данных общие.
Схематично это все выглядит не сложно, про "синхронизировать обращения к БД и отправку сообщений" не понял. А зачем вам еще отправку синхронизировать?

UPD Про чатик: вы загуглите современную архитектуру веб-чата, там все довольно просто без лишних синхронизаций, просто под это дело нужно будет отдельный бекенд, или несколько бекендов параллельных.
Ответ написан
e_asphyx
@e_asphyx Автор вопроса
Схема такая: по приходу сообщения сначала пишем его в базу, затем рассылаем его остальным клиентам. По подключению нового клиента отправляем ему лог. И это в цикле.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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