U susret konkurentnosti

Share

Actor model

Kada se govori o paralelizmu i konkurentnosti prvo što većini programerima pada na pamet jeste model u kome se koristi više niti. Problem sa ovim modelom je taj što on uglavnom podrazumeva korišćenje deljenih resursa, što dovodi do situacije kao što je “race conditioning”. Da bi se to izbeglo, uvode se koncepti kao što su “mutual exclusion” i sl. Mada i on sa druge strane dovodi do problema sa performansama, potencijalno “deadlock”-ovima itd. 
Alternativni pristup mogao bi da bude “turn base processing” na kome je delimično zasnovan i Actor model. Osnovni koncepti ovog načina procesiranja su: nikada ne čekaj, nikada ne blokiraj, završi brzo (a.k.a. The Law of Turns).

Sam Actor model obuhvata kako objekte tako i interakcije među njima. Model je kreiran kao pokušaj oponašanja ljudi i njihovih interakcija. Karakteristike Actor-a koje se mogu izdvojiti su:

  • actor je objekat sa “identitetom”
  • ima definisano ponašanje
  • interaguje sa ostatkom sistema isključivo preko asinhronih poruka

Jedan od razloga zbog kog je Actor model (kao i njegove implementacije) postao popularan je činjenica da umnogome olakšava pisanje izrazito konkurentnih aplikacija. Činjenica da Actor-i ne smeju deliti “state” automatski isključuje mogućnost greške kao rezultata “side effect-a”. Ovo konkretno podrazumeva da Actor-i ne mogu prosleđivati reference, pokazivače ili bilo koji drugi tip deljenih podataka. Svaki Actor šalje samo “immutable” podatke zajedno sa adresama Actor-a kojima potencijalno treba da proslediti poruku. Ove činjenice značajno olakšavaju pisanje konkurentnih aplikacija jer nepostojanje promenljivih komponenti isključuje potrebu za lock-ovanjem.

Iako je očigledno da je Actor model pogodan za primenu u slučajevima kada je paralelizam neophodan, sam model ima i mnoge izazove koje treba uzeti u obzir prilikom pisanja aplikacije. Jedan od najvećih izazova je koordinacija. S tim u vezi većina implementacija nudi i apstrakcije na višem nivou koje omogućavaju jednostavnije implementiranje protokola komunikacije.

Još jedan od izazova koje treba imati u vidu je i asinhronost Actor sistema i nepostojanje garancija u smislu otkazivanja delova sistema. Većina implementacija garantuje održavanje redosleda poruka u komunikaciji između dva Actor-a, međutim, takva garancija uglavnom ne postoji na nivou celog sistema. Kao rezultat toga većina framework-a nudi apstrakcije koje mogu biti od koristi da bi se obezbedilo željeno ponašanje i koordinacija.

Istorija Actor modela

Inspirisan tehnologijom paketnog prenosa i jezikom Smalltalk Alana Kay-a (gde se svi proračuni iniciraju razmenom poruka između objekata), 1973. Carl Hewitt objavljuje značajan rad u kome uvodi pojam aktora i ideju actor modela proračuna. Rad nailazi na odličan prijem naučne zajednice i u narednim decenijama actor model predstavlja značajnu oblast istraživanja konkurentnog i distribuiranog programiranja. Ipak, i pored brojnih rezultata, do danas nema opšteprihvaćenog matematičkog modela koji bi precizno opisao actor model. Kao kuriozitet, programski jezik Scheme (dijalekt Lispa) je i nastao pri pokušaju razumevanja actor modela – a zaključak autora (Sussman i Steele) je bio da actor model i lambda izrazi imaju identičnu implementaciju! S druge strane, Hewitt je ostao pri stavu da su aktori po pitanju iskazne moći konstrukata paralelizma i konkurentnosti ipak nesto moćnije sredstvo od lambda izraza.

Sa prestankom važenja Murovog zakona i omasovljenjem multi-core programiranja actor model ponovo dolazi u žižu interesovanja kako istraživača tako i industrije. Neke od najuspešnijih savremenih implementacija actor modela su deo standardnih biblioteka jezika Erlang i Scala (Akka toolkit).

Actor model u Scala programskom jeziku

U Scala programskom jeziku postoji više implementacija Actor modela. Najznačajnije su Scala Actors, Akka Actors i Lift Actors. Scala Actors implementacija bila je sastavni deo Scala standardne biblioteke do verzije 2.11 kada je zamenjena Akka Actors implementacijom. Implemenentacije Actor modela razlikuju se ne samo u konkurentnom modelu koji koriste u pozadini (da li kao osnovu koriste event sistem ili mapiranje thread-actor) već i u nivou interakcije koji je dostupan Actor-ima sistema (neke implementacije dozvoljavaju pozivanje public metoda Actor-a čime se narušava koncept Actor modela itc). Razlike postoje i u pogledu menadžmenta životnog ciklusa Actor-a. Neke od implementacija podržavaju remote Actor-e čime se povećava distribuiranost sistema bez potrebe za velikim izmenama na aplikacionom nivou.

Akka implementacija koja je postala sastavni deo Scala standardne biblioteke nudi širok spektar dodatnih biblioteka koje Actor sistem povezuju sa eksternim servisima i protokolima.

Akka Actor-i su jednostavni u pogledu resursa koji su potrebni za pojednačni Actor objekat i kao takvi omogućavaju kreiranje velikog broja Actor-a koji međusobno interaguju. Povećavanje broja Actor-a ne povećava direktno broj niti koje iz pozadine opslužuju komunikaciju.

Osim tehnologija koje su “de facto” postale standard u big data svetu, tim Vastovih inženjera  uspeva da se “igra” i sa tehnologijama koje su u zamahu. Jednu od tih tehnologija smo pokušali da vam približimo i u ovom blogu. Ukoliko su Vam koncepti kao sto su real time processing, big data processing, distributed systems bliski i interesantni Vast.com je pravo mesto za Vas.

Reference
http://en.wikipedia.org/wiki/Actor_model
http://www.doc.ic.ac.uk/~nd/surprise_97/journal/vol2/pjm2/
http://akka.io

Share

Prijavi se da prvi dobijaš nove blogove i vesti.

Оставите одговор

Vast Data Engineering Team

mm

Vast.com is the leader in vertical search for cars, travel and real estate. A successful, thriving Internet company, Vast provides its decision-making tools to customers and sellers in the midst of complicated purchases. Through Fortune 500 publishers such as Yahoo, USAA, Southwest, and AOL, Vast supports consumers through the lengthy sales cycles involved in the biggest monetary decisions of their lives: their homes, their cars, and their vacations.

Prijavi se da prvi dobijaš nove blogove i vesti.

Категорије