Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Orleans è un framework multipiattaforma progettato per semplificare la creazione di app distribuite. Indipendentemente dal ridimensionamento da un singolo server a migliaia di app basate sul cloud, Orleans fornisce strumenti per gestire le complessità dei sistemi distribuiti. Estende i concetti comuni di C# agli ambienti multiserver, consentendo agli sviluppatori di concentrarsi sulla logica dell'app.
Ecco cosa offre Orleans:
- È progettato per scalare in modo elastico. Aggiungere o rimuovere server affinché Orleans si modifichi di conseguenza per mantenere la tolleranza di errore e la scalabilità.
- Semplifica lo sviluppo di app distribuite con un set comune di modelli e API, rendendolo accessibile anche per i nuovi sistemi distribuiti.
- È nativo del cloud e viene eseguito su piattaforme in cui .NET è supportato: Linux, Windows, macOS e altro ancora.
- Supporta opzioni di distribuzione moderne come Kubernetes, Servizio app di Azure e App Azure Container.
Orleans viene spesso definito "Distributed .NET" a causa della sua attenzione alla creazione di servizi resilienti e scalabili nativi del cloud.
Novità della Orleans versione 10.0
Orleans 10.0 introduce diverse nuove funzionalità e miglioramenti:
- Orleans Dashboard: un dashboard integrato per il monitoraggio in tempo reale del Orleans cluster, dei grain e dei silo.
- Provider Redis: Provider Redis per clustering, persistenza e promemoria stabili.
- Supporto CancellationToken per le destinazioni di sistema: Supporto CancellationToken esteso in tutto il framework.
Suggerimento
Orleans 10.0 è destinato a .NET 8.0, .NET 9.0 e .NET 10.0.
Novità della Orleans versione 9.x
Orleans 9.x introduce diverse funzionalità significative:
- Supporto completo per i CancellationToken: I metodi Grain ora supportano completamente i token di cancellazione.
- Strong-Consistency Grain Directory: una nuova directory distribuita in memoria con garanzie di coerenza assoluta.
- Spargimento dell'Attivazione Basato su Memoria: disattivazione automatica delle unità sotto pressione di memoria.
- Cluster di test in-process: infrastruttura di test semplificata per Orleans applicazioni.
- Miglioramento del protocollo di appartenenza: rilevamento più rapido degli errori (90 secondi rispetto a 10 minuti nelle versioni precedenti).
- Ribilanciamento attivazione: ribilanciamento automatico del grano tra silo (stabile, sperimentale nella versione 8.2).
- Modifica posizionamento predefinito (9.2): strategia di posizionamento predefinito modificata da Casuale a ResourceOptimized.
Suggerimento
Orleans 9.x è destinato a .NET 8.0 e .NET 9.0.
Novità della Orleans versione 8.x
Orleans 8.x ha introdotto diverse funzionalità importanti:
- Integrazione di .NET Aspire: supporto di prima classe per .NET Aspire per lo sviluppo semplificato nativo del cloud.
- Ottimizzazione delle Risorse per il Posizionamento: una nuova strategia di posizionamento basata sull'utilizzo della CPU e della memoria.
- Ripartizione dell'attivazione (8.2, sperimentale): ridistribuzione automatica dei grani per migliorare le prestazioni.
-
Nuova API Timer Grain (8.2):RegisterGrainTimer sostituisce il metodo deprecato
RegisterTimer. - Serializzatore MessagePack (8.2): nuova opzione di serializzazione ad alte prestazioni.
- Provider di clustering Cassandra (8.2): supporto per Apache Cassandra in qualità di provider di clustering.
Suggerimento
Orleans 8.x è compatibile con .NET 8.0.
Novità della Orleans versione 7.0
Orleans 7.0 è stata una versione principale con miglioramenti significativi:
- API semplificate: modelli di generatore semplificati con UseOrleans e UseOrleansClient.
- Generatori di origine: è stata sostituita la generazione di codice con generatori di origine per migliorare le prestazioni in fase di compilazione.
- Nuovo sistema di serializzazione: nuovo framework di serializzazione a tolleranza di versione a prestazioni elevate.
- Supporto IAsyncEnumerable (7.2): streaming di risposte da metodi granulari.
- Timeout per chiamata (7.2.2): specificare i timeout per singole chiamate granulari.
- Provider Cosmos DB (7.2): supporto di Azure Cosmos DB per il clustering, la persistenza e i promemoria.
Suggerimento
Orleans La versione 7.0 è destinata a .NET 7.0 e versioni successive.
Orleans 3.x (legacy)
Orleans 3.x è una versione legacy. Per i nuovi progetti, è consigliabile eseguire l'aggiornamento alla Orleans versione 7.0 o successiva per sfruttare le prestazioni migliorate, le API semplificate e le nuove funzionalità.
Differenze principali rispetto alle versioni più recenti:
- Usa ClientBuilder e SiloHostBuilder anziché il modello unificato UseOrleans.
- Richiede
ConfigureApplicationParts()per la scansione degli assembly. - Usa il generatore di codice legacy anziché i generatori di origine.
Per indicazioni sulla migrazione, vedere la Guida alla migrazione.
Modello di attore
Orleans si basa sul modello attore. Originato nei primi anni '70, il modello di attore è ora un componente principale di Orleans. Nel modello di attore , ogni attore è un oggetto leggero, simultaneo e non modificabile che incapsula un elemento di stato e il comportamento corrispondente. Gli attori comunicano esclusivamente usando messaggi asincroni. Orleans in particolare ha inventato l'astrazione dell'attore virtuale , dove gli attori esistono perpetuamente.
Nota
Gli attori sono entità puramente logiche che sempre esistono, praticamente. Un attore non può essere creato in modo esplicito né eliminato e la sua esistenza virtuale non è influenzata dall'errore di un server che lo esegue. Poiché gli attori esistono da sempre, sono sempre indirizzabili.
Questo nuovo approccio consente di creare una nuova generazione di app distribuite per l'era cloud. Il Orleans modello di programmazione manomette la complessità intrinseca nelle app distribuite altamente parallele senza limitare le funzionalità o imporre vincoli.
Per altre informazioni, vedere Orleans: Virtual Actors tramite Microsoft Research. Un attore virtuale è rappresentato come un grano Orleans.
Che cosa sono i cereali?
La granularità è una delle diverse primitive Orleans. Nel modello attore, un grano è un attore virtuale. Il blocco predefinito fondamentale in qualsiasi applicazione Orleans è un granulare. I grani sono entità che comprendono identità, comportamento e stato definiti dall'utente. Si consideri la seguente rappresentazione visiva di un chicco.
Le identità dei grain sono chiavi definite dall'utente, che rendono i grain sempre disponibili per l'invocazione. Altri grani o qualsiasi numero di client esterni possono richiamare grani. Ogni grano è un'istanza di una classe che implementa una o più delle interfacce seguenti.
- IGrainWithGuidKey: interfaccia marcatore per i grani con tasti di Guid.
-
IGrainWithIntegerKey: interfaccia marcatore per i grani con tasti di
Int64. -
IGrainWithStringKey: interfaccia marcatore per i grani con tasti di
string. - IGrainWithGuidCompoundKey: interfaccia marcatore per grani con chiavi composte.
- IGrainWithIntegerCompoundKey: interfaccia marcatore per grani con chiavi composte.
I grani possono avere dati di stato volatili o persistenti archiviati in qualsiasi sistema di archiviazione. Di conseguenza, i grani partizionano implicitamente gli stati dell'applicazione, abilitando la scalabilità automatica e semplificando il ripristino da guasti. Orleans mantiene lo stato di granularità in memoria mentre la granularità è attiva, causando una latenza inferiore e un minor carico negli archivi dati.
Il Orleans runtime crea automaticamente un'istanza di grani su richiesta. I grani non utilizzati per un periodo di tempo vengono rimossi automaticamente dalla memoria per liberare risorse. Questa rimozione è possibile a causa della loro identità stabile, consentendo la chiamata di grani indipendentemente dal fatto che vengano caricati in memoria o meno. Ciò consente anche il ripristino trasparente dall'errore perché il chiamante non deve sapere su quale server viene istanziata un'istanza in qualunque momento. I grani hanno un ciclo di vita gestito, con il runtime responsabile dell'attivazione Orleans /disattivazione e del posizionamento/individuazione dei grani in base alle esigenze. Ciò consente di scrivere codice come se tutti i grani siano sempre in memoria.
Che cosa sono i silo?
Un silo è un altro esempio di una primitiva Orleans. Un silo ospita uno o più grani. Il Orleans runtime implementa il modello di programmazione per le applicazioni.
In genere, un gruppo di silo opera come cluster per la scalabilità e la tolleranza di errore. Quando viene eseguito come cluster, i silos si coordinano per distribuire il lavoro e rilevare e ripristinare i guasti. Il runtime consente ai grani ospitati nel cluster di comunicare come se fossero all'interno di un singolo processo. Per visualizzare la relazione tra cluster, silo e grani, considerare il diagramma seguente:
Il diagramma precedente mostra la relazione tra cluster, silo e grani. Può essere presente un numero qualsiasi di cluster, ogni cluster ha uno o più silo e ogni silo ha uno o più grani.
Oltre al modello di programmazione principale, i silo forniscono grani con servizi di runtime come timer, promemoria (timer persistenti), persistenza, transazioni, flussi e altro ancora. Per altre informazioni, vedere Cosa si può fare con Orleans?.
Le app web e altri client esterni chiamano i grain nel cluster utilizzando la libreria client, che gestisce automaticamente la comunicazione di rete. I client possono anche essere co-ospitati nello stesso processo con silos per semplicità d'uso.
Cosa si può fare con Orleans?
Orleans è un framework per la creazione di app native del cloud e deve essere considerato durante la compilazione di app .NET che potrebbero essere eventualmente necessarie per la scalabilità. Ci sono apparentemente infinite modi per usare Orleans, ma di seguito sono alcuni dei più comuni: Giochi, Banking, App chat, tracciamento GPS, Trading azionario, Carrello acquisti, App di voto e altro ancora. Microsoft usa Orleans in Azure, Xbox, Skype, Halo, PlayFab, Gears of War e molti altri servizi interni. Orleans offre molte funzionalità che semplificano l'uso per varie applicazioni.
Persistenza
Orleans fornisce un modello di persistenza semplice che garantisce la disponibilità dello stato prima di elaborare una richiesta e mantenere la coerenza. I grani possono avere più oggetti dati persistenti denominati. Ad esempio, un termine potrebbe essere "profilo" per indicare il profilo di un utente e un altro "inventario" per la loro inventario. Questo stato può essere archiviato in qualsiasi sistema di archiviazione.
Quando un processo è in esecuzione, Orleans mantiene lo stato in memoria per servire le richieste di lettura senza accedere all'archiviazione. Quando la granularità aggiorna lo stato, la chiamata IStorage.WriteStateAsync garantisce la durabilità e la coerenza degli aggiornamenti dell'archivio di backup.
Per ulteriori informazioni, vedere persistenza del grano.
Timer e promemoria
I promemoria sono un meccanismo di pianificazione durevole per i grani. Usali per garantire che un'azione venga completata in un momento futuro, anche se il grain non è attualmente attivato. I timer sono la controparte non durevole dei promemoria e possono essere usati per eventi ad alta frequenza che non richiedono affidabilità.
Per altre informazioni, vedere timer e promemoria .
Posizionamento flessibile dei grani
Quando un grano viene attivato in Orleans, il runtime decide su quale server (silo) attivarlo. Questo processo è detto disposizione dei grani.
Il processo di posizionamento in Orleans è completamente configurabile. Scegliere tra criteri di posizionamento predefiniti, ad esempio casuali, preferimenti locali e basati sul carico o configurare la logica personalizzata. Ciò consente la massima flessibilità nel decidere dove vengono creati i grani. Ad esempio, posizionare grani su un server vicino alle risorse con cui devono operare o altri grani con cui comunicano.
Per altre informazioni, vedere posizionamento dei granuli.
Versionamento granulare e cluster eterogenei
L'aggiornamento dei sistemi di produzione in modo sicuro per tenere conto delle modifiche può essere difficile, in particolare nei sistemi con stato. Per tenere conto di questo, le interfacce grano possono essere versionate in Orleans.
Il cluster mantiene una mappatura delle implementazioni di grano disponibili in quali silos e delle loro versioni. Il runtime usa queste informazioni sulla versione con strategie di posizionamento per prendere decisioni di posizionamento durante il routing delle chiamate ai grani. Oltre ad aggiornare in modo sicuro un grain con controllo delle versioni, questo consente anche cluster eterogenei in cui diversi silo hanno diversi set di implementazioni di grain disponibili.
Per ulteriori informazioni, vedere Grain Versioning.
Lavoratori senza stato
Le unità senza stato sono particelle specialmente contrassegnate senza stato associato che possono operare su più silos simultaneamente. In questo modo è possibile aumentare il parallelismo per le funzioni senza stato.
Per altre informazioni, vedere grani di lavoro senza stato.
Filtri di chiamata granulare
Un filtro di chiamata granulare è una logica comune a molti grani. Orleans supporta i filtri per le chiamate in ingresso e in uscita. Gli usi comuni includono autorizzazione, registrazione e telemetria e gestione degli errori.
Contesto della richiesta
Trasmettere metadati e altre informazioni con una serie di richieste utilizzando il contesto della richiesta. Usare il contesto della richiesta per contenere informazioni sulla traccia distribuita o qualsiasi altro valore definito.
Transazioni ACID distribuite
Oltre al semplice modello di persistenza descritto in precedenza, i grani possono avere uno stato transazionale. Più grani possono partecipare insieme alle transazioni ACID , indipendentemente dalla posizione in cui viene archiviato lo stato. Le transazioni in Orleans sono distribuite e decentralizzate (ovvero nessun gestore transazioni centrale o coordinatore) e hanno isolamento serializzabile.
Per altre informazioni sulle transazioni, vedere Transazioni.
Flussi
I flussi consentono di elaborare una serie di elementi di dati quasi in tempo reale. Orleans i flussi vengono gestiti; i flussi non richiedono creazione o registrazione prima che un grano o un client pubblichi o sottoscriva. Ciò consente un maggiore disaccoppiamento tra i produttori e i consumatori di flussi, così come dall'infrastruttura.
L'elaborazione del flusso è affidabile: i moduli possono archiviare i checkpoint (cursori) e reimpostarsi a un checkpoint archiviato durante l'attivazione o in un momento successivo. I flussi supportano il recapito in batch dei messaggi ai consumatori per migliorare l'efficienza e le prestazioni delle operazioni di ripristino.
Gli flussi sono supportati da servizi di accodamento, come Azure Event Hubs, Amazon Kinesis e altri.
Un numero arbitrario di flussi può essere multiplexato in un numero minore di code e la responsabilità dell'elaborazione di queste code viene bilanciata in modo uniforme all'interno del cluster.
Introduzione a Orleans video
Per un'introduzione video a Orleans, vedere il video seguente: