Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 5085|Svar: 1

[Kilde] Virtuelle skuespillere: Dapr vs Orleans

[Kopier link]
Opslået på 29/12/2022 14.24.52 | | | |
I løbet af den sidste uge har jeg kastet mig ud i softwareudvikling ved at undersøge konceptet virtuelle aktører. Jeg endte med at undersøge to forskellige frameworks: Dapr og Orleans.

Begge er meget præcise projekter med masser af interessante anvendelsestilfælde. Begge bruger idéen om "virtuelle" skuespillere. En virtuel aktør er en tilstands- og logikenhed, der:

  • Den kan entydigt identificeres ved ID
  • Den er enkeltgevindet
  • Kan være in-memory eller persistent – dens livscyklus styres af frameworket


Jeg kan virkelig godt lide idéen om virtuelle aktører og finder dem meget hjælpsomme i min udforskning af at bygge skalerbare og pålidelige værktøjer til at håndtere komplekse arbejdsgange. Hvis hver opgave er en enkelttrådet virtuel deltager, forsvinder racebetingelsesproblemet.

Fordi Orleans og Dapr begge er Microsoft-projekter, forestiller jeg mig en dag i en Western Story-stil opgør i Microsofts kantine.

Orleans

Jeg startede med Orleans, fordi det har været på min radar i et stykke tid efter at have set nogle videoer om det på YouTube. Det startede virkelig dårligt, fordi jeg troede, jeg ville bruge 4.x-versionen af alle deres NuGet-pakker. Dog fungerer absolut ingen af deres dokumentation med 4.x-pakken. Jeg endte med at bruge version 3.6.2.

Korn / Tilstand / Timere

At skabe et korn, der følger sin egen tilstand og udfører handlinger, er meget enkelt. Jeg kunne endda følge dokumentationen for kornpersistens og lave min egen CosmosDB (SQL API) implementering af IGrainStorage.

Påmindelser

Påmindelser er også nemme at sætte op. Indtil jeg prøvede at konfigurere reel persistens for dem. På nuværende tidspunkt i min research prøver jeg at holde alt ryddeligt og gemme alt i ComsosDB. Desværre kan jeg slet ikke få Orleans' påmindelses-persistence-pakke til at virke. Jeg endte med at skifte til AzureStorage-pakken. Så nu er mine data halvdelen i SQL API-kontoen og halvdelen i tabellen API-kontoen.

Streams

Det var der, jeg ikke gik godt. I Orleans identificeres flows ved en GUID og et valgfrit navnerum. Jeg er sikker på, at der er en god grund til, at streams skal identificeres med en GUID, men wow, det er upraktisk.

Jeg er meget frustreret over streams, fordi jeg nemt kunne oprette dem, men når jeg stopper og genstarter mit projekt og udløser en ny begivenhed, crasher alt.

Dette efterfølges af en meget værdifuld oplysning, da det tog mig 8 timer at reverse engineere Orleans-koden for at finde ud af det:

Når et korn er en stream-abonnent, skal kornet kalde ResumeAsync på abonnementshåndtaget i sin OnActivateAsync-metode, ellers crasher du med en ukendt fejl.

Jeg havde også problemet med, at det samme abonnement blev duplikeret, så jeg brugte koden til at slette alle kornets abonnementer og genskabte det så:


Andre Orleans-fælder / tips

Streams fungerer godt med Azure Event Hubs (via AddEventHubStreams).

Brug ikke / eller andre specialtegn i Grain-navnet på CosmosDB SQL API'ET!

Orleans-konklusion

Jeg kan godt lide Orleans, og jeg synes, det har potentiale. Dog har det en meget stejl indlæringskurve. På grund af min lange kamp med streaming har jeg ikke tid til at studere, hvordan klynger/udrulninger fungerer.

Dapr

Jeg fandt Dapr ved at lede efter alternativer til Orléans. Det er lidt mærkeligt, at det også er et Microsoft-sponsoreret projekt. Måske er de her for at tage en overlevelses-den-stærkeste-tilgang. Hvis ja, tror jeg, Dapr vil være en overlever.

For det første tillader Daprs REST/gRPC-baserede design, at aktører kan implementeres ved hjælp af ethvert programmeringssprog. Jeg syntes også, det var trivielt at køre alt (deltagere, statusser, timere, påmindelser, events) på en enkelt Redis-instans. Derudover tog det mig kun omkring en tredjedel af tiden at begynde at bruge Dapr. Så hurtig opstartstid skyldes Daprs fremragende dokumentation.

Skuespillere / Timere / Påmindelser

Sagde jeg lige, at Daprs dokumentation er fantastisk? Nå, det er overalt, undtagen JavaScript-eksempler. Jeg bruger det meste af min tid på Dapr, hvor jeg prøver at finde ud af, hvordan man kalder metoder på skuespillere. Koden til Dapr Javascript-eksemplet er som følger:

