2016-02-22 8 views
-1


Je suis actuellement à la recherche de la meilleure architecture pour une application de messagerie instantanée que j'essaie de créer.
Je recherche une solution PubSub évolutive ou une alternative

L'application se compose de canaux ayant chacun quelques milliers d'utilisateurs abonnés. Chaque utilisateur n'est abonné qu'à un canal à la fois et peut publier et lire à partir de ce canal. Les utilisateurs peuvent se déplacer rapidement entre les canaux. J'ai d'abord envisagé d'utiliser le PubSub XMPP (via Ejabbered ou MongooseIM) mais pour autant que je sache, il a été ajouté après coup et n'est pas très évolutif.
J'ai aussi pensé à utiliser un protocole de file d'attente de messages comme AMPQ mais je ne suis pas sûr que ce soit ce que je recherche de l'aspect de la messagerie instantanée.

Est-ce que mon problème concernant le XMPP PubSub est justifié? Et si oui, connaissez-vous une meilleure solution?

Répondre

0

J'ai imaginé ci-dessous des utilisations primaires pour l'application IM ci-dessus en fonction de vos entrées.

**

Les cas d'utilisation

**

  1. Beaucoup de nouveaux utilisateurs continuent à enregistrer avec le système et l'abonnement à un des canaux
  2. De nombreux utilisateurs existants changent leur abonnement d'un canal à
    autre canal
  3. De nombreux utilisateurs existants garder les messages de publication aux canaux
  4. De nombreux utilisateurs existants continuent de recevoir des messages comme abonnés

XMPP est naturel pour usecases 3e et 4e. "ejabbered" est l'une des plates-formes hautement évolutives éprouvées pour aller de l'avant.

Dans le cas 2ème usecase, Vous probablement avez la logique quelque chose comme ceci. - a) d'information de canal de mise à jour de l'utilisateur dans DB - b) lui faire écouter nouvelle chaîne - c) changer son sujet d'édition à un autre canal ... ainsi de suite

Chaque fois que vous devez effectuer plusieurs opérations , je vous recommande fortement d'utiliser « KAFKA » pour effectuer les opérations ci-dessus de manière async

en cas de 1er usecase, fournir l'enregistrement par le repos APIs.So que l'enregistrement peut être fait de tout device.While l'enregistrement d'un utilisateur, vous peut avoir plusieurs opérations comme suit. - 1) registre utilisateur DB - 2) créer en interne IM compte - 3) envoyer des courriels ou SMS pour la confirmation ... ainsi de suite

Ici aussi effectuer 1ère opération comme une partie de la logique de service API reste. Effectuez les 2ème et 3ème opérations de manière asynchrone en utilisant KAFKA.Cela signifie que votre logique de service effectue la première opération de manière synchrone et déclenche un événement à KAFKA. Chaque consommateur va gérer les 2ème et 3ème opérations de manière asynchrone.

Le système peut bien évoluer si toutes les couches/sous-systèmes peuvent bien évoluer. Dans cette perspective, la pile technologique Below peut vous aider à bien évoluer.

REST APIS + KAFKA + EJABBERED (XMPP)