Горизонтальная масштабируемость для распределенных приложений, как этого добиться?

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

Но что, если мое серверное приложение позволяет пользователям взаимодействовать в реальном времени?

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

Я хотел бы знать, какие "дизайнерские решения" люди использовали в таких случаях.

Например, люди в Facebook уже сталкивались с такой ситуацией при включении функции чата в своем социальном приложении.

Заранее спасибо за любые советы.

2 ответа

Решение

Одним из решений этой проблемы является использование распределенных кешей, таких как memcache (Facebook также использует этот подход). Затем вся информация, необходимая для всех узлов, сохраняется в этом кэше (и в базе данных, если она должна быть постоянной), чтобы все узлы могли получить доступ к этой информации (с очень небольшой задержкой между узлами).

С уважением

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

Другие вопросы по тегам