Question

J'ai entendu beaucoup de délirer sur cadre Akka (Java / plate-forme de service Scala), mais jusqu'à présent, n'a pas vu de nombreux exemples concrets de cas d'utilisation, il serait bon pour. Donc, je serais intéressé à entendre parler les développeurs de choses ont utilisé avec succès.

Une seule limite: s'il vous plaît ne comprennent pas le cas de l'écriture d'un serveur de chat. (Pourquoi? Car il a été galvaudé comme un exemple pour beaucoup de choses similaires)

Était-ce utile?

La solution

Je l'ai utilisé jusqu'à présent dans deux projets concrets avec beaucoup de succès. les deux sont dans le domaine de l'information trafic en temps quasi-réel (trafic dans les voitures sur les routes), réparties sur plusieurs noeuds, l'intégration des messages entre plusieurs parties, les systèmes de back-end fiables. Je ne suis pas libre de donner des détails sur les clients encore, quand je reçois le bouton OK peut-être il peut être ajouté comme référence.

a vraiment Akka tiré à travers sur ces projets, même si nous avons commencé quand il était sur la version 0.7. (Nous utilisons scala par la voie)

L'un des grands avantages est la facilité avec laquelle vous pouvez composer un système sur des acteurs et des messages avec presque pas boilerplating, il adapte très bien sans toute la complexité du filetage roulées à la main et vous obtenez un message asynchrone qui passe entre les objets presque gratuitement.

Il est très bon dans la modélisation de tout type de traitement des messages asynchrones. Je préférerais écrire tout système de services type de (web) dans ce style que tout autre style. (Avez-vous déjà essayé d'écrire un service Web asynchrone (côté serveur) avec JAX-WS? C'est beaucoup de plomberie). Je dirais donc tout système qui ne veut pas accrocher l'un de ses composants, car tout est implicitement en utilisant des méthodes synchrones, et que l'une des composantes est verrouillage sur quelque chose. Il est très stable et le let-it-crash solution superviseur + à l'échec fonctionne vraiment bien. Tout est facile à installer et programmation pas difficile de test unitaire.

Ensuite, il y a l'excellent add-on modules. Le module Camel se branche vraiment bien dans Akka et permet un tel développement facile des services asynchrones avec points d'extrémité configurables.

Je suis très heureux avec le cadre et il devient une norme de facto pour les systèmes connectés que nous construisons.

Autres conseils

Disclaimer: Je suis le bon de commande pour Akka

En plus d'offrir un assortiment de qui est beaucoup concurrency plus simple à raisonner sur et pour obtenir de corriger (acteurs, agents, accès concurrentiel flux de données) et le contrôle d'accès concurrentiel sous forme de STM.

Voici quelques cas d'utilisation, vous pourriez envisager:

  1. de traitement des transactions (en ligne jeu, finance, statistiques, les paris, les médias sociaux, télécommunications, ...)
    • plus grande échelle, l'échelle, à tolérance aux pannes / HA
  2. backend service (toute l'industrie, toute application)
    • REST de service, SOAP, etc cometd
    • agir en tant que plaque tournante de message / couche d'intégration
    • plus grande échelle, l'échelle, à tolérance aux pannes / HA
  3. Snap-in concurrence / parallélisme (toute application)
    • Correct
    • Simple à utiliser et comprendre
    • Il suffit d'ajouter les pots à votre projet de JVM (Scala utilisation, Java, Groovy ou JRuby)
  4. Traitement par lots (toute l'industrie)
    • l'intégration Chameau à brancher des sources de données par lots
    • Les acteurs diviser et conquérir la charge de travail par lots
  5. plaque tournante des communications (télécommunications, médias web, les médias mobiles)
    • plus grande échelle, l'échelle, à tolérance aux pannes / HA
  6. serveur de jeu (jeux en ligne, paris)
    • plus grande échelle, l'échelle, à tolérance aux pannes / HA
  7. BI / datamining / général crissement de but
    • plus grande échelle, l'échelle, à tolérance aux pannes / HA
  8. insérer d'autres cas d'utilisation agréable ici

Un exemple de la façon dont nous utilisons serait sur une file d'attente prioritaire des transactions par carte de débit / crédit. Nous avons des millions de ces derniers et l'effort du travail dépend du type de chaîne d'entrée. Si la transaction est de type CHÈQUE nous avons très peu de traitement, mais si elle est un point de vente alors il y a beaucoup à faire, comme la fusion avec les données meta (catégorie, étiquettes, étiquettes, etc.) et de fournir des services (alertes email / sms, la détection de la fraude, l'équilibre bas fonds, etc.). En fonction du type d'entrée, nous composons des classes de divers traits (appelés Mixins) nécessaires pour gérer le travail, puis exécuter les travaux. Tous ces travaux arrivent dans la même file d'attente en mode temps réel de différentes institutions financières. Une fois les données nettoyée, il est envoyé aux différents magasins de données pour la persistance, l'analyse, ou poussé à une connexion socket, ou de soulever l'acteur comète. acteurs de travail sont constamment auto équilibrage de la charge du travail afin que nous puissions traiter les données aussi vite que possible. Nous pouvons également accrocher des services supplémentaires, la persistance des modèles, et pour les points de décision critiques.

Le message de style Erlang OTP passe sur la machine virtuelle Java fait un grand système pour le développement de systèmes en temps réel sur les épaules des bibliothèques et des serveurs d'applications existantes.

Akka vous permet de faire le passage de messages comme vous le feriez dans un cadre traditionnel mais esb avec la vitesse! Il vous donne également des outils dans le cadre de gérer la grande quantité de pools d'acteur, les nœuds distants et la tolérance aux pannes que vous avez besoin pour votre solution.

Nous utilisons Akka pour traiter les appels REST de manière asynchrone - ainsi que nous pouvons atteindre 10 amélioration fois serveur web async (basé Netty-) sur le nombre d'utilisateurs servis par noeud / serveur, par rapport au fil traditionnel par modèle de demande de l'utilisateur

Dites à votre patron que votre facture d'hébergement AWS va passer par le facteur de 10 et il est un doux euphémisme! Chut ... Ne lui dire d'Amazon si ...:)

