Transazioni con attori

2

So che le transazioni utilizzano le serrature. Si afferma che gli attori ci liberano dallo stato e dai blocchi condivisi

make sure all crashes are the same as clean shutdowns: this can be done through practices such as shared-nothing and single assignment (which isolates a process' memory), _avoiding_locks_.

Gli attori sono un modello alternativo alle transazioni? Ci libera dalle transazioni?

Ho letto che Reactive Akka ha rivoluzionato la programmazione parallela, ma vedo che ha appena rotto le serrature in atomi dandoti qualcosa di basso livello come il linguaggio assemblatore per costruire tu stesso i blocchi desiderati (con timeout personalizzati). Il fatto che sia possibile aggiungere timeout rende le chiamate di blocco e i blocchi a tolleranza d'errore, come ho capito. Ma devi renderli manualmente a basso livello. Cosa c'è di così rivoluzionario qui? Siamo salvati dalle transazioni? Vedo che per alcuni attori può essere necessario bloccare uno o più altri attori per inviare loro diversi aggiornamenti in modo che nessun altro attore interferisca. Questo è chiamato "stato condiviso", "blocco" e transazione. Non capisco come Actor Model ci salvi da loro e rivoluziona qualsiasi cosa. In alternativa, considera un semplice modello di attore: attori con più processori + attore di memoria. Come lo programmate senza le serrature? So che è un esempio sfortunato. Ma come puoi essere sicuro che ci siano sempre dei fortunati? Per favore aiutami a capire a fianco del lapidario attore modello Verbiage.

    
posta Val 16.03.2017 - 21:02
fonte

2 risposte

4

Si afferma correttamente che le transazioni e il blocco sono necessari per gestire lo stato mutabile condiviso. E anche che in un sistema di attori non esiste uno stato mutabile condiviso. Quindi sembra che tu abbia già risposto alla tua domanda da solo.

I see that it can be necessary for some actor to lock one or more other actor(s) to send them several updates such that no other actor interferes.

Non ti seguo abbastanza qui. Perché dovresti progettare un sistema come questo?

This is called "shared state", "locking" and transaction.

No, penso che questa conclusione non sia corretta. Poiché lo stato è incapsulato all'interno di un attore e può essere modificato solo inviando messaggi a questo attore, questo stato non è considerato condiviso - è di proprietà dell'attore, non lo condivide con nessuno. L'aggiornamento di questo stato inviando messaggi non implicherebbe il blocco o una transazione. La modifica concomitante è esclusa dall'elaborazione sequenziale del messaggio dell'attore, che a volte viene definita "illusione a thread singolo".

I do not understand how Actor Model saves us from them and revolutionazes anything. Alternatively, consider a simple actor model: multiple processor actors + memory actor.

Ancora una volta, questo sembra essere un design atipico. Che cosa dovrebbe essere un "attore della memoria"? Perché dovresti separare l'elaborazione dallo stato?

Ho la sensazione che tu stia tentando di trasferire una soluzione esistente a un'architettura radicalmente diversa, che è destinata a fallire. Piuttosto che cercare di far comportare gli attori in un modo a cui sei abituato, dovresti accettare che avrà bisogno di un approccio diverso. Potresti trovare utile leggere qualcosa sulla progettazione di sistemi basati su attori, ad es. " Modelli di progettazione reattiva ".

    
risposta data 05.02.2018 - 11:11
fonte
2

Il modello di attore non risolve magicamente tutti i problemi. Rende solo una tale astrazione della programmazione concorrente che aiuta a ragionare sulle soluzioni.

Ci sono due aspetti principali del modello di attore, che lo rendono molto utile nella mia pratica.

Innanzitutto, quando l'IT risolve un problema aziendale, ciò che fa è tradurre in modo efficace i processi e le regole aziendali nel linguaggio dei computer. Ma i processi aziendali sono costruiti attorno alle persone in alcune strutture organizzative. E gli attori modellano bene queste strutture con la supervisione, non condividendo lo stato interno e il monitoraggio. Quindi, i processi di business sono costruiti da persone per le persone - quindi, assumono un ragionamento da parte delle persone e di solito sono abbastanza comprensibili. Quindi, la modellazione con gli attori si allinea abbastanza bene con i problemi aziendali e si adatta al cervello umano.

In secondo luogo, gli attori sono MOLTO utili nella modellazione di timeout, attività rischiose, cortocircuiti, tentativi esponenziali e così via. Ancora una volta, la supervisione e il monitoraggio aiutano.

Per quanto riguarda le transazioni, il primo aspetto menzionato le riguarda. Le transazioni possono essere modellate con gli attori così come sono usate nel mondo umano. Pensa a Problema di due generali . La comunicazione degli attori è asincrona. Se usi gli attori, vivi e basta. Quindi, hai almeno una volta la consegna (se aggiungi la conferma) o al massimo una volta (l'impostazione predefinita di Akka). Quindi, scegli ciò che si adatta al tuo problema e modella le transazioni con esso. Anche se probabilmente finirai con più linee di codice, ma i vantaggi sono astrazioni e scalabilità più semplici e pronte all'uso.

Devo anche aggiungere che tutte le qualità menzionate del modello di attore lo rendono ideale per il design basato sul dominio basato sull'architettura esagonale, con o senza Event-Sourcing. Il mio uso di Akka è proprio questo. E DDD è piuttosto preoccupato per le transazioni di dominio.

    
risposta data 17.03.2017 - 10:42
fonte

Leggi altre domande sui tag