Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 5085|Atbildi: 1

[Avots] Virtuālie aktieri: Dapr pret Orleānu

[Kopēt saiti]
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ācija
Nākamo:.NET/C# izmanto Redis, lai ieviestu Bloom algoritmu, kas balstīts uz BitMap
 Saimnieks| Publicēts 29.12.2022 14:25:28 |
Microsoft Orleāna

Orleāna ir starpplatformu sistēma uzticamu, mērogojamu un izplatītu lietojumprogrammu izveidei. Izplatīta lietojumprogramma tiek definēta kā lietojumprogramma, kas aptver vairākus procesus, bieži izmantojot vienādranga saziņu, lai pārkāptu aparatūras robežas. Orleāna mērogo no viena lokālā servera līdz simtiem izplatītu, augsti pieejamu lietojumprogrammu mākonī. Orleāna paplašina pazīstamus jēdzienus un C# idiomas vairāku serveru vidēs. Orleāna ir veidota tā, lai tā būtu elastīga un mērogojama. Kad resursdators pievienojas klasterim, tas var pieņemt jaunas aktivizācijas. Kad resursdators iziet no klastera mērogošanas vai datora kļūmes dēļ, iepriekšējā aktivizācija šajā resursdatorā tiek atkārtoti aktivizēta atlikušajos resursdatoros pēc vajadzības. Orleānas klasterus var samazināt līdz vienam saimniekam. Tās pašas īpašības, kas tiek izmantotas, lai nodrošinātu elastīgu mērogošanu, nodrošina arī kļūdu toleranci. Klasteri automātiski atklāj un ātri atgūstas no kļūmēm.

Viens no galvenajiem Orleānas dizaina mērķiem ir vienkāršot izkliedēto lietojumprogrammu izstrādes sarežģītību, nodrošinot kopīgu modeļu un API kopumu. Izstrādātāji, kas pārzina viena servera lietojumprogrammu izstrādi, var viegli izmantot Orleānu, lai izveidotu elastīgus, mērogojamus, mākoņa vietējos pakalpojumus un citas izplatītas lietojumprogrammas. Tā rezultātā Orleāna bieži tiek dēvēta par "izplatīto .NET" un ir izvēles sistēma mākoņa vietējo lietojumprogrammu izveidei. Orleāna var darboties jebkurā vietā, kas atbalsta .NET. Tas ietver tā mitināšanu operētājsistēmās Linux, Windows un macOS. Orleānas programmas var izvietot Kubernetes, virtuālajās mašīnās un PaaS pakalpojumos, piemēram, Azure App Service un Azure Container Apps.

Dokumentācija:https://learn.microsoft.com/zh-cn/dotnet/orleans/overview

Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com