Comprendre quand utiliser la dynamique des services et quand s'appuient sur des la persistance dans Azure Service de Tissu
Je passe mes soirées à l'évaluation Azure Service de Tissu comme un remplacement pour notre WebApps/CloudServices de la pile, et se sentir un peu incertain sur la façon de déterminer si les services/acteurs de l'état doit être dynamique des acteurs, et quand ils doivent être apatride acteurs avec l'extérieur état persistant (Azure SQL, Azure Storage et DocumentDB). Je sais que c'est un assez nouveau produit (pour le public en général au moins), donc il n'y a probablement pas beaucoup de meilleures pratiques en ce qui concerne cela, mais j'ai lu par la plupart des la documentation mis à disposition par Microsoft, sans trouver une réponse définitive à cette fin.
Le problème actuel de domaine, je suis approche est notre événement du magasin; parties de nos applications sont basées sur l'event sourcing et CQRS, et je suis l'évaluation de la façon de déplacer cet événement stocker sur le Service de Tissu de plate-forme. L'événement store va contenir beaucoup de temps à la série de données, et que c'est notre seule source de vérité pour les données persistantes là, il se doit d'être cohérente, la réplication et le stockage d'une certaine forme de stockage durable.
L'un des moyens que j'ai envisagé de faire une c'est avec état "EventStream" l'acteur, chaque instance d'un agrégat à l'aide d'event sourcing stocke ses événements dans un cours d'eau isolé. Cela signifie que la dynamique de l'acteur pourrait garder une trace de tous les événements de son propre flux, et j'aurais répondu à mes exigences quant à la façon dont les données sont stockées (transactionnel, répétée et durable). Toutefois, certains cours d'eau peut devenir très volumineux (plusieurs centaines de milliers, sinon des millions, des événements), et c'est là que je commence à avoir des doutes. Avoir un acteur avec une grande quantité d'etat sera, j'imagine, avoir un impact sur les performances du système lors de ces grands modèles de données doit être sérialisé ou désérialisé à partir du disque.
Une autre option est de garder ces acteurs apatrides, et viens de lire leurs données à partir de certains de stockage externe comme Azure SQL - ou tout simplement aller avec apatrides services à la place des acteurs.
Fondamentalement, quel est le montant de l'etat pour un acteur/service "trop" et vous devriez commencer à envisager d'autres façons de traiter l'état?
Aussi, cette section dans le Service de Tissu Acteurs motif de conception: Certains anti-modèles documentation me laisse un peu perplexe:
Traiter Azure Service de Tissu d'Acteurs d'un système transactionnel. Azure Service de Tissu d'Acteurs n'est pas un deux phases de validation basée sur le système offre à l'ACIDE. Si nous ne faisons pas de mettre en œuvre l'option de la persistance et de la machine, l'acteur est en cours d'exécution sur les matrices, de son état actuel va aller avec elle. L'acteur sera à venir sur un autre nœud très rapide, mais à moins que nous avons mis en place le support de la persistance, l'état aura disparu. Cependant, entre en tirant parti de nouvelles tentatives, double filtrage et/ou de la quantité de la conception, vous pouvez atteindre un niveau élevé de fiabilité et de cohérence.
Ce n' "si nous ne faisons pas de mettre en œuvre l'option de persistance" indiquer ici? J'étais sous l'impression que tant que votre opération de modification de l'état a réussi, vos données ont été conservées dans le stockage durable et répliqué à au moins un sous-ensemble de la répliques. Ce paragraphe laisse moi me demandais si il y a des situations où l'état au sein de mes acteurs/services seront perdus, et si c'est quelque chose que je dois gérer moi-même. L'impression que j'ai eu de la dynamique de modèle dans d'autres parties de la documentation semble contrecarrer cette déclaration.
- avez-vous une mise à jour, je me retrouve dans une position très similaire vous demandez-vous ce que vous êtes en train de faire. des acclamations.
- Nordheim Avez-vous décider sur une solution à l'aide de SF? J'ai une exigence similaire et serait intéressé à entendre ce que vous avez décidé sur.
- Nous sommes confrontés au même chemin et nous avons eu les mêmes doutes, nous avons testé beaucoup .NET Event Sourcing Outils (mementoFX, ncqrs, etc...) mais nous ne sommes pas super heureux avec eux (peut-être que c'est de notre faute), mais nous sommes toujours à la recherche d'une alternative.
Vous devez vous connecter pour publier un commentaire.
Une option que vous avez est de garder "une partie" de l'état de l'acteur (disons que ce qui pourrait être considéré comme à chaud des données qui doivent être rapidement disponibles) et de stocker tout le reste sur un "traditionnel" de l'infrastructure de stockage tels que SQL Azure, DocDB, ....
Il est difficile d'avoir une règle générale sur trop de locales de l'état, mais, peut-être, il est utile de songer à chaud contre le froid de données.
Fiable Acteurs offrent également la possibilité de personnaliser la StateProvider de sorte que vous pouvez également envisager de mettre en œuvre une mesure StateProvider (par la mise en œuvre de la IActorStateProvider) avec les politiques spécifiques que vous avez besoin pour être plus efficace avec les exigences que vous avez en termes de quantité de données, latence, de fiabilité et ainsi de suite (remarque: la documentation est encore très minime sur la StateProvider interface, mais nous ne pouvons publier un exemple de code si c'est quelque chose que vous voulez poursuivre).
Sur les anti-modèles: la note est plus sur la mise en œuvre des transactions à travers de multiples acteurs. Fiable Acteurs de l'offre complète de garantie sur la fiabilité des données dans les limites d'un acteur. En raison de la répartie et faiblement couplés de la nature de l'Acteur modèle, la mise en œuvre des opérations qui impliquent plusieurs acteurs n'est pas une tâche triviale. Si "distribués" les transactions d'une forte demande, les Services Fiables modèle de programmation est probablement un meilleur ajustement.
Je sais que cela a été répondu, mais récemment trouvé moi-même dans la même situation avec un CQRS/système ES et voici comment je suis allé à ce sujet:
Pour répondre à @Trond du sedcondary question qui est, "Ce fait, si l'on ne pas mettre en œuvre l'option de persistance' indiquer ici?"
Un acteur est toujours avec un état de service, et son état peut être configuré à l'aide d'un attribut de la classe acteur, pour fonctionner dans l'un des trois modes:
aussi écrit sur le disque. Cet état est maintenu, même si tous les
les répliques sont fermées.
réplique cas, dans la mémoire. Cela signifie que tant que l'on réplique
l'instance est vivant l'état est maintenu. Mais quand toutes les répliques sont
arrêtez l'état est perdu et ne peut pas être récupéré après ils sont
redémarré.
réplique instances, ni sur le disque. Ce qui fournit le moins d'état
la protection de l'.
Une discussion complète sur le sujet peuvent être trouvées dans la documentation de Microsoft