Nous utilisons Akka à grande échelle projet Telco (je ne peux malheureusement pas divulguer beaucoup de détails). AKKA acteurs sont déployés et accessibles à distance par une application Web. De cette façon, nous avons un modèle RPC simplifié basé sur Google protobuffer et nous obtenons parallélisme des contrats à terme Akka. Jusqu'à présent, ce modèle a fonctionné à merveille. Une note:. Nous utilisons l'API Java

Si vous abstraire le serveur de chat un niveau, vous obtenez la réponse.

fournit un système Akka de messagerie qui est semblable à la mentalité « laisser crash » de Erlang.

Ainsi, des exemples sont des choses qui ont besoin différents niveaux de durabilité et fiabilité de la messagerie:

  • serveur Chat
  • couche réseau pour un MMO
  • pompe de données financières
  • Système de notification pour un iPhone / / mobile quelle que soit l'application
  • REST serveur
  • Peut-être quelque chose de semblable à WebMachine (estimation)

Les belles choses sur Akka sont les choix qu'elle offre à la persistance, de la mise en œuvre de la STM, serveur REST et la tolérance aux pannes.

Ne pas se fâcher par l'exemple d'un serveur de chat, pensez comme un exemple d'une certaine classe de solution.

Avec toute leur excellente documentation, je me sens comme un écart est cette question précise, cas d'utilisation et des exemples. En gardant à l'esprit les exemples ne sont pas négligeables.

(écrit avec seulement l'expérience de regarder des vidéos et jouer avec la source, je n'ai rien mis en œuvre en utilisant Akka.)

Nous utilisons Akka dans plusieurs projets au travail, le plus intéressant qui est lié à la réparation de l'accident du véhicule. Principalement au Royaume-Uni, mais maintenant l'expansion aux États-Unis, en Asie, en Australasie et en Europe. Nous utilisons des acteurs pour faire en sorte que les informations de réparation de l'accident est fourni en temps réel pour permettre la réparation sûre et rentable des véhicules.

La question est vraiment plus Akka 'ce qui ne peut vous faire avec Akka. Sa capacité à intégrer des cadres puissants, son abstraction puissante et tous les aspects de la tolérance aux pannes font une boîte à outils très complet.

Vous pouvez utiliser plusieurs types Akka pour des choses différentes.

Je travaillais sur un site Web, où je migré la pile de technologie pour Scala et Akka. Nous l'avons utilisé pour à peu près tout ce qui se passait sur le site. Même si vous pensez qu'un exemple chat est mauvais, tous sont fondamentalement les mêmes:

  • Mises à jour en direct sur le site (par exemple, des vues, goûts, ...)
  • Afficher les commentaires des utilisateurs en direct
  • Services de notification
  • Rechercher et tous les autres types de services

En particulier, les mises à jour en direct sont faciles car ils font bouillir jusqu'à ce qu'un exemple chat ist. La partie des services est un autre sujet intéressant car vous pouvez simplement choisir d'utiliser des acteurs distants et même si votre application n'est pas en cluster, vous pouvez déployer sur différentes machines avec facilité.

J'utilise aussi pour une application Akka PCB autorouteur avec l'idée de pouvoir à l'échelle d'un ordinateur portable à un centre de données. Plus la puissance que vous lui donnez, plus le résultat sera. Cela est extrêmement difficile à mettre en œuvre si vous essayez d'utiliser d'habitude parce que la concurrence vous donne également Akka la transparence de l'emplacement.

