0

Je fais partie d'une équipe développant un jeu en ligne basé sur le django en temps réel. Nous concevons le composant d'évolutivité et nous nous heurtons à des problèmes logiques pour le gameplay.Application Web hôte multiple (Redirection/Routage) dans le middleware/vue Django

Chaque nœud héberge un «jeu» unique composé de plusieurs utilisateurs. Nous déploierons derrière un simple équilibreur de charge (ELB), pour répartir les demandes entre nos [N] hôtes. En raison de la dépendance du nœud vis-à-vis du jeu, je voudrais inclure un morceau de middleware, qui est capable de rechercher et transférer une session client si un jeu demandé existe déjà.

Figure 1: recherche/redirect fonctionnalité désirée Figure1, lookup or redir

0-3 peut être mis en œuvre facilement, mais nous n'avons pas été en mesure de trouver une mise en œuvre de l'article 4.

En supposant que nous courons ce code sur node1, et nous constatons que game6 est situé sur node3, nous voulons transmettre la demande du client à node3 tel que:

  • node3 répond directement au client et établit les demandes futures séance
  • ne ont pas besoin de passer par équilibreur de charge

Je suis plein d'espoir qu'il ya une solution qui nous permettrait de le faire, soit en modifiant les en-têtes HTTP (Forwarded-pour, etc.) et réexpédiés, mais peut-être il y a une autre méthode que nous avons pas pensé

d'autres pensées sont:

  1. Utilisez le nom DNS de chaque noeud (host.example.com) pour rediriger la requête du client, le cas échéant. (Nécessite la configuration et le nombre connu d'hôtes à l'avance)
  2. Utilisez le initial node1 comme mandataire (faire une demande indépendante à node3 et renvoyer des données au client) (Cher, depuis quand nous escaladons la probabilité d'être à droite l'hôte diminue initialement)

Répondre

0

Je pense que ces manipulations font partie des équilibreurs de charge et que les boîtes derrière les équilibreurs de charge doivent les manipuler. équilibreurs de charge également en mesure de manipuler la même chose. Je ne suis pas sûr de savoir quel équilibreur de charge vous utilisez. mais haproxy agit comme un équilibreur de charge et est capable de manipuler la même chose à quelle boîte j'ai besoin d'envoyer la demande. et cela vous permet également d'économiser vers l'avant/redirections.

+0

Le problème est qu'un équilibreur de charge typique n'a pas l'état contextuel dont nous avons besoin. Les jeux ne sont pas toujours créés/enregistrés à l'avance, et le nombre d'hôtes que nous exploitons est flexible, de sorte qu'il n'y a pas d'algorithme de hachage bon pour déterminer l'appartenance. HAproxy est attrayant, mais finalement ELB est une meilleure option pour nous pour de nombreuses raisons – tolster710