|
|
Publicēts 29.12.2022 14:24:52
|
|
|
|

Pēdējās nedēļas laikā esmu iesaistījies programmatūras izstrādē, pētot virtuālo aktieru jēdzienu. Es galu galā apskatīju divus dažādus ietvarus: Dapr un Orleānu.
Abi ir ļoti kodolīgi projekti ar daudziem interesantiem lietošanas gadījumiem. Abi izmanto ideju par "virtuāliem" aktieriem. Virtuālais dalībnieks ir stāvokļa un loģiskā vienība, kas:
- To var unikāli identificēt ar ID
- Tas ir viena pavediena
- Var būt atmiņā vai noturīgs - tā dzīves ciklu pārvalda sistēma
Man ļoti patīk ideja par virtuālajiem aktieriem un uzskatu, ka tie ir ļoti noderīgi, lai izveidotu mērogojamus un uzticamus rīkus, lai apstrādātu sarežģītas uzdevumu darbplūsmas. Ja katrs uzdevums ir viena pavediena virtuālais dalībnieks, sacensību nosacījuma problēma pazūd.
Tā kā Orleāna un Dapr abi ir Microsoft projekti, es iedomājos dienu Rietumu stāsta stila izrādē Microsoft kafejnīcā.
Orleans
Es sāku ar Orleānu, jo tas kādu laiku ir bijis manā radarā pēc tam, kad redzēju dažus videoklipus par to YouTube. Tas sākās ļoti slikti, jo es domāju, ka izmantošu visu viņu NuGet pakotņu 4.x versiju. Tomēr absolūti neviena no viņu dokumentācijām nedarbojas ar 4.x pakotni. Es galu galā izmantoju versiju 3.6.2.
Graudi / Valsts / Taimeri
Izveidot graudu, kas izseko savu stāvokli un veic darbības, ir ļoti vienkārši. Es pat varēju sekot graudu noturības dokumentācijai un izveidot savu CosmosDB (SQL API) IGrainStorage ieviešanu.
Atgādinājumus
Atgādinājumus ir viegli iestatīt. Līdz es mēģināju konfigurēt viņiem reālo noturību. Šajā pētījuma brīdī es cenšos visu sakārtot un visu uzglabāt ComsosDB. Diemžēl es vispār nevaru panākt, lai Orleānas atgādinājuma noturības pakete darbotos. Man galu galā bija jāpārslēdzas uz AzureStorage pakotni. Tātad tagad mani dati ir puse SQL API kontā un puse tabulas API kontā.
Plūsmas
Tur man negāja labi. Orleānā plūsmas tiek identificētas ar GUID un neobligātu nosaukumvietu. Esmu pārliecināts, ka ir labs iemesls, kāpēc straumes ir jāidentificē ar GUID, bet wow, tas ir nepraktiski.
Es esmu ļoti neapmierināts ar straumēm, jo es varēju tās viegli izveidot, bet, tiklīdz es apstājos un restartēju savu projektu un aktivizēju jaunu notikumu, viss avarē.
Tam seko ļoti vērtīga informācija, jo man vajadzēja 8 stundas, lai reverso inženieriju Orleānas kodu, lai to izdomātu:
Ja grauds ir straumes abonents, graudam ir jāizsauc ResumeAsync abonementa rokturī savā OnActivateAsync metodē, pretējā gadījumā jūs avarēsiet ar neatpazītu kļūdu.
Man bija arī problēma ar tā paša abonementa dublēšanu, tāpēc es izmantoju kodu, lai izdzēstu visus graudu abonementus un pēc tam to atkārtoti izveidoju:
Citi Orleānas Gotchas / Padomi
Straumes labi darbojas ar Azure notikumu centrmezgliem (izmantojot AddEventHubStreams).
Neizmantojiet / vai citas īpašās rakstzīmes CosmosDB SQL API graudu nosaukumā!
Orleānas secinājums
Man patīk Orleāna, un es domāju, ka tai ir potenciāls. Tomēr tai ir ļoti stāva mācīšanās līkne. Sakarā ar manu ilgstošo cīņu ar straumēšanu, man nav laika izpētīt, kā darbojas klasteri / izvietojumi.
Dapr
Es atradu Dapr, meklējot alternatīvas Orleānai. Tas ir mazliet dīvaini, ka tas ir arī Microsoft sponsorēts projekts. Varbūt viņi ir šeit, lai izdzīvotu vispiemērotāko pieeju. Ja jā, es domāju, ka Daprs būs izdzīvojušais.
Pirmkārt, Dapr REST/gRPC balstītais dizains ļauj aktierus īstenot, izmantojot jebkuru programmēšanas valodu. Man arī šķita triviāli palaist visu (dalībniekus, statusus, taimeri, atgādinājumus, notikumus) vienā Redis instancē. Turklāt man vajadzēja tikai aptuveni trešdaļu laika, lai sāktu lietot Dapr. Tik ātrs startēšanas laiks ir saistīts ar Dapr lielisko dokumentāciju.
Aktieri / Taimeri / Atgādinājumi
Vai es tikko teicu, ka Dapra dokumentācija ir lieliska? Nu, tas ir visur, izņemot JavaScript piemērus. Es pavadu lielāko daļu sava laika Dapr, cenšoties izdomāt, kā izsaukt metodes aktieriem. Dapr Javascript parauga kods ir šāds:
Tas ir acīmredzami novecojis. Man bija jāpavada daudz laika, lai pārliecinātu šīs trīs rindas, izmantojot Dapr testa / parauga koda izpēti
Koda piemēriem stāvokļa iegūšanai / iestatīšanai ir līdzīgas problēmas, tāpēc es viņiem izveidoju GitHub problēmu.
Izņemot šīs nelielās problēmas, aktieru iestatīšana ir kūkas gabals.
Arī taimeru un atgādinājumu iestatīšana manai kastei ir ļoti vienkārša.
Valsts
Es varēju konfigurēt Dapr, lai tas ļoti viegli pastāvētu ar Postgres.
Viena lieta, ko esmu pamanījis, ir tas, ka var būt mērogojamības problēmas ar atgādinājumu glabāšanu. Dapr saglabā visus brīdinājumus par konkrētu dalībnieku tipu vienā JSON masīvā. Kas notiek, ja kādam ir daudz atgādinājumu?
Citi Dapr Gotchas / Padomi
Viena lieta, ko es pamanīju, pārlūkojot JavaScript SDK kodu, ir tā, ka kodu bāzē vispār nav daudz komentāru. Tas padara gandrīz neiespējamu kaut ko izdomāt. Piemēram, valsts pārvaldnieka metodē addOrUpdateState ir trešais parametrs, ko sauc par updateValueFactory. Ja kodā nav komentāru, ir gandrīz neiespējami pateikt, kam paredzēts atzvanīšana.
Es arī neesmu pārliecināts, cik ļoti man patīk komanda "dapr init", kas mēģina man iestatīt un palaist redis konteineru. Ko darīt, ja man jau ir redis konteiners? Ko darīt, ja es tā vietā vēlos izmantot postgres? Es nevaru atrast dokumentāciju, kas paskaidrotu, kā mainīt dapr init funkciju.
Piezīme ikvienam, kam ir problēmas ar pubsub lietošanu. Jums ir jāizmanto "dapr run", lai palaistu gan izdevēju, gan abonentu.
Aktieriem un pubsub ņemiet vērā, ka ir svarīgi izmantot parametru --app-port, lai dapr zinātu, kurā portā darbojas jūsu pakalpojums. pubsub notikumi un aktieru zvani tiek nosūtīti jūsu pakalpojumam no Dapr blakusvāģa, izmantojot http zvanus, tāpēc tam ir jāzina, kur tos sūtīt:
Es pārbaudīju nelielu Dapr pašmitinātu "klasteri", palaižot savu pubsub abonenta instanci divās dažādās mašīnās manā mājas tīklā. Tas vienkārši darbojās!
Dapr secinājums
Ja vēlaties uzzināt vairāk ideju par izplatītām lietojumprogrammām vai virtuālajiem aktieriem, iesaku sākt ar Dapr. Orleāna bija sākotnējais pionieris, bet Dapr bija atsāknēšana, kas pacēla lietas nākamajā līmenī.
Oriģinālā saite:Hipersaites pieteikšanās ir redzama.
|
Iepriekšējo:Skatīt lasījumu . PDB faila satura informācijaNākamo:.NET/C# izmanto Redis, lai ieviestu Bloom algoritmu, kas balstīts uz BitMap
|