1006
Vývoj / Re:Uváznutí v Aktor systému
« kdy: 22. 10. 2019, 19:16:01 »OK. I tak mě ale zajímá, jak bys řešil přístup k persistentnímu storage. A pak jestli bys nechal aktory komunikovat pomocí sběrnice, kde se mohou za běhu porůznu registrovat k odběru událostí jednotliví aktoři. Předpokládejme, že je cílem nějaký výpočetní cluster s probíhajícími výpočty, které na sobě porůznu závisí (nějaká simulace třeba).Tezko rict, to je asi moc specificka otazka, ktera by zalezela na detailnich pozadavcich na ten system.
Obecne bych asi spis moc nepouzival slovo "sbernice", to do aktoroveho sveta imho moc nesedi. Pokud bych mel vypocetni cluster s nejakymi workery, kteri se hlasi o zadani vypoctu, tak bych mel asi nejaky "registr" aktor, kteremu by se worker ohlasil, ze chce praci a registr by workerum bud primo praci rozdeloval, nebo by jenom udrzoval jejich seznam a praci by rozdeloval zase jiny aktor. Zalezi hlavne na mnozstvi tech uloh - jestli by registr byl nebo nebyl uzky hrdlo...
Zavislosti se zase daji resit ruzne. Spawnovani novych actoru je typicky levne, takze casto se ruzne zavislosti daji resit treba tak, ze se spawne nekolik actoru a nekteri z nich proste cekaji na to, az se dokonci ulohy, na kterych jejich uloha zavisi. K tomuhle je ale dobry mit ten system "linku" - aby se dal cely ten "strom" actoru shodit naraz, pokud dojde k nejake chybe.
Persistentni storage je velky tema, silne implementacne zavisly. Jako rule of thumb bych se hlavne snazil dobre promyslet, jestli opravdu persistenci potrebuju. Mam zkusenost, ze dost casto se ukaze, ze vlastne vubec potreba neni.
Dam takovej pripad jedne veci, na ktere delam zrovna ted: jsou nejake streamy dat a nekdo nekdy v historii vymyslel, ze ty streamy budou oznacene nevyznamovymi IDcky (napr. "BFLM"). System funguje tak, ze prijdou data ze zarizeni, ktery ma ID treba "A", a v ramci toho zarizeni ma ten stream ID napr. "TEMP1" (je to teplota na prvnim cidlu). No a kdyz teda to dato prijde, tak se v databazi vyhleda mapovani (A, TEMP1) => BFLM a dal ten stream putuje pod timhle IDckem.
Zasadni otazka je, k cemu je vlastne to mapovani dobry. Co kdybych ten stream oznacil IDckem "A-TEMP1"? Prisel bych o neco? A pritom bych krasne odstranil perzistenci, databazi, pripadne i uplne stavovost...
To jenom takova drobna stupidni ilustrace...
Jako proč ne? Klidně to tak udělat můžeš, ale pravděpodobně si tím na sebe uvalíš omezení, která ti pak neumožní dělat některé věci, které se v opravdovém aktorovém systému dělat dají, nebo budou zbytečně složité. Pravděpodobně se dostaneš k "něčemu podobnýmu RESTu" a hlavní otázka pak je, proč to vůbec dělat a nepoužít REST