Come si confronta Akka rispetto a Erlang? [chiuso]


97

Ho guardato Akka di recente ed è piuttosto impressionante. Sembra che abbia la maggior parte delle caratteristiche killer di erlang: trasparenza della posizione, gerarchie di supervisione e altro ancora. Ci sono caratteristiche che erlang ha che akka non ha?


Guarda questo film su erlang in pratica. Peccato che non ci sia nulla su scala youtube.com/watch?v=G0eBDWigORY
mhstnsc

Risposte:


123

Disclaimer: io sono il PO di Akka

  • Erlang esegue il copy-on-send - Akka utilizza la memoria condivisa (oggetti immutabili) per gli invii nella VM
  • Erlang esegue GC per processo: Akka utilizza GC JVM
  • Erlang ha OTP - Akka si integra con l'intero ecosistema Java (Apache Camel, JAX-RS, ecc. Ecc.)
  • Erlang esegue la pianificazione del processo per te: Akka ti consente di utilizzare molti Dispatcher diversi con infinite opportunità di configurazione
  • Erlang esegue il ricaricamento del codice a caldo: Akka può supportarlo, ma è meno flessibile a causa del caricamento di classi JVM

Quelli sono quelli dalla cima della mia testa.

D'altra parte, usare Akka significa che puoi usare Scala, Java, Groovy o JRuby per scrivere le tue applicazioni.


39
Anche gli oggetti Erlang sono immutabili e il modello di concorrenza non richiede la copia su invio all'interno dello stesso nodo. BEAM per oggetti di grandi dimensioni invia un riferimento. Fonte: questa risposta SO di @rvirdig .
Foof

26
Erlang esegue il copy-on-send per rendere GC più efficiente: può funzionare in base al processo. Questo è il motivo per cui non ci sono enormi pause GC nelle app Erlang rispetto alle app JVM / Akka.
andreypopp

4
Bene, Andrey, questo dipende da quale JVM / GC stai usando. azulsystems.com/products/zing/whatisit
Viktor Klang

4
Erlang ha un numero di riduzione per ogni processo, anche se sei in un ciclo di elaborazione pesante, Erlang VM può mettere in pausa il processo e lasciare che altri processi affamati prendano più cicli della CPU. Questa è una caratteristica molto importante che JVM non fornisce.
Daniel

6
@MaX Erlang è spesso 5 volte più lento di Java a causa della mancanza di supporto JIT. Ma Erlang non ha pause GC, è progettato per la concorrenza e le applicazioni di telecomunicazioni 7 * 24, Erlang si preoccupa maggiormente dell'equità del processo, evitando fame e deadlock, non è progettato per il throughput come JVM. Quindi, è davvero arancia e mela.
Daniel

74

In Erlang i processi sono garantiti per essere commutati circa ogni 1000 riduzioni. In un framework così ingenuo come l'agente Scala / Akka possiede uno scheduler fino a quando non finisce di funzionare in ricezione. Scacco matto. Gioco finito. Hasta la vista :) Gente, non perdete tempo con pseudo-tecnici. Sono rimasto scioccato dal fatto che i ragazzi qui confrontino Scala con Erlang.

Inoltre ci sono molte altre cosiddette "caratteristiche killer", ma ecco il mio consiglio, non pensare in termini di funzionalità, pensa a idiomi che abilitano un linguaggio particolare. Scala ruba le "migliori caratteristiche", Erlang ti abilita / implementa con gli idiomi giusti per costruire sistemi in modo affidabile, con un linguaggio di alto livello basato su quegli idiomi giusti. Quando impari Erlang stai ricostruendo la tua mente, il tuo modo di pensare a un sistema affidabile distribuito, Erlang ti insegna e ti aggiorna. Scala è solo un altro imperativo (oh, mi dispiace, multiparadigmale, divertente parola) linguaggio che cerca di rubare buone caratteristiche da altre lingue.


9
Il modo Erlang di rendere tutti gli IO implicitamente asincroni è molto elegante. Async IO può essere fatto usando le API NIO in Scala, che non mi sembra scacco matto, ma una soluzione meno elegante.
HRJ

7
di cosa diavolo stai parlando ?! in che modo l'elaborazione di 1000 attività dirette è migliore di una pianificazione roundrobin, o anche vicino a una pianificazione di una casella di posta più piccola !!
FUD