À l'heure actuelle comme un projet de temps libre, je fais construire un framework web en utilisant uniquement les acteurs. Encore une fois les avantages sont l'évolutivité d'une seule machine à un cluster de machines ensemble. De plus, en utilisant un message approche axée sur le service rend votre logiciel orienté depuis le début. Vous avez tous ces composants agréables, parler entre eux, mais ne sachant pas nécessairement les uns les autres, vivant sur la même machine, même pas dans le même centre de données.

Et puisque Google Reader fermé J'ai commencé avec un lecteur RSS, en utilisant bien sûr Akka. Il est tous les services sur les encapsulées pour moi. En conclusion: Le modèle de l'acteur lui-même est ce que vous devriez adopter d'abord et AKKA un cadre très fiable pour vous aider à mettre en œuvre avec beaucoup d'avantages que vous recevrez le long du chemin

.

Nous utilisons akka avec son plug-in de chameau pour distribuer l'analyse et le traitement des twimpact.com . Nous devons traiter entre 50 et 1000 messages par seconde. Outre le traitement multi-noeuds avec un chameau, il est également utilisé pour répartir le travail sur un seul processeur aux travailleurs multiples pour une performance maximale. Fonctionne très bien, mais il faut une certaine compréhension de la façon de gérer les congestions.

Je tentais mes mains sur Akka (Java api). Ce que j'ai essayé était de comparer l'acteur de base modèle Akka de la concurrence avec celle du modèle Java simple accès simultané (classes de java.util.concurrent).

Le cas d'utilisation était simple canonique carte réduire mise en œuvre du nombre de caractères. L'ensemble de données est un ensemble de chaînes de caractères générés de manière aléatoire (400 caractères de longueur), et calculer le nombre de voyelles en eux.

Pour AKKA I utilisé un BalancedDispatcher (pour l'équilibrage de charge entre les fils) et RoundRobinRouter (pour garder une limite mes acteurs de fonction). Pour Java, je simple fourche technique de jointure (mis en œuvre sans algorithme de vol de travail) qui fork map / reduce exécutions et rejoindre les résultats. Les résultats intermédiaires ont eu lieu dans le blocage des files d'attente pour faire même la jonction aussi parallèle que possible. Probablement, si je ne me trompe pas, ce serait en quelque sorte le concept miment « boîte aux lettres » des acteurs AKKA où ils reçoivent des messages.

Observation: Jusqu'à ce que les charges moyennes (~ 50000 entrée de chaîne) les résultats étaient comparables, variant légèrement différentes itérations. Cependant, comme je l'ai augmenté ma charge à ~ 100 000 il suspendrait la solution Java. J'ai configuré la solution Java avec 20-30 fils sous cette condition et il a échoué dans toutes les itérations.

L'augmentation de la charge à 1000000, a été fatale pour Akka ainsi. Je peux partager le code avec toute personne intéressée d'avoir un contrôle croisé.

Donc pour moi, il semble échelles Akka mieux que la solution multithread Java traditionnelle. Et sans doute la raison est sous le capot magique de Scala.

Si je peux modéliser un domaine de problème comme un événement géré par message passant une, je pense que Akka est un bon choix pour la machine virtuelle Java.

Test effectué sur: version Java: 1.6 IDE: Eclipse 3.7 Windows Vista 32 bits. RAM 3 Go. le processeur Intel Core, la vitesse d'horloge de 2,5 GHz

S'il vous plaît noter, le domaine du problème utilisé pour le test peut être débattue et j'ai essayé d'être le plus juste que mes connaissances Java a permis: -)

Nous utilisons Akka dans les systèmes de dialogues parlés ( primetalk ). Interne et externe. Afin d'exécuter simultanément un grand nombre de canaux de téléphonie sur un seul nœud de cluster, il est évidemment nécessaire d'avoir un cadre de multithreading. Akka fonctionne tout simplement parfait. Nous avons cauchemar précédent avec la java concurrency. Et avec il est tout Akka comme une balançoire - cela fonctionne simplement. Robuste et fiable. 24 * 7, non-stop.

L'intérieur d'un canal que nous avons flux en temps réel des événements qui sont traités en parallèle. En particulier: - longue reconnaissance automatique de la parole - se fait avec un acteur; - producteur de sortie audio qui mélange quelques sources audio (y compris la synthèse vocale); - conversion texte-parole est un ensemble distinct d'acteurs partagés entre les canaux; -. Traitement sémantique et de la connaissance

Pour faire des interconnexions de traitement de signaux complexes que nous utilisons SynapseGrid . Il a l'avantage de la vérification de la compilation du DataFlow dans les systèmes d'acteurs complexes.

J'ai récemment mis en œuvre l'exemple de carte-reduce canonique Akka: Nombre de mots. Il est donc un cas d'utilisation d'Akka: de meilleures performances. Il était plus d'une expérience de JRuby et les acteurs AKKA que toute autre chose, mais il montre aussi que Akka est pas Scala ou Java uniquement: il fonctionne sur toutes les langues sur le dessus de la machine virtuelle Java

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top