Веб-приложение с несколькими хостами (перенаправление/маршрутизация) в промежуточном программном обеспечении/представлении Django

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

На каждом узле размещается уникальная «игра», в которой участвуют несколько пользователей. Мы будем развертывать за простым балансировщиком нагрузки (ELB), чтобы разделить запросы между нашими [N] хостами.

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

Рисунок 1: поиск/перенаправление нужных функций Рисунок 1, поиск или перенаправление

0-3 можно легко реализовать, но нам не удалось найти реализацию пункта 4.

Предполагая, что мы запускаем этот код на node1 и обнаруживаем, что game6 находится на node3, мы хотим перенаправить запрос клиента на узел3 такой, что:

  • node3 напрямую отвечает клиенту и устанавливает сеанс
  • будущие запросы не должны проходить через балансировщик нагрузки

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

Другие мысли:

  1. Используйте DNS-имя для каждого узла (host.example.com), чтобы соответствующим образом перенаправить запрос клиента. (требуется установка и заранее известное количество хостов)
  2. Использовать исходный node1 в качестве прокси (сделать независимый запрос к node3 и вернуть данные клиенту) (Дорого, так как при масштабировании вероятность оказаться на нужном хосте изначально снижается )

person tolster710    schedule 26.02.2015    source источник


Ответы (1)


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

person anurag gupta    schedule 27.02.2015
comment
Проблема в том, что типичный балансировщик нагрузки не имеет контекстно-зависимого состояния, которое нам нужно. Игры не всегда создаются/регистрируются заранее, а количество хостов, которые мы используем, является гибким, так что не существует одного хорошего алгоритма хеширования для определения членства. HAproxy привлекателен, но, в конечном счете, ELB — лучший вариант для нас по многим причинам. - person tolster710; 27.02.2015