Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 5085|Atsakyti: 1

[Šaltinis] Virtualūs aktoriai: Dapr vs Orleans

[Kopijuoti nuorodą]
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 informacija
Kitą:.NET/C# naudoja Redis, kad įdiegtų Bloom algoritmą, pagrįstą BitMap
 Savininkas| Paskelbta 2022-12-29 14:25:28 |
"Microsoft" Orleanas

Orleanas yra kelių platformų sistema, skirta patikimoms, keičiamo dydžio ir paskirstytoms programoms kurti. Paskirstyta programa apibrėžiama kaip programa, apimanti kelis procesus, dažnai naudojant peer-to-peer ryšį, kad peržengtų aparatinės įrangos ribas. "Orleans" plečiasi nuo vieno vietinio serverio iki šimtų paskirstytų, lengvai pasiekiamų programų debesyje. Orleanas išplečia pažįstamas sąvokas ir C# idiomas kelių serverių aplinkoje. Orleanas sukurtas taip, kad būtų elastingas ir keičiamas. Kai pagrindinis kompiuteris prisijungia prie klasterio, jis gali priimti naujus aktyvinimus. Kai pagrindinis kompiuteris išeina iš klasterio dėl mastelio įvedimo arba kompiuterio gedimo, ankstesnis aktyvinimas tame pagrindiniame kompiuteryje prireikus iš naujo suaktyvinamas likusiuose pagrindiniuose kompiuteriuose. Orleano klasterius galima sumažinti iki vieno pagrindinio kompiuterio. Tos pačios savybės, naudojamos elastingam masteliui, taip pat užtikrina atsparumą gedimams. Klasteriai automatiškai aptinka gedimus ir greitai atsigauna po jų.

Vienas iš pagrindinių Orleano dizaino tikslų yra supaprastinti paskirstytų programų kūrimo sudėtingumą, pateikiant bendrą modelių ir API rinkinį. Kūrėjai, susipažinę su vieno serverio programų kūrimu, gali lengvai naudoti Orleaną, kad sukurtų atsparias, keičiamo dydžio, debesies paslaugas ir kitas paskirstytas programas. Dėl to Orleanas dažnai vadinamas "paskirstytu .NET" ir yra pasirinkta debesų programų kūrimo sistema. Orleanas gali veikti bet kur, kas palaiko .NET. Tai apima jo prieglobą "Linux", "Windows" ir "MacOS". "Orleans" programas galima įdiegti "Kubernetes", virtualiose mašinose ir "PaaS" paslaugose, pvz., "Azure App Service" ir "Azure Container Apps".

Dokumentacija:https://learn.microsoft.com/zh-cn/dotnet/orleans/overview

Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com