|
|
Paskelbta 2022-12-29 14:24:52
|
|
|
|

Per pastarąją savaitę pradėjau kurti programinę įrangą, tyrinėdamas virtualių aktorių koncepciją. Galiausiai pažvelgiau į dvi skirtingas sistemas: Dapr ir Orleans.
Abu yra labai glausti projektai su daugybe įdomių naudojimo atvejų. Abu naudoja "virtualių" aktorių idėją. Virtualus veikėjas yra būsenos ir loginis vienetas, kuris:
- Jį galima unikaliai identifikuoti pagal ID
- Jis yra vieno sriegio
- Gali būti atmintyje arba nuolatinis - jo gyvavimo ciklą valdo sistema
Man labai patinka virtualių aktorių idėja ir manau, kad jie labai naudingi kuriant keičiamo dydžio ir patikimus įrankius, skirtus sudėtingoms užduočių darbo eigoms tvarkyti. Jei kiekviena užduotis yra vienos gijos virtualus dalyvis, lenktynių sąlygų problema išnyksta.
Kadangi Orleanas ir Dapr yra abu "Microsoft" projektai, aš įsivaizduoju dieną Vakarų istorija stiliaus showdown "Microsoft" kavinėje.
Orleanas
Pradėjau nuo Orleano, nes jis kurį laiką buvo mano radare, kai pamačiau keletą vaizdo įrašų apie jį "YouTube". Jis prasidėjo labai blogai, nes aš maniau, kad aš naudoju 4.x versiją visų jų NuGet paketus. Tačiau absoliučiai nė viena jų dokumentacija neveikia su 4.x paketu. Galiausiai naudojau 3.6.2 versiją.
Grūdai / Valstija / Laikmačiai
Sukurti grūdą, kuris seka savo būseną ir atlieka veiksmus, yra labai paprasta. Aš netgi galėjau sekti grūdų patvarumo dokumentaciją ir sukurti savo CosmosDB (SQL API) diegimą IGrainStorage.
Priminimus
Priminimus taip pat lengva nustatyti. Kol aš bandžiau sukonfigūruoti realaus pasaulio atkaklumą jiems. Šiuo metu mano tyrimų, aš stengiuosi išlaikyti viską tvarkinga ir saugoti viską ComsosDB. Deja, aš negaliu gauti Orleano priminimo atkaklumo paketas dirbti visiems. Galiausiai turėjau pereiti prie "AzureStorage" paketo. Taigi dabar mano duomenys yra pusė SQL API paskyroje ir pusė lentelės API paskyroje.
Srautus
Štai kur man nebuvo gerai. Orleane srautai identifikuojami pagal GUID ir pasirinktinę vardų sritį. Esu įsitikinęs, kad yra rimta priežastis, kodėl srautai turi būti identifikuojami pagal GUID, bet wow, tai nepraktiška.
Esu labai nusivylęs srautais, nes galėjau juos lengvai sukurti, bet kai sustabdau ir paleidžiu iš naujo savo projektą ir suaktyvinu naują įvykį, viskas sugenda.
Po to seka labai vertinga informacija, nes man prireikė 8 valandų, kad sukurčiau Orleano kodą, kad išsiaiškinčiau:
Kai grūdas yra srauto prenumeratorius, grūdas turi iškviesti "ResumeAsync" prenumeratos rankenėlėje "OnActivateAsync" metodu, kitaip sugenda neatpažinta klaida.
Aš taip pat turėjau klausimą, kad ta pati prenumerata yra dubliuojama, todėl aš naudojau kodą ištrinti visus grūdų prenumeratos ir tada iš naujo sukūrė:
Kiti Orleano Gotchas / Patarimai
"Streams" gerai veikia su "Azure Event Hubs" (per "AddEventHubStreams").
Nenaudokite / ar kitų specialiųjų simbolių CosmosDB SQL API GRŪDO pavadinime!
Orleano išvada
Man patinka Orleanas ir manau, kad jis turi potencialo. Tačiau jis turi labai stačią mokymosi kreivę. Dėl ilgos kovos su transliacija neturiu laiko tyrinėti, kaip veikia klasteriai / diegimai.
Dapr
Radau Dapr ieškodamas alternatyvų Orleanui. Šiek tiek keista, kad tai taip pat "Microsoft" remiamas projektas. Galbūt jie čia tam, kad išgyventų tinkamiausią požiūrį. Jei taip, manau, kad Dapr bus išgyvenęs.
Pirma, Dapr REST/gRPC pagrįstas dizainas leidžia aktorius įgyvendinti naudojant bet kokią programavimo kalbą. Man taip pat pasirodė nereikšminga viską (dalyvius, būsenas, laikmačius, priminimus, įvykius) paleisti viename Redis egzemplioriuje. Be to, man prireikė tik maždaug trečdalio laiko, kol pradėjau naudoti Dapr. Tokį greitą paleidimo laiką lemia puiki "Dapr" dokumentacija.
Aktoriai / Laikmačiai / Priminimai
Ar ką tik sakiau, kad Dapro dokumentacija yra puiki? Na, tai yra visur, išskyrus JavaScript pavyzdžius. Didžiąją laiko dalį praleidžiu Dapr, bandydamas išsiaiškinti, kaip iškviesti metodus aktoriams. "Dapr Javascript" pavyzdžio kodas yra toks:
Tai akivaizdžiai paseno. Aš turėjau praleisti daug laiko įtikinti šias tris eilutes per Dapr bandymo / pavyzdžio kodo tyrinėjimas
Kodo pavyzdžiai gauti / nustatyti būseną turi panašių problemų, todėl aš sukūriau GitHub klausimą jiems.
Išskyrus šias nedideles problemas, aktorių nustatymas yra paprastas dalykas.
Nustatyti laikmačius ir priminimus mano aktoriams taip pat labai paprasta.
Valstybė
Man pavyko sukonfigūruoti Dapr išlikti su Postgres labai lengvai.
Vienas dalykas, kurį pastebėjau, yra tai, kad gali kilti mastelio problemų, susijusių su priminimų saugojimu. Dapr saugo visus įspėjimus apie konkretų dalyvio tipą viename JSON masyve. Kas atsitiks, jei kas nors turi daugybę priminimų?
Kiti Dapr Gotchas / Patarimai
Vienas dalykas, kurį pastebėjau naršydamas JavaScript SDK kodą, yra tai, kad kodų bazėje nėra daug komentarų. Dėl to beveik neįmanoma ką nors išsiaiškinti. Pavyzdžiui, būsenos valdytojo addOrUpdateState metode yra trečias parametras, vadinamas updateValueFactory. Jei kode nėra komentarų, beveik neįmanoma pasakyti, kam skirtas atgalinis skambutis.
Aš taip pat nesu tikras, kiek man patinka "dapr init" komanda bando nustatyti ir paleisti redis konteinerį už mane. Ką daryti, jei jau turiu redis konteinerį? Ką daryti, jei vietoj to noriu naudoti postgres? Negaliu rasti dokumentų, paaiškinančių, kaip pakeisti dapr init funkciją.
Pastaba visiems, kurie turi problemų naudojant pubsub. Turite naudoti "dapr run", kad paleistumėte ir leidėją, ir prenumeratorių:
Aktoriams ir pubsub atminkite, kad svarbu naudoti parametrą --app-port, kad dapr žinotų, kuriame prievade veikia jūsų paslauga. pubsub įvykiai ir aktorių skambučiai siunčiami į jūsų paslaugą iš Dapr šoninės priekabos per http skambučius, todėl ji turi žinoti, kur juos siųsti:
Aš išbandžiau mažą Dapr savarankiškai priglobtą "klasterį" paleisdamas savo pubsub abonento egzempliorių dviejuose skirtinguose kompiuteriuose mano namų tinkle. Tai tiesiog pavyko!
Dapr išvada
Jei norite sužinoti daugiau idėjų apie paskirstytas programas ar virtualius aktorius, rekomenduoju pradėti nuo Dapr. Orleanas buvo originalus pionierius, o Dapr buvo perkrovimas, kuris viską perkėlė į kitą lygį.
Originali nuoroda:Hipersaito prisijungimas matomas.
|
Ankstesnis:Peržiūrėti skaitymą . PDB failo turinio informacijaKitą:.NET/C# naudoja Redis, kad įdiegtų Bloom algoritmą, pagrįstą BitMap
|