Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 5085|Odpoveď: 1

[Zdroj] Virtuálni herci: Dapr vs Orleans

[Kopírovať odkaz]
Zverejnené 29. 12. 2022 14:24:52 | | | |
Za posledný týždeň som sa pustil do vývoja softvéru skúmaním konceptu virtuálnych aktérov. Nakoniec som sa pozrel na dva rôzne frameworky: Dapr a Orleans.

Oba projekty sú veľmi stručné s množstvom zaujímavých prípadov použitia. Obe používajú myšlienku "virtuálnych" aktérov. Virtuálny aktér je stavová a logická jednotka, ktorá:

  • Môže byť jednoznačne identifikovaný podľa ID
  • Je jednovláknová
  • Môže byť v pamäti alebo perzistentný – jeho životný cyklus je riadený rámcom


Veľmi sa mi páči myšlienka virtuálnych aktérov a považujem ich za veľmi užitočné pri skúmaní budovania škálovateľných a spoľahlivých nástrojov na zvládanie zložitých pracovných tokov. Ak je každá úloha jednovláknovým virtuálnym účastníkom, problém pretekových podmienok zmizne.

Keďže Orleans a Dapr sú oba projekty Microsoftu, predstavujem si deň v štýle Western Story v Microsoftovej jedálni.

Orleans

Začal som s Orleans, pretože som ho už nejaký čas sledoval po tom, čo som videl niekoľko videí o ňom na YouTube. Začalo to naozaj zle, pretože som si myslel, že budem používať 4.x verziu všetkých ich NuGet balíkov. Avšak absolútne žiadna ich dokumentácia nefunguje s balíkom 4.x. Nakoniec som použil verziu 3.6.2.

Obilniny / Štát / Časovače

Vytvoriť zrno, ktoré sleduje svoj vlastný stav a vykonáva akcie, je veľmi jednoduché. Dokonca som dokázal sledovať dokumentáciu o perzistencii zrna a vytvoriť si vlastnú CosmosDB (SQL API) implementáciu IGrainStorage.

Pripomenutia

Pripomienky sa tiež ľahko nastavujú. Až kým som sa nepokúsil nastaviť reálnu perzistenciu pre nich. V tomto bode môjho výskumu sa snažím udržiavať všetko upratané a ukladať do ComsosDB. Bohužiaľ, balík Orleans na perzistenciu mi vôbec nefunguje. Nakoniec som musel prejsť na balík AzureStorage. Teraz sú moje dáta polovicu v SQL API účte a polovicu v table API účte.

Prúdy

Tam som to nedopadol dobre. V Orleans sú toky identifikované pomocou GUID a voliteľného menného priestoru. Som si istý, že existuje dobrý dôvod, prečo musia byť streamy identifikované GUID, ale wow, to je nepraktické.

Som veľmi frustrovaný zo streamov, pretože som ich dokázal ľahko vytvoriť, ale keď zastavím, reštartujem projekt a spustím novú udalosť, všetko spadne.

Nasleduje veľmi cenná informácia, pretože mi trvalo 8 hodín, kým som reverzne analyzoval Orleanský kód, aby som na to prišiel:

Keď je zrno odberateľom prúdu, zrno musí zavolať ResumeAsync na predplatné v metóde OnActivateAsync, inak dôjde k pádu s nerozpoznanou chybou.

Mal som tiež problém s rovnakým predplatným, takže som použil kód na vymazanie všetkých odberateľov obilia a potom som ho znovu vytvoril:


Ďalšie Orleans Catchy / Tipy

Streams dobre funguje s Azure Event Hubs (cez AddEventHubStreams).

Nepoužívajte / ani iné špeciálne znaky v názve Grain v CosmosDB SQL API!

Orleanský záver

Mám rád Orleans a myslím, že má potenciál. Avšak má veľmi strmú krivku učenia. Kvôli môjmu dlhodobému boju so streamovaním nemám čas študovať, ako fungujú klastre/nasadenia.

Dapr

Dapr som našiel hľadaním alternatív k Orleans. Je trochu zvláštne, že je to zároveň projekt sponzorovaný Microsoftom. Možno sú tu, aby zvolili prístup prežitia najsilnejšich. Ak áno, myslím, že Dapr bude preživší.

Po prvé, dizajn Dapr založený na REST/gRPC umožňuje implementovať aktérov v ľubovoľnom programovacom jazyku. Tiež som zistil, že je triviálne spúšťať všetko (účastníkov, stavy, časovače, pripomienky, udalosti) na jednej inštancii Redis. Navyše mi trvalo asi tretinu času, kým som začal používať Dapr. Taký rýchly štart je vďaka vynikajúcej dokumentácii Dapr.

Herci / Časovače / Pripomienky

Práve som povedal, že dokumentácia od Dapr je skvelá? No, je všade, okrem príkladov v JavaScripte. Väčšinu času trávim na Dapr, snažiac sa prísť na to, ako volať metódy na hercov. Kód pre vzorku Dapr Javascriptu je nasledovný:

Toto je zjavne zastarané. Musel som stráviť veľa času tým, že som tieto tri riadky presviedčal cez Dapr testovacie/ukážkové kódové skúmanie

Príklady kódu pre getting/setting state majú podobné problémy, tak som pre ne vytvoril GitHub issue.

Okrem týchto drobných problémov je príprava hercov hračka.

Nastavovanie časovačov a pripomienok pre moju sadlinu je tiež veľmi jednoduché.

Štát

Podarilo sa mi veľmi jednoducho nastaviť Dapr tak, aby pretrvával s Postgresom.

Jedna vec, ktorú som si všimol, je, že môžu byť problémy so škálovateľnosťou spôsobu ukladania pripomienok. Dapr ukladá všetky upozornenia pre konkrétny typ účastníka v jednom JSON poli. Čo sa stane, ak má niekto veľa pripomienok?



Ďalšie Dapr tipy / tipy

Jedna vec, ktorú som si všimol pri prehliadaní kódu JavaScript SDK, je, že v kóde nie je takmer nič komentárov. To robí takmer nemožným niečo zistiť. Napríklad v metóde adOrUpdateState správcu stavu existuje tretí parameter nazývaný updateValueFactory. Ak v kóde nie sú žiadne komentáre, je takmer nemožné zistiť, na čo callback slúži.

Tiež si nie som istý, ako veľmi sa mi páči príkaz "dapr init", ktorý sa mi snaží nastaviť a spustiť kontajner Redis. Čo ak už mám redisovú nádobu? Čo ak chcem použiť postgres namiesto toho? Nemôžem nájsť dokumentáciu, ktorá by vysvetľovala, ako zmeniť funkciu dapr init.

Poznámka pre každého, kto má problém používať pubsub. Musíte použiť "dapr run" na prevádzku svojho vydavateľa aj predplatiteľa:

Pre aktorov a pubsub je dôležité použiť parameter --app-port, aby dapr vedel, na ktorom porte vaša služba beží. pubsub udalosti a volania hercov sú posielané vašej službe z Dapr sidecaru cez HTTP hovory, takže musí vedieť, kam ich poslať:

Testoval som malý Dapr self-hosted "cluster" tak, že som spustil svoju pubsub subscriber inštanciu na dvoch rôznych počítačoch v mojej domácej sieti. Proste to fungovalo!

Záver Dapr

Ak chcete vedieť viac o distribuovaných aplikáciách alebo virtuálnych aktéroch, odporúčam začať s Dapr. Orleans bol pôvodný priekopník, zatiaľ čo Dapr bol reboot, ktorý posunul veci na vyššiu úroveň.

Pôvodný odkaz:Prihlásenie na hypertextový odkaz je viditeľné.





Predchádzajúci:Zobraziť čítanie. Informácie o obsahu súborov PDB
Budúci:.NET/C# používa Redis na implementáciu Bloom algoritmu založeného na BitMape
 Prenajímateľ| Zverejnené 29. 12. 2022 14:25:28 |
Microsoft Orleans

Orleans je multiplatformový framework na tvorbu spoľahlivých, škálovateľných a distribuovaných aplikácií. Distribuovaná aplikácia je definovaná ako aplikácia, ktorá zahŕňa viacero procesov, často využívajúc peer-to-peer komunikáciu na prekonanie hardvérových hraníc. Orleans sa rozširuje od jedného lokálneho servera až po stovky distribuovaných, vysoko dostupných aplikácií v cloude. Orleans rozširuje známe koncepty a C# idiomy do multiserverových prostredí. Orleans je navrhnutý tak, aby bol elastický a škálovateľný. Keď sa hostiteľ pripojí ku klastru, môže prijať nové aktivácie. Keď hostiteľ opustí klaster kvôli škálovaniu alebo zlyhaniu počítača, predchádzajúca aktivácia na tomto hostiteľovi sa podľa potreby na zostávajúcich hostiteľoch znovu aktivuje. Orleanské klastre je možné škálovať na jedného hostiteľa. Rovnaké vlastnosti, ktoré umožňujú elastické škálovanie, umožňujú aj odolnosť voči chybám. Klastry automaticky detegujú a rýchlo sa zotavujú z porúch.

Jedným z hlavných cieľov dizajnu Orleans je zjednodušiť zložitosť vývoja distribuovaných aplikácií poskytovaním spoločnej sady vzorov a API. Vývojári oboznámení s vývojom aplikácií na jednom serveri môžu jednoducho využiť Orleans na tvorbu odolných, škálovateľných, cloud-native služieb a ďalších distribuovaných aplikácií. V dôsledku toho sa Orleans často označuje ako "distribuovaný .NET" a je preferovaným rámcom na tvorbu cloud-native aplikácií. Orleans môže bežať kdekoľvek, kde podporuje .NET. To zahŕňa hostovanie na Linuxe, Windows a macOS. Orleans aplikácie je možné nasadiť do Kubernetes, virtuálnych strojov a PaaS služieb ako Azure App Service a Azure Container Apps.

Dokumentácia:https://learn.microsoft.com/zh-cn/dotnet/orleans/overview

Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com