Cosa rende Erlang adatto alle applicazioni cloud?


9

Stiamo iniziando un nuovo progetto e stiamo implementando l'istanza di una nuvola openstack da parte delle nostre società (vedi http://www.openstack.org/ ). Il progetto prevede strumenti di sicurezza per la nostra società. Attualmente gestiamo centinaia di server dedicati per gli strumenti di sicurezza e li stiamo trasferendo alla nostra istanza di openstack.

Altri progetti nella mia azienda attualmente utilizzano erlang in diverse applicazioni server distribuite e altri Q / A sottolineano che l'erlang viene utilizzato in numerosi servizi cloud popolari. Sto cercando di convincere gli altri a considerare dove potrebbe essere applicabile al nostro progetto.

Quali sono i punti di forza di erlang per la programmazione cloud? Dove sono le aree è particolarmente appropriato usare erlang?


15
Definisci "cloud" e possiamo dirti cosa potresti voler sapere. Il termine "nuvola" significa marketing e significa qualcosa di diverso per ogni persona che lo utilizza.

Pensavo che dire openstack cloud sarebbe bastato a definire ciò su cui stiamo implementando. Vedi openstack.org . O stai richiedendo maggiori informazioni sul progetto? Sono strumenti di sicurezza per la nostra società. Attualmente gestiamo centinaia di server dedicati per gli strumenti di sicurezza e li stiamo trasferendo alla nostra istanza di openstack.
Duncan,

Ho modificato la domanda per renderlo migliore e rimuovere la preoccupazione "marketing". Il mio problema è selezionare lo strumento migliore per il lavoro. Sono un novellino di stackexchange, quindi non ho il controllo.
Duncan,

1
in particolare il termine "cloud" è nebuloso e non significa nulla di specifico, è marketing, non hai ancora definito ciò che qualifica effettivamente qualcosa come un'applicazione cloud . Personalmente so cosa so cosa penso significhi, sono sicuro che non è quello che pensi significhi , vista la domanda.

"il termine 'nuvola' è nebuloso" - buono! Significa qualcosa di virtuale e dovresti specificare se quel "qualcosa" è un software, un sistema operativo, una macchina singola, più macchine e reti o qualcos'altro.
GlenPeterson,

Risposte:


8

Oltre al fatto che Erlang è stato specificamente sviluppato per funzionare in situazioni concomitanti / parallelizzate / distribuite, le due tecniche principali che impiega per renderlo possibile sono:

Nessun effetto collaterale:

Ciò significa che, quando si assegna a una funzione una parte di dati da eseguire, ciò non influirà, in casi molto severi, su qualsiasi altra cosa nel sistema / processo in esecuzione. Ciò significa che se si esegue contemporaneamente una funzione 300 volte contemporaneamente, nessuna di queste 300 esecuzioni della funzione avrà effetto su nessuna delle altre.

La tecnica di implementazione per garantire che nessun effetto collaterale sia chiamata "immutabilità", che significa approssimativamente, non può essere mutata (modificata). Ciò significa che non appena si crea una variabile, il valore di quella variabile non può essere modificato. Erlang implementa questo comportamento con "assegnazione singola", quindi dopo aver assegnato un valore a una variabile, non è possibile assegnarlo nuovamente.

X = 1.
X = 2. // This is not a valid operation

Questo assicura che nessun codice possa cambiare accidentalmente il valore di X causando una condizione di competizione, quindi è intrinsecamente sicuro per i thread e l'uso simultaneo diventa banale. Questo è un comportamento molto raro tra i linguaggi software e il modo più grande in cui Erlang riesce ad essere così adatto per l'esecuzione simultanea.

Il modello dell'attore:

Questo è un modo particolare di modellizzazione che ha dimostrato di rendere molto semplice per gli sviluppatori l'implementazione e la gestione dell'elaborazione simultanea. Direttamente da Wikipedia (http://en.wikipedia.org/wiki/Actor_model):

Il modello Actor adotta la filosofia secondo cui tutto è attore. Questo è simile a tutto ciò che è una filosofia dell'oggetto usata da alcuni linguaggi di programmazione orientati agli oggetti, ma differisce dal fatto che il software orientato agli oggetti viene tipicamente eseguito in sequenza, mentre il modello Actor è intrinsecamente concorrente. Un attore è un'entità computazionale che, in risposta a un messaggio che riceve, può contemporaneamente: inviare un numero finito di messaggi ad altri attori; creare un numero finito di nuovi attori; designare il comportamento da utilizzare per il prossimo messaggio che riceve. Non vi è alcuna sequenza presunta per le azioni di cui sopra e potrebbero essere eseguite in parallelo. Il disaccoppiamento del mittente dalle comunicazioni inviate è stato un avanzamento fondamentale del modello di attore che consente strutture di comunicazione e controllo asincrone come schemi di passaggio dei messaggi.


A proposito di "Nessun effetto collaterale" dici "Questo è un comportamento molto raro tra i linguaggi software" - Sono un po 'sorpreso da questo. Java e C # non possono farlo oggi? Quali lingue conosci che devono avere effetti collaterali quando chiami una funzione?
NoChance,

3
@EmmadKareem Non è una questione di se si può scrivere un programma senza effetti collaterali; come hai notato, puoi farlo in Java o C #. Indica se il valore predefinito è privo di effetti collaterali e se esiste il supporto del compilatore per questo. In Java, ad esempio, non puoi dire al compilatore "questo metodo non ha effetti collaterali". Questo a sua volta significa che il compilatore non può avvisarti quando stai infrangendo le regole!
Andres F.,

@EmmadKareem Non sto dicendo che è impossibile scrivere C # o Java senza effetti collaterali (anche se estremamente rari), piuttosto sto dicendo che pochissimi linguaggi di programmazione hanno politiche rigorose integrate nel linguaggio che separano le funzioni con effetti collaterali da quelle senza.
Jimmy Hoffa,

Sarebbe bello se Java avesse un'annotazione @NoSideEffects per mettere su un metodo per dire al compilatore di applicare effetti collaterali per quel metodo. Nel mio codice mi piace pensare che sia comune che i metodi non abbiano effetti collaterali. Certo, alcuni metodi devono essere mutatori in un linguaggio come Java, ma molti non lo fanno. Soprattutto se preferisci oggetti immutabili nei tuoi progetti.
GlenPeterson,

Jimmy Hoffa e @AndresF., Grazie per i vostri chiarimenti.
NoChance,

9

Erlang è particolarmente forte nel calcolo simultaneo / parallelizzato. In effetti, è stato progettato originariamente proprio per quello scopo. Non ha nulla a che fare con il cloud, tranne che spesso, le applicazioni pesanti di calcolo sono state parallelizzate e distribuite in istanze "cloud" per facilitare la crescita / riduzione della capacità su richiesta.

Il resto è solo marketing-talk.


7
Erlang è stato progettato per il calcolo a tolleranza d'errore . È solo che il calcolo distribuito è un prerequisito per questo (come puoi restituire un risultato in modo affidabile se qualcuno versa accidentalmente caffè sulla tua singola macchina, hai bisogno di almeno due macchine) e il calcolo parallelo e simultaneo sono solo casi speciali di calcolo distribuito, quindi Erlang capita anche di essere bravo in quelli. Ma non è quello per cui è stato progettato.
Jörg W Mittag,

1
@ JörgWMittag Finché si dividono i peli ... sì, lo scopo era raggiungere la tolleranza agli errori. Ha raggiunto questo obiettivo attraverso la parallelizzazione. È stato progettato per implementare questo nell'interruttore di telefonia digitale AX che trasportava due condotte di calcolo isolate e parallele con una che funzionava come hot standby.
pap

1
Sì, mi spiace, avrei dovuto essere più chiaro: il cloud computing è distribuito praticamente per definizione, ed è spesso (non sempre ma di solito) implementato da cluster di macchine economiche e, soprattutto, inaffidabili , ma progettato per fornire un servizio affidabile. Questo è ciò che rende Erlang così adatto.
Jörg W Mittag,

3

Un aspetto del cloud diverso dalle tradizionali distribuzioni hardware è la facilità con cui è possibile creare nuove istanze quando necessario. La capacità di monitorare altri nodi e processi su altri nodi, rende relativamente semplice la creazione di sistemi altamente dinamici in grado di aggiungere o rimuovere vms e gestirli secondo necessità.

Ciò è particolarmente vero se stai costruendo il tuo sistema usando il framework OTP (Open Telecom PLatform) di erlang, che fornisce sia struttura che meccanismi (alberi di supervisione) per supportare la costruzione di cose piuttosto sofisticate con effetti molto meno di quanto tu possa immaginare. Erlang gestisce tutti i pezzi difficili in modo da non doverlo fare.

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.