java - tutorial - template casi d'uso




Buon caso d'uso per Akka (8)

Disclaimer: I am the PO for Akka

Oltre ad offrire uno smorgasbord di concorrenza che è molto più semplice da ragionare e ottenere corretto (attori, agenti, concorrenza di flussi di dati) e con controllo della concorrenza sotto forma di STM.

Ecco alcuni casi d'uso che potresti prendere in considerazione:

  1. Elaborazione delle transazioni (giochi online, finanza, statistiche, scommesse, social media, telecomunicazioni, ...)
    • scala, scala, tolleranza d'errore / HA
  2. Servizio back-end (qualsiasi settore, qualsiasi app)
    • servizio REST, SOAP, COMET, ecc
    • agire come hub di messaggi / livello di integrazione
    • scala, scala, tolleranza d'errore / HA
  3. Concorrenza / parallelismo snap-in (qualsiasi app)
    • Corretta
    • Semplice da lavorare e da capire
    • Basta aggiungere i vasi al tuo progetto JVM esistente (usa Scala, Java, Groovy o JRuby)
  4. Elaborazione batch (qualsiasi settore)
    • Integrazione cammello per collegarsi con le origini dati batch
    • Gli attori dividono e conquistano i carichi di lavoro batch
  5. Hub di comunicazione (telecomunicazioni, web media, media mobili)
    • scala, scala, tolleranza d'errore / HA
  6. Game server (giochi online, scommesse)
    • scala, scala, tolleranza d'errore / HA
  7. BI / datamining / scricchiolio di uso generale
    • scala, scala, tolleranza d'errore / HA
  8. inserisci qui altri casi d'uso interessanti

Ho sentito parlare molto del framework Akka (piattaforma di servizio Java / Scala), ma finora non ho visto molti esempi reali di casi d'uso per cui sarebbe stato utile. Quindi sarei interessato a conoscere le cose che gli sviluppatori hanno usato con successo.

Solo una limitazione: per favore non includere il caso di scrivere un server di chat. (perché? poiché questo è stato usato eccessivamente come esempio per molte cose simili)


L'ho usato finora in due progetti reali con molto successo. entrambi si trovano nel campo delle informazioni sul traffico quasi in tempo reale (traffico come nelle auto sulle autostrade), distribuiti su più nodi, integrando messaggi tra più parti, sistemi di back-end affidabili. Non sono ancora libero di fornire dettagli sui client, quando ottengo l'OK, forse può essere aggiunto come riferimento.

Akka ha davvero realizzato questi progetti, anche se abbiamo iniziato quando era in versione 0.7. (stiamo usando scala a proposito)

Uno dei grandi vantaggi è la facilità con la quale è possibile comporre un sistema con attori e messaggi praticamente senza alcuna calibrazione, è estremamente scalabile senza tutte le complessità del threading a mano e si ottiene il trasferimento di messaggi asincroni tra oggetti quasi gratuitamente.

È molto utile per modellare qualsiasi tipo di gestione dei messaggi asincrona. Preferirei scrivere qualsiasi tipo di sistema di servizi (web) in questo stile rispetto a qualsiasi altro stile. (Avete mai provato a scrivere un servizio Web asincrono (lato server) con JAX-WS? Si tratta di un sacco di tubature). Quindi direi qualsiasi sistema che non vuole essere bloccato su uno dei suoi componenti perché tutto viene chiamato implicitamente usando metodi sincroni e quel componente sta bloccando qualcosa. È molto stabile e la soluzione let-it-crash + supervisor to failure funziona davvero bene. Tutto è facile da configurare in modo programmatico e non difficile da testare.

Poi ci sono gli eccellenti moduli aggiuntivi. Il modulo Camel si integra perfettamente in Akka e consente un facile sviluppo di servizi asincroni con endpoint configurabili.

Sono molto contento del framework e sta diventando uno standard de facto per i sistemi connessi che costruiamo.


Recentemente ho implemented l'esempio di riduzione delle mappe canoniche in Akka: Conteggio parole. Quindi è un caso d'uso di Akka: prestazioni migliori. Era più un esperimento di JRuby e degli attori di Akka che altro, ma mostra anche che Akka non è solo Scala o Java: funziona su tutte le lingue sopra JVM.


Se si aumenta il livello del server di chat, si ottiene la risposta.

Akka fornisce un sistema di messaggistica simile alla mentalità di Let it crash di Erlang.

