2014. június 11., szerda

Heti hype: Akka

Mostanában igen gyakran jártam mindenféle meetupokra és igazán pofátlanság tőlem hogy nem számoltam be egyetlen egyről sem, mert igazán jók is voltak köztük. Konkrétan az egyik, ami egészen jó volt, a zürichi scala buherátorok Akka meetupja volt. Nem számítom magam az aktív scala felhasználók közé, de az Akka érdekelt egy projecthez.

Az Akka egy actor-based concurrency framework, amit scala-ban írtak, de van egészen jó API-ja java-hoz is. (A magyar szakmai szókincsem hanyatlását kivállóan demonstrálja az előző mondat) Az actor rendszerekben minden folyamatot egy actor jelképez. Ezek az actorok létrehozhatnak további actorokat és üzeneteket küldözgethetnek egymásnak. Az üzenetek stílusát tekintve inkább a "megmondás" a jó ötlet mint a kérdés. A kérdés is lehetséges, visszakapsz egy Future-t, nekem gyanús hogy ott lehetséges deadlock, de mindegy, ennyi az alapötlet.
Az actor nem egy szál. Nem tudni, hogy melyik szálon, melyik processzoron (illetve cluster esetében: melyik gépen) fog futni és hogy mikor és milyen sorrendben kapja meg az üzeneteket. Igazából nem is feltétlenül garantált, hogy valaha megkapja, ez bizonyos esetekben elfogadható.

Bár én is csak gyüjtögetem a tapasztalatokat az Akka háza tájáról, nem tűnik univerzálisan minden többszállú feldolgozásra hasznosnak vagy akár csak alkalmasnak is. Ennek ellenére:
  • Az akka meetupon az egyik közbekiabáló például azt találta ki, hogy Oracle tárolt eljárásokba integrálná az Akka-t, azért mert lehetséges. Kétségtelenül némi emberáldozat árán lehetséges, de minek?
  • Az egyik stack overflow felhasználó JDBC connection pool-t csinált Akka-ból. Nem is tünt fel neki semmi, csak az, hogy lassú.
  • Szintén a stack overflow-on az egyik leggyakoribb kérdés az Akka-val kapcsolatban, hogy egyáltalán mire használható.






Szóval javaslat mindenkinek, aki Akka-t használ illetve tanulgat (magamat is beleértve): gondolkodjunk el azon, hogy nem-e valami technológiai maszturbációt követünk el. Pár dologra jó az Akka, de nem mindenre.