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 le Orleans offerte seguenti:
- È progettato per scalare elasticamente. 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. Si esaminerà ora il modello di attore.
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: