Domanda

Ho sentito un sacco di entusiasti Akka quadro (piattaforma di servizio Java / Scala) , ma finora non ho visto molti esempi reali di casi d'uso che sarebbe un bene per. Quindi sarei interessato a sentir parlare gli sviluppatori cose lo hanno utilizzato con successo.

Una sola limitazione: si prega di non includere caso di scrivere un server di chat. (Perché? Perché questo è stato abusato come esempio per un sacco di cose simili)

È stato utile?

Soluzione

ho usato finora in due progetti reali con grande successo. entrambi sono in tempo reale le informazioni sul traffico di campo vicino (traffico come nelle auto sulle autostrade), distribuiti su più nodi, integrando messaggi tra più parti, i sistemi di back-end affidabili. Io non sono autorizzato a dare specifiche su clienti ancora, quando faccio ottenere l'OK forse può essere aggiunto come un riferimento.

Akka ha davvero tirato attraverso su quei progetti, anche se abbiamo iniziato quando era in versione 0.7. (Stiamo usando scala tra l'altro)

Uno dei grandi vantaggi è la facilità con cui è possibile comporre un sistema di attori e messaggi con quasi nessuna boilerplating, è scalabile estremamente bene senza tutte le complessità del threading arrotolato a mano e si ottiene un messaggio asincrono passando tra gli oggetti quasi gratuitamente.

E 'molto buono nel modellare qualsiasi tipo di gestione dei messaggi asincroni. Io preferirei scrivere qualsiasi tipo di (web) sistema di servizi in questo stile di qualsiasi altro stile. (Avete mai provato a scrivere un servizio Web asincrono (lato server) con JAX-WS? Che è un sacco di tubature). Quindi direi qualsiasi sistema che non vuole appendere su uno dei suoi componenti, perché tutto è implicitamente chiamato con metodi sincroni, e che un componente è il blocco su qualcosa. E 'molto stabile e la soluzione let-it-crash supervisore + al fallimento funziona davvero bene. Tutto è facile da installare a livello di codice e non è difficile da unit test.

Poi ci sono l'ottima moduli aggiuntivi. Il modulo Camel si inserisce proprio in buona parte Akka e permette così facile sviluppo di servizi asincroni con endpoint configurabili.

Sono molto felice con il quadro e sta diventando uno standard de facto per i sistemi collegati che costruiamo.

Altri suggerimenti

Disclaimer: io sono il PO per Akka

Oltre ad offrire un buffet concorrenza che è molto più semplice ragionare su e per ottenere corrette (attori, agenti, concorrenza flusso di dati) e con il controllo della concorrenza sotto forma di STM.

Ecco alcuni casi d'uso che si potrebbe prendere in considerazione:

  1. l'elaborazione delle transazioni (in linea di gioco, la finanza, le statistiche, le scommesse, i social media, telecomunicazioni, ...)
    • scalare, scale out, fault-tolerance / HA
  2. backend servizi (qualsiasi settore, qualsiasi applicazione)
    • REST servizio, SOAP, cometd etc
    • agiscono come hub messaggio / layer di integrazione
    • scalare, scale out, fault-tolerance / HA
  3. Snap-in concorrenza / parallelismo (qualsiasi app)
    • Corretto
    • Semplice da lavorare e capire
    • Basta aggiungere i vasetti al progetto JVM esistente (uso Scala, Java, Groovy o JRuby)
  4. L'elaborazione in batch (qualsiasi settore)
    • integrazione cammello per collegare con fonti di dati in batch
    • Attori dividere e conquistare i carichi di lavoro in batch
  5. hub delle comunicazioni (telecomunicazioni, dei media web, mobile media)
    • scalare, scale out, fault-tolerance / HA
  6. server di gioco (gioco online, scommesse)
    • scalare, scale out, fault-tolerance / HA
  7. BI / datamining / general scricchiolio scopo
    • scalare, scale out, fault-tolerance / HA
  8. Inserisci altri casi d'uso bello qui

Un esempio di come usiamo sarebbe su una coda di priorità di transazioni con carte di debito / credito. Abbiamo milioni di questi e la fatica del lavoro dipende dal tipo stringa di input. Se la transazione è di tipo CONTROLLO abbiamo ben poco di elaborazione, ma se si tratta di un punto di vendita, allora c'è molto da fare, come si fondono con i meta dati (categoria, etichetta, tag, ecc) e la prestazione dei servizi (avvisi e-mail / sms, rilevamento delle frodi, a basso equilibrio 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à tempo reale da diversi istituti finanziari. Quando i dati sono purificato viene inviato a diversi archivi dati per persistenza, analisi, o spinto a una connessione socket, o per sollevare attore cometa. attori che lavorano sono sempre carico di auto bilanciamento del lavoro in modo da poter elaborare i dati il ??più velocemente possibile. Possiamo anche scattare a servizi aggiuntivi, la persistenza modelli, e per i punti di decisione critici.

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

Akka ti permette di fare il passaggio di messaggi come si farebbe in una tradizionale ma con la velocità! Si dà anche strumenti nel quadro di gestire la grande quantità di piscine attore, nodi remoti, e tolleranza agli errori di cui avete bisogno per la vostra soluzione.

Usiamo Akka alle chiamate processo di REST in modo asincrono - insieme con web server asincrona (Netty-based) siamo in grado di raggiungere 10 miglioramento volte del numero di utenti serviti per nodo / server, il confronto a filo tradizionale per ogni richiesta utente modello

Dillo al tuo capo che i AWS di hosting disegno di legge sta per cadere dal fattore 10 ed è un gioco da ragazzi! Shh ... non dite a Amazon però ...:)

Stiamo usando Akka in un progetto di Telco su larga scala (purtroppo non posso rivelare un sacco di dettagli). Akka attori sono implementati e accesso remoto da un'applicazione web. In questo modo, abbiamo un modello semplificato RPC in base a Google protobuffer e noi ottenere il parallelismo con Akka Futures. Finora, questo modello ha funzionato brillantemente. Una nota:. Stiamo usando le API Java

Se astratta server di chat di un livello, allora si ottiene la risposta.

Akka fornisce un sistema di messaggistica che è simile a Erlang di "lasciarlo in crash" mentalità.

Quindi, esempi sono le cose che hanno bisogno di diversi livelli di durata e affidabilità di messaggistica:

  • server di chat
  • livello di rete per un MMO
  • Pompa Dati finanziari
  • Sistema di notifica per un iPhone / / mobili qualsiasi app
  • REST Server
  • Forse qualcosa di simile a WebMachine (indovinare)

Le cose belle di Akka sono le scelte che essa offre per la persistenza, la sua implementazione STM, server di REST e di tolleranza agli errori.

non si ottiene infastidito con l'esempio di un server di chat, pensare ad esso come un esempio di una certa classe di soluzione.

Con tutta la loro eccellente documentazione, mi sento come un divario è tale domanda esatta, casi d'uso ed esempi. Tenendo a mente gli esempi sono non banale.

(Scritto con la sola esperienza di guardare video e giocare con la fonte, ho implementato utilizzando niente Akka.)

Usiamo Akka in diversi progetti di lavoro, il più interessante dei quali è legato al veicolo incidente riparazione. Principalmente nel Regno Unito, ma sta espandendo negli Stati Uniti, in Asia, Australasia ed Europa. Usiamo gli attori al fine di garantire che le informazioni incidente di riparazione è fornito in tempo reale per consentire la riparazione sicura ed efficace dei costi dei veicoli.

La domanda di Akka è davvero più 'quello che non si può fare con Akka'. La sua capacità di integrarsi con quadri potenti, la sua potente astrazione e tutta la colpa aspetti di tolleranza ne fanno un kit di strumenti molto completo.

È possibile utilizzare Akka per diversi tipi di cose.

stavo lavorando su un sito web, dove ho migrato la pila tecnologia per Scala e Akka. L'abbiamo usato per praticamente tutto quello che è successo sul sito web. Anche se si potrebbe pensare che un esempio Chat è male, tutti sono fondamentalmente lo stesso:

  • Aggiornamenti in diretta sul sito (ad esempio visualizzazioni, calibro, ...)
  • Mostra commenti degli utenti in tempo reale
  • Servizi di avviso
  • Ricerca e tutti gli altri tipi di servizi

In particolare gli aggiornamenti in tempo reale sono facili dal momento che si riducono a ciò che un esempio ist Chat. La parte dei servizi è un altro argomento interessante perché si può semplicemente scegliere di utilizzare attori a distanza e anche se la vostra applicazione non è di tipo cluster, è possibile distribuirlo a macchine diverse con facilità.

Sono anche utilizzando Akka per un'applicazione autorouter PCB con l'idea di essere in grado di scalare da un computer portatile a un centro dati. Il potere più si dà, migliore sarà il risultato sarà. Questo è estremamente difficile da attuare se si tenta di utilizzare al solito la concorrenza perché Akka ti dà anche luogo di trasparenza.

