J'utilise DDD pour une application orientée service destinée à transmettre un volume élevé de messages entre un volume élevé de clients Web (c'est-à-dire des navigateurs). Parce que dans le contexte des fonctionnalités requises, le besoin de transmission l'emporte sur le besoin de stockage, j'aime l'idée de s'appuyer principalement sur la RAM et de minimiser l'utilisation de la base de données.Grande évolutivité dans la conception basée sur domaine
Cependant, je ne suis pas clair sur la façon d'architecturer cela du point de vue de l'évolutivité. Une batterie de serveurs Web crée une haute disponibilité des points de terminaison de service et un traitement de logique de domaine. Mais peu importe le nombre de serveurs que j'ai, il semble qu'ils doivent tous partager un référentiel commun afin que leurs données soient cohérentes.
Comment construire ce référentiel pour qu'il soit aussi évolutif que possible? Comment peut-il éclabousser un ensemble de machines physiques d'une manière telle que toutes les machines soient cohérentes et que chacun s'en moque si un autre tombe en panne? Etant donné que la base de données sera parfois utilisée pour toucher la base de données (par exemple, lorsqu'un client disparaît et que les messages qui lui sont destinés doivent être stockés jusqu'à son retour), comment organiser mon code et ma couche d'accès aux données? Sont-ils tous deux considérés comme "le référentiel"?
Merci pour les conseils. Si je préférais la RAM à la base de données, avez-vous des recommandations dans ce sens? On dirait que j'ai besoin de créer un référentiel sans état, partagé, qui imite un cluster de base de données. Une opération d'écriture, qui sera courante, valide les modifications de manière synchrone ou asynchrone sur toutes les machines du référentiel. Puis, de temps en temps, un processus vérifie si les données ont dépassé leur accueil dans la mémoire vive et, si tel est le cas, les renvoie de toutes les machines du référentiel vers une base de données. –
Je pense que la RAM sur la base de données est un bon choix pour les magasins en lecture seule. Si vous allez écrire, la RAM n'est bonne que si vous pouvez vous permettre de perdre des données. Sinon, j'irais avec un magasin transactionnel (ACID). Je me demande pourquoi vous parlez de «machines de dépôt» (multiples). Voulez-vous dire un cluster, ou voulez-vous dire différents machines/services indépendants? –
Je veux dire un groupe de machines préférant RAM qui atténue le risque de défaillance matérielle qui, comme vous l'avez souligné, entraîne une perte de données. Dans le système que j'ai prévu, les données iraient d'un client vers le serveur, puis seraient rapidement arrachées du serveur par l'attraction d'un autre client. Ainsi, mes données sont transitoires et ne devraient pas rester sur le serveur plus de secondes à la fois. Ce n'est que dans des cas exceptionnels que les données subsisteront, à quel moment elles seront détectées et migrées de la RAM vers la base de données. –