8
@vjache - Sono d'accordo. I miei molti anni come programmatore java mi hanno insegnato che prima o poi dovrai investigare il livello sotto di te. Scala / Akka sembra essere solo un altro livello sopra molti altri livelli (ad es. Nio, netty, ecc.), Che ad un certo punto dovrai capire tutti. Anche se ho appena iniziato a lavorare con Erlang, sembra che avrò meno livelli che devo capire per portare a termine il lavoro. La programmazione distribuita in Erlang sembra molto più leggera rispetto a Scala / Akka, probabilmente in modo simile a Python era l'alternativa più leggera a java per le app web.
Chris Snow il

@ FUD: forse intendeva 1000 istruzioni Erlang? non poteva significare 1000 messaggi ...
Erik Kaplun

2
@ErikAllik Intendeva 1000 "riduzioni". Pensa a una riduzione come a un token per eseguire un po 'di codice (non lo è, ma fa il lavoro per spiegare ...). Dopo 1000 riduzioni, lo scheduler passa a un processo diverso. Maggiori informazioni su erlang.org/pipermail/erlang-questions/2001-April/003132.html
Aegis

40

Quasi nessuno menziona l'isolamento del processo. Senza la garanzia che "il tuo thread non può interferire con la mia spazzatura", i sistemi distribuiti sono molto più difficili da ragionare. (Sono già abbastanza difficili con i processi di Erlang.)

AFAIK (che non è lontano, data la mia limitata esperienza diretta con la JVM), solo Erlang ottiene effettivamente l'isolamento del processo "giusto" sulla JVM. Il Sig. Google può dare alcuni suggerimenti su dove trovare ricerche di Fox e Candea (?) Sui sistemi di ricerca che utilizzano una tecnica di "micro-reboot" ("recovery-oriented computing"). Uno sviluppatore Erlang legge quella ricerca e dice un paio di cose:

  1. Benvenuto nel club, perché ci hai messo così tanto?
  2. Tuttavia, la JVM rende terribilmente, terribilmente difficile aderire. :-)

L'isolamento del processo è davvero super piacevole. Tuttavia, anche Erlang non è immune a un NIF andato storto.
Viktor Klang

14

Per me, lo scambio di codice a caldo in un intero cluster Erlang senza tempi di inattività (ad esempio make:all([netload]:) è una delle caratteristiche killer di Erlang.

Ma invertiamo la tua domanda: cosa ha l'akka che Erlang non ha? Ovviamente puoi aggiungere dozzine di estensioni e librerie (scala, akka, spring, osgi, ...) a Java per provare ad avvicinarti a Erlang. Ma qual è il punto? In sintesi, tutte queste estensioni sono molto più complesse dell'apprendimento del semplice linguaggio Erlang che ora ha dimostrato per oltre 2 decenni di essere in grado di svolgere il lavoro offrendo la massima scalabilità con zero tempi di inattività.


30
IMO, Scala è un linguaggio molto migliore a livello di sintassi di Erlang. Ha oggetti, tratti, spazi dei nomi appropriati, un'adeguata sicurezza dei tipi, nessuna brutta sintassi dei record, ecc. La comunità è più grande, posso usare tutti gli strumenti Java disponibili e mi sembra semplicemente più raffinato.
Ryeguy

15
@ryeguy: "linguaggio migliore a livello di sintassi" ... hmm, definire "migliore" per "sintassi". Quando confronto i linguaggi la sintassi è il fattore più irrilevante (perché è solo una questione di gusti o di ciò a cui sei abituato).
Peer Stritzinger

4
@ryeguy Semantica diversa, sintassi diversa.
arrivo il

3
lo scambio di codice a caldo diventa un problema se è necessario mantenere lo stato tra diverse versioni di codice, alla fine è più facile
arrestare

4
@ryeguy La sintassi di un linguaggio di programmazione è quasi irrilevante; ciò che conta è la sua semantica. Erlang è un PL funzionale quindi ovviamente non ha oggetti. I tratti, l'indipendenza dai tipi ecc. Sono dovuti al fatto che Scala è un linguaggio fortemente tipizzato, mentre Erlang è tipizzato dinamicamente; è una scelta di design. Tuttavia, ti invito a dare un'occhiata a Elixir se vuoi i benefici di Erlang con un tocco più moderno;)
Aegis

5

Probabilmente Erlang è migliore per sistemi distribuiti più grandi (seguendo la risposta di vjache) ma per un server normale quando si desidera utilizzare tutta la potenza di più CPU, Akka è una buona scelta: fornisce una buona astrazione, prestazioni e integrazione con l'ecosistema Java.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.