Al momento come un progetto di tempo libero, sto costruendo un framework web utilizzando solo gli attori. Nuovamente i benefici sono scalabilità da una singola macchina a un'intera cluster di macchine. Inoltre, utilizzando un approccio guidato messaggio rende il vostro servizio software orientato fin dall'inizio. Avete tutti i componenti piacevoli, parlano tra di loro, ma non necessariamente conoscersi, che vivono sulla stessa macchina, nemmeno nello stesso centro dati.

E dal momento che Google Reader chiuso Ho iniziato con un lettore RSS, utilizzando Akka naturalmente. Si tratta di tutti i servizi su incapsulati per me. In conclusione: Il modello di attore in sé è quello che si dovrebbe adottare prima e Akka è un quadro molto affidabile vi aiuta a implementare con un sacco di benefici che riceverete lungo la strada

.

Stiamo usando Akka con il suo plug-in cammello per distribuire la nostra analisi e trend di trasformazione per twimpact.com . Dobbiamo elaborare tra 50 e 1000 messaggi al secondo. Oltre a elaborazione multi-nodo con cammello è anche usato 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 congestioni.

ho cercato le mie mani su Akka (Java API). Quello che ho cercato è stato quello di confrontare il modello di concorrenza basato attore di Akka con quello della pianura modello di concorrenza Java (classi java.util.concurrent).

Il caso d'uso è stata una semplice canonica mappa ridurre realizzazione di conteggio dei caratteri. Il set di dati è stato un insieme di stringhe generate in modo casuale (400 caratteri di lunghezza), e calcolare il numero di vocali in loro.

Per Akka ho usato un BalancedDispatcher (per il bilanciamento tra filettature carico) e RoundRobinRouter (per mantenere un limite miei attori funzione). Per Java, ho usato semplice forcella unirsi tecnica (implementato senza alcun lavoro di rubare algoritmo) che sborsare mappa / ridurre le esecuzioni e unire i risultati. risultati intermedi sono svolte nel bloccare code per fare anche la giunzione il più possibile parallela. Probabilmente, se non sbaglio, che sarebbe imitano in qualche modo il concetto di "casella postale" di attori Akka, dove ricevono i messaggi.

osservazione: Fino carichi medi (~ 50000 ingresso stringa) i risultati erano comparabili, variando leggermente diverse iterazioni. Tuttavia, come ho aumentato il mio carico di ~ 100000 sarebbe appendere la soluzione Java. Ho configurato la soluzione Java con 20-30 discussioni in questa condizione ed è venuto a mancare in tutte le iterazioni.

L'aumento del carico 1000000, è stata fatale per Akka pure. Posso condividere il codice con chiunque sia interessato ad avere un controllo incrociato.

Quindi, per me, sembra Akka scale fuori meglio rispetto ai tradizionali Java multithreaded soluzione. E probabilmente il motivo è la sotto la magia cofano della Scala.

Se riesco a modellare un dominio del problema come un messaggio di evento guidato passando, penso Akka è una scelta buona per la JVM.

Prova effettuata su: versione Java: 1.6 IDE: Eclipse 3.7 Windows Vista a 32 bit. 3GB RAM. processore Intel Core i5, 2,5 GHz di clock

Si prega di notare, il dominio del problema utilizzato per la prova può essere discusso e ho cercato di essere il più equo la mia conoscenza di Java ha permesso: -)

Usiamo Akka in sistemi di dialogo parlate ( primetalk ). Sia internamente che esternamente. Al fine di eseguire simultaneamente molti canali di telefonia su un singolo nodo di cluster è ovviamente necessario avere una qualche quadro multithreading. Akka funziona semplicemente perfetto. Abbiamo incubo precedente con il 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 in tempo reale degli eventi che vengono elaborati in parallelo. In particolare: - lungo il riconoscimento vocale automatico - è fatto con un attore; - audio produttore di uscita che mescola alcune fonti audio (tra cui sintesi vocale); - text-to-speech conversione è un insieme separato di attori condivisi tra i canali; -. Elaborazione semantica e la conoscenza

Per rendere le interconnessioni di segnale complesso elaborazione usiamo SynapseGrid . Ha il vantaggio di controllo in fase di compilazione della DataFlow nei sistemi attore complesso.

Recentemente ho implementato mappa-ridurre la canonica esempio nel Akka: Conteggio parole. Quindi è uno dei casi d'uso di Akka: migliore performance. Era più di un esperimento di JRuby e Akka di attori di ogni altra cosa, ma mostra anche che non è Akka Scala oppure solo Java: funziona su tutte le lingue in cima JVM

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top