Supposons que vous ayez demandé de concevoir un serveur de discussion évolutif avec les exigences suivantes:
J'ai lu cet article: Comment la Société des légendes a échoué à la discussion à 70 millions de joueurs et je pense avoir manqué l'architecture principale qu'ils utilisaient dans le jeu. Mais de toute façon voici mon "processus de pensée". Quelqu'un peut-il regarder un coup d'oeil?
Donc, le flux serait quelque chose comme ça:
Si B était hors ligne, tout jusqu'à l'étape 5 resterait la même chose. La différence est que le serveur 1 peut détruire sa copie du message mais le serveur 2 ne peut pas.
Donc, l'architecture globale ressemblerait à ceci:
Je me rends compte que je manque beaucoup beaucoup de choses ici, ai-je manqué quelque chose d'évident? Y a-t-il une partie de mon processus de pensée tout simplement faux?
Vous CAN Utilisez un réseau P2P, mais il est architecturalement intéressant.
En utilisant quelque chose comme Kademlia en tant que DHT pour la découverte de pairs signifie parler à un nombre limité de nœuds avant d'atteindre votre cible. Si vous avez enregistré votre message à chacun de ces sauts, vous auriez une redondance pour votre magasin de messages qui peut être suffisamment fiable pour vos besoins. La livraison hors ligne signifierait des tentatives de transfert périodique pour chaque message tamponné. Cela garantirait une latence assez faible en termes de découverte de pairs, qui est probablement la partie la plus coûteuse du problème.
Une fois qu'une connexion P2P directe est établie, vous êtes clairement en mode en ligne et vous pouvez ignorer le stockage hors ligne (ou non).
Vous pouvez également exécuter des nœuds qui stockent de manière persistante les messages, mais agissent comme des participants DHT réguliers. Cela donnerait plus de fiabilité, au prix d'exécution d'une poignée de nœuds.
Comme @Aridlehoover écrit, cependant, il y a tellement de réponses possibles que vous ne pouvez pas vraiment fournir une dernière.
Je concevrais cela dans le nuage et utiliserais quelque chose comme MongoDb ou Azure Cosmos DB. La hausse est que la base de données gère la mise à l'échelle du côté des données, de sorte que vous n'avez pas à vous en soucier.
Tout ce qui serait laissé, c'est écrire une API Web au-dessus du magasin de données que vous avez choisi et, comme cela pourrait également être basé sur le cloud, votre fournisseur de cloud pourrait traiter automatiquement la mise à l'échelle des demandes.
Si le nuage n'est pas une option pour une raison quelconque (ne peut penser à aucun moment), vous réalisez que les deux plates-formes de base de données sont également hébergées sur place. Cela vous laisserait la mise à l'échelle de l'API Web, qui peut être faite facilement avec des conteneurs et quelque chose comme Kubernettes, que BTW serait également ma recommandation d'héberger la plate-forme de base de données elle-même.