Dette er tydeligvis forældet. Jeg måtte bruge meget tid på at lokke disse tre linjer gennem Daprs test-/eksempelkode-udforskning

Kodeeksemplerne til at hente/sætte status har lignende problemer, så jeg lavede et GitHub-problem til dem.

Bortset fra de små problemer er det en leg at sætte skuespillere op.

At sætte timere og påmindelser til mit cast er også meget nemt.

Stat

Jeg kunne konfigurere Dapr til at fortsætte med Postgres meget nemt.

En ting, jeg har bemærket, er, at der kan være skalerbarhedsproblemer med, hvordan påmindelser gemmes. Dapr gemmer alle advarsler for en specifik deltagertype i et enkelt JSON-array. Hvad sker der, hvis nogen har en masse påmindelser?



Andre Dapr-grøft / tips

En ting jeg lagde mærke til, da jeg gennemgik koden til JavaScript SDK'en, er, at der slet ikke er mange kommentarer i kodebasen. Det gør det næsten umuligt at finde ud af noget. For eksempel findes der i state managerens addOrUpdateState-metode en tredje parameter kaldet updateValueFactory. Hvis der ikke er kommentarer i koden, er det næsten umuligt at vide, hvad callbacken er til.

Jeg er heller ikke sikker på, hvor meget jeg kan lide kommandoen "dapr init", når jeg prøver at sætte og køre en redis-container for mig. Hvad hvis jeg allerede har en redis-beholder? Hvad hvis jeg i stedet vil bruge Postgres? Jeg kan ikke finde dokumentation, der forklarer, hvordan man ændrer DAPR init-funktionen.

En note til alle, der har problemer med at bruge pubsub. Du skal bruge "dapr run" for at drive både din udgiver og abonnent:

For aktører og pubsub skal du bemærke, at det er vigtigt at bruge parameteren --app-port for at lade dapr vide, hvilken port din tjeneste kører på. pubsub-events og actor-opkald sendes til din service fra Dapr-sidecaren via http-opkald, så den skal vide, hvor de skal sendes hen:

Jeg testede en lille Dapr selvhostet "cluster" ved at starte min pubsub-abonnentinstans på to forskellige maskiner på mit hjemmenetværk. Det virkede bare!

Dapr-konklusion

Hvis du vil vide flere idéer om distribuerede applikationer eller virtuelle aktører, anbefaler jeg, at du starter med Dapr. Orleans var den oprindelige pioner, mens Dapr var en reboot, der tog tingene til næste niveau.

Originalt link:Hyperlink-login er synlig.





Tidligere:Se læsning. PDB-filindholdsinformation
Næste:.NET/C# bruger Redis til at implementere Bloom-algoritmen baseret på BitMap
 Udlejer| Opslået på 29/12/2022 14.25.28 |
Microsoft Orleans

Orleans er et platformuafhængigt framework til opbygning af pålidelige, skalerbare og distribuerede applikationer. En distribueret applikation defineres som en applikation, der spænder over flere processer, ofte ved hjælp af peer-to-peer-kommunikation for at overskride hardwaregrænser. Orleans skalerer fra en enkelt on-premises server til hundredvis af distribuerede, højt tilgængelige applikationer i skyen. Orleans udvider velkendte begreber og C#-idiomer til multi-server-miljøer. Orleans er designet til at være elastisk og skalerbar. Når en vært tilslutter sig klyngen, kan den acceptere nye aktiveringer. Når en vært forlader klyngen på grund af skalering eller computerfejl, genaktiveres den tidligere aktivering på den vært på de resterende værter efter behov. Orleans-klynger kan skaleres ned til en enkelt vært. De samme egenskaber, der bruges til at muliggøre elastisk skalering, muliggør også fejltolerance. Klynger opdager automatisk og kommer hurtigt efter fejl.

Et af Orleans' primære designmål er at forenkle kompleksiteten i udvikling af distribuerede applikationer ved at tilbyde et fælles sæt mønstre og API'er. Udviklere, der er fortrolige med single-server applikationsudvikling, kan nemt bruge Orleans til at bygge robuste, skalerbare, cloud-native tjenester og andre distribuerede applikationer i stedet. Som følge heraf omtales Orleans ofte som "distribueret .NET" og er det foretrukne rammeværk til at bygge cloud-native applikationer. Orleans kan køre hvor som helst, der understøtter .NET. Dette inkluderer hosting på Linux, Windows og macOS. Orleans-apps kan udrulles til Kubernetes, virtuelle maskiner og PaaS-tjenester som Azure App Service og Azure Container Apps.

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

Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com