Nous construisons un service de notification dont le travail consiste à envoyer une notification push à la fin de l'utilisateur. Il y a deux types de notifications
Notification de groupe où nous envoyons la même notification de texte à tous les utilisateurs d'un groupe. Cela est facilement réalisable car tout le monde s'abonne à un groupe et nous envoyons une notification à un groupe.
Notification personnalisée dans laquelle nous envoyons une notification spécifique de texte à chaque utilisateur.
Ma question est (pour la notification personnalisée) Comment le mieux devrions-nous archiver notre service de notification.
Approche 1: Conservons-nous la logique de sélectionner les utilisateurs basé sur la logique de l'application sur le service d'application où nous créons un message pour chaque utilisateur, puis envoyez des lots d'utilisateurs avec un message au service de notification pour les envoyer?
Sélectionnez Utilisateurs basés sur l'application Logic (sur App Server) -> Boucle sur chaque utilisateur et effectuez un message personnalisé (sur App Serveur) -> Faites des lots de 1k utilisateurs avec message et envoyez au service de notification (sur APP Server) -> Envoyer une notification (Service de notification)
APPROCHE 2: Nous laissons le service de notification accéder directement à la base de données d'app et récupérer les utilisateurs, créer leur message et les envoyer?
Sélectionnez Utilisateurs -> Boucle pour faire un message -> Envoyer à chaque utilisateur (tout sur le service de notification)
Que proposez-vous les gars? Y a-t-il une autre approche que nous pouvons envisager. Considérant que nous devions peut-être envoyer une notification personnalisée à des millions d'utilisateurs.
Je pense que la réponse à votre question est de savoir comment identifier les limites de service. Une approche fondamentale est que tout service devrait posséder toutes les données nécessaires à la réalisation de son travail. Les services sont donc définis non par des couches horizontales, car c'était le cas dans certains SOA directives, mais plutôt par tranches verticales . Béton-fonctionnalité de fonctionnement ou processus métier, avec ses propres contrôleurs, logique de domaine et interface utilisateur. Il devrait être autonome, il ne faut donc pas avoir besoin de données ni de comportement d'autres services.
Ainsi, compte tenu de votre exemple, il est probable que votre service de notification devrait faire partie d'un plus grand service logique. Par exemple, si votre domaine est sur un réseau de vente au détail et un jour, il y a une nouvelle réduction, et vous souhaitez informer tous vos clients. Vous devez avoir le numéro de téléphone de votre client, des informations sur la réduction (probablement adaptées au type particulier de client) et à un texte de notification. Qui gère les règles commerciales de réduction? Quel service possède les données des clients? Je parie que c'est un service de vente. Donc, le service de notification est définitivement une partie de celui-ci. Ce service de vente devrait donc disposer de sa propre base de données avec toutes les données nécessaires pour envoyer une notification.
Si vous réfléchissez à des problèmes de performance, il est correct d'extraire cette fonctionnalité de notification dans sa propre machine physique et, en cas de besoin, ajoutez simplement quelques machines supplémentaires. Et il n'est pas nécessaire de créer une base de données séparée pour cette pièce de fonctionnalité nouvellement extraite, car les frontières de service sont logiques et non physiques.
Voici une série de messages Adressant ces problèmes dans des détails plus importants.