Quindi gli esempi sono cose che richiedono diversi livelli di durata e affidabilità della messaggistica:

  • Server di chat
  • Livello di rete per un MMO
  • Pompa di dati finanziari
  • Sistema di notifica per un iPhone / mobile / qualsiasi app
  • Server REST
  • Forse qualcosa di simile a WebMachine (indovinare)

Le cose belle di Akka sono le scelte che offre per la persistenza, sono l'implementazione STM, il server REST e la tolleranza d'errore.

Non essere infastidito dall'esempio di un server di chat, pensalo come un esempio di una certa classe di soluzioni.

Con tutta la loro eccellente documentazione, sento che una lacuna è esattamente questa domanda, casi d'uso ed esempi. Tenendo presente che gli esempi non sono banali.

(Scritto solo con l'esperienza di guardare video e giocare con la fonte, non ho implementato nulla usando akka).


Stiamo usando akka con il suo plugin per cammello per distribuire le nostre analisi e il trending processing per twimpact.com . Dobbiamo elaborare tra 50 e 1000 messaggi al secondo. Oltre all'elaborazione multi-nodo con cammello, viene anche utilizzato per distribuire il lavoro su un singolo processore a più lavoratori per le massime prestazioni. Funziona abbastanza bene, ma richiede una certa comprensione di come gestire le congestioni.


Un esempio di come lo usiamo sarebbe su una coda di priorità delle transazioni di debito / carta di credito. Ne abbiamo milioni e lo sforzo del lavoro dipende dal tipo di stringa di input. Se la transazione è di tipo CHECK, abbiamo pochissime elaborazioni ma se si tratta di un punto vendita allora c'è molto da fare come unire con i metadati (categoria, etichetta, tag, ecc.) E fornire servizi (avvisi email / sms, rilevamento di frodi, basso bilancio di fondi, ecc.). In base al tipo di input, componiamo classi di vari tratti (chiamati mixin) necessari per gestire il lavoro e quindi eseguire il lavoro. Tutti questi lavori entrano nella stessa coda in modalità realtime da diverse istituzioni finanziarie. Una volta puliti i dati, vengono inviati a diversi archivi dati per la persistenza, l'analisi o il push su una connessione socket o per sollevare l'attore comet. Gli attori di lavoro sono costantemente in grado di bilanciare il lavoro in modo da poter elaborare i dati il ​​più rapidamente possibile. Possiamo inoltre aggiungere servizi aggiuntivi, modelli di persistenza e stm per punti di decisione critici.

Il messaggio in stile Erlang OTP che passa sulla JVM è un ottimo sistema per lo sviluppo di sistemi in tempo reale sulle spalle di librerie e server applicativi esistenti.

Akka ti permette di trasmettere messaggi come se fossi in un esb tradizionale ma con velocità! Fornisce inoltre strumenti nel framework per gestire la grande quantità di pool di attori, nodi remoti e tolleranza agli errori necessari per la soluzione.


Usiamo Akka nei sistemi di dialogo parlato ( primetalk ). Sia internamente che esternamente. Per poter eseguire simultaneamente molti canali di telefonia su un singolo nodo di cluster è ovviamente necessario disporre di un framework multithreading. Akka funziona perfettamente. Abbiamo un incubo precedente con la java-concorrenza. E con Akka è proprio come uno swing - funziona semplicemente. Robusto e affidabile. 24 * 7, non-stop.

All'interno di un canale abbiamo flusso di eventi in tempo reale che vengono elaborati in parallelo. In particolare: - il lungo riconoscimento vocale automatico - viene eseguito con un attore; - produttore di output audio che miscela alcune sorgenti audio (incluso il parlato sintetizzato); - la conversione da testo a voce è un insieme separato di attori condivisi tra i canali; - elaborazione semantica e della conoscenza.

Per realizzare interconnessioni di elaborazione complessa del segnale usiamo SynapseGrid . Ha il vantaggio del controllo in fase di compilazione di DataFlow nei complessi sistemi di attori.


Usiamo Akka per elaborare le chiamate REST in modo asincrono - insieme al server web asincrono (basato su Netty) possiamo ottenere un miglioramento di 10 volte sul numero di utenti serviti per nodo / server, confrontandolo con il modello di richiesta thread per utente tradizionale.

Dillo al tuo capo che la tua bolletta di hosting AWS scenderà di 10 volte ed è un gioco da ragazzi! Shh ... non dirlo ad Amazon però ... :)





akka