2017-05-10 4 views
1

Voici quelques questions très basiques concernant l'akka. Je suis totalement vert sur akka, donc tout conseil est apprécié.Basic akka - localiser les acteurs et leur état

Dites que j'ai une application avec des milliers d'utilisateurs - pas des millions. Le modèle de domaine est une hiérarchie dans laquelle chaque utilisateur est situé dans une région dans un pays, c'est-à-dire qu'un pays a des régions de multiplication, une région a plusieurs utilisateurs. Je pense à créer la même hiérarchie exacte dans Akka. CountryActor -> * RegionActor -> * UserActor. Le CountryActor/RegionActor sera plus d'être les parents, ont aussi des devoirs fonctionnels tels que la collecte newsfeeds, le calcul des statistiques, la surveillance de ses enfants, etc.

Q1: Est-il judicieux d'imiter le modèle de domaine de cette façon? Q2: Dois-je stocker les attributs de chaque entité dans l'acteur? De cette façon, les données n'auraient besoin d'être stockées qu'une seule fois et le système Akkka serait également une base de données de mémoire.

(pseudo-code)

CountryActor { 
    Name, 
    CountryCode, 
    (children = list of RegionActors handled by akka) 
} 

RegionActor { 
    Name, 
    RegionCode, 
    (children = list of UserActors handled by akka) 
} 

UserActor { 
    UserId, 
    Firstname, 
    Lastname, 
    Alias, 
    ReceiveRegionalNews, 
    ReceiveCountryNews, 
    ... 
} 

Q3: Comment puis-je recherche efficacement un utilisateur par userId? Je m'attends à ce que le nom de l'utilisateur UserActor soit l'userId, mais étant donné que j'ai seulement un userId, j'ai encore besoin de trouver le pays et la région pour faire un getContent(). FindChild (userId)? Dois-je conserver une carte complète de tous les userIds et des références à leur acteur?

Q4: Comment localiser les acteurs par leur état? Imaginez que chaque utilisateur ait la possibilité d'activer un attribut RegionalNews, ce qui signifie qu'il souhaite recevoir des nouvelles de RegionalActor. Chaque fois que le RegionalActor veut distribuer des nouvelles à tous les auditeurs, comment les trouve-t-il? Est-ce qu'il garde une carte interne des utilisateurs avec l'attribut ou fait-il une diffusion à tous ses enfants et ensuite envoie à tous les répondeurs?

Merci à l'avance

Répondre

1

Je n'ai pas une énorme quantité d'expérience dans la modélisation de ce genre de choses à Akka (.Net) en particulier, mais je suis assez vieux pour savoir qu'aucun de ces paradigmes sont magiques et Ce n'est pas parce qu'un système d'acteur est hiérarchique que vous pouvez adapter toutes vos données à une telle structure sans ce que l'on appelle probablement une inadéquation d'impédance.

Si vous deviez penser plus le long des lignes de ...

  • Un UserManagerActor faire une gestion enfant par entité de vos UserActors;
  • À côté de, une hiérarchie Pays/Région, où au moins Region implémente un modèle pub-sub et conserve une liste de ses abonnés;
  • Lorsqu'il est créé, un utilisateur envoie un message d'abonnement à sa région appropriée (ou plus d'un message si cela fait flotter votre bateau);

... alors, est-ce que tout ce que vous devez faire semble beaucoup plus facile?

There's more on design patterns here - mais ne vous laissez pas trop attraper!