Les acteurs à distance AKKA pourraient-ils être utilisés dans un contexte d’essaim de p2p?

La plupart des cas d’utilisation que j’ai vus pour les acteurs Akka sont des serveurs multicœurs très performants ou des clusters locaux.

Je suis curieux de savoir s’il est applicable à des structures d’essaims telles que les réseaux P2P plus distants et à latence élevée .

L’application à laquelle je pense a des règles sur la fiabilité et / ou la suffisance des ressources des nœuds d’essaims, ce qui leur donne un statut, comme le ferait bittorrent. Il devrait également être en mesure de propager les transactions au sein de l’essaim aussi bien que possible, mais une cohérence éventuelle ou partielle serait acceptable . L’évolutivité serait une priorité plus grande que la cohérence.

AKKA est-il une solution potentielle pour construire quelque chose comme ça? Aurait-il des avantages ou des inconvénients spécifiques par rapport aux autres approches?

Le principal problème de l’utilisation d’Akka dans ce contexte est que le système Actor ne dispose pas d’un système de gestion des membres suffisamment souple pour un tel calcul dissortingbué décentralisé.

Vous avez besoin de quelque chose qui puisse gérer la perte de nœuds que vous décrivez dans votre scénario. En particulier, vous avez besoin de quelque chose qui puisse surveiller le moment où les noeuds se joignent, partent et sont présumés morts et déconnectés en raison de défauts. Je recommanderais de consulter Ibis: http://www.cs.vu.nl/ibis/ avec un registre à base de commérages. Vous avez toujours besoin d’un nœud d’amorçage bien connu pour mettre le système en service, mais sinon, le modèle utilisé par Join, utilisé par Ibis, fournira l’évolutivité que vous recherchez lorsqu’il est combiné au registre Gossip. Ce système est similaire aux acteurs Akka en ce sens qu’il repose sur un système d’appels ascendants ou descendants et de canaux unidirectionnels sur lesquels vous transmettez des messages. Très facile à programmer des choses dissortingbuées une fois que vous obtenez le Fu de cela.

En termes de cohérence éventuelle, il s’agit d’un problème difficile connu dans de tels environnements dissortingbués de grande taille. J’aurais besoin d’en savoir plus sur les types de transactions que vous souhaitez dissortingbuer et sur le niveau de cohérence et de préservation de l’historique requirejs pour pouvoir formuler davantage de recommandations. Certains articles récents ont prouvé que le mieux que l’on puisse trouver, bien que dans un environnement aussi hostile, soit l’uniformité causale, où au moins tout le monde peut voir que l’histoire s’est écrasée, sinon déterminer la fourchette “gagnante”, sans autre fourchette. mécanisme de résolution.

Bitcoin est un exemple intéressant dans cet espace, où “gagner” est déterminé par la plus longue chaîne, mais il existe d’autres solutions dans cet espace qui peuvent ou ne peuvent pas fonctionner en fonction de la sémantique de l’application. Votre question est un peu trop vague pour donner des recommandations spécifiques dans un espace de conception aussi vaste.