Condividi tramite


Microsoft Orleans

Orleans:

  • Framework multipiattaforma per la creazione di app distribuite affidabili e scalabili. Le app distribuite vengono definite come app che si estendono più di un singolo processo, spesso oltre i limiti hardware usando la comunicazione peer-to-peer.
  • Scalabilità da un singolo server locale a migliaia di app distribuite a disponibilità elevata nel cloud.
  • Estende i concetti familiari e i linguaggi C# agli ambienti multiserver.
  • È progettato per scalare dinamicamente. Quando un host viene aggiunto a un cluster, può accettare nuove attivazioni. Quando un host lascia il cluster, le attivazioni precedenti nell'host verranno riattivate negli host rimanenti in base alle esigenze. Un host può lasciare un cluster a causa di una riduzione delle risorse o di un guasto della macchina. Un cluster Orleans può essere ridotto a un singolo host. Le stesse proprietà che abilitano la scalabilità elastica consentono la tolleranza di errore. Il cluster rileva automaticamente e si riprende rapidamente da eventuali guasti.
  • Semplifica le complessità dello sviluppo di app distribuite fornendo un set comune di modelli e API.
  • Consente agli sviluppatori che hanno familiarità con lo sviluppo di app a server singolo di passare alla creazione di servizi resilienti e scalabili nativi del cloud e app distribuite.
  • A volte viene chiamato "Distributed .NET".
  • Framework di scelta per la creazione di app native del cloud.
  • Viene eseguito ovunque sia supportato .NET. Ciò include l'hosting in Linux, Windows e macOS.
  • Le app possono essere distribuite in Kubernetes, macchine virtuali e servizi PaaS, ad esempio servizio app di Azure e App Azure Container.

"Modello attore"

Orleans si basa sul "modello dell'attore". Il modello di attore ha avuto origine nei primi anni '70 ed è ora un componente principale di Orleans. Il modello attore è un modello di programmazione in cui ogni attore è un oggetto leggero, simultaneo e non modificabile che incapsula un elemento di stato e il comportamento corrispondente. Gli attori comunicano esclusivamente tra loro usando messaggi asincroni. Orleans in particolare ha inventato l'astrazione attore virtuale, in cui gli attori esistono in modo perpetuo.

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.

Si tratta di un nuovo approccio alla creazione di una nuova generazione di app distribuite per l'era cloud. Il modello di programmazione Orleans manomette la complessità intrinseca alle app distribuite altamente parallele senza limitare le funzionalità o imporre vincoli allo sviluppatore.

Per altre informazioni, vedere Orleans: Virtual Actors tramite Microsoft Research. Un attore virtuale è rappresentato come un grano Orleans.

Che cosa sono i grani?

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.

Un grano è costituito da un'identità stabile, un comportamento stabile e uno stato stabile.

Le identità dei grain sono chiavi definite dall'utente che rendono sempre disponibili i grain per l'invocazione. I grani possono essere richiamati da altri grani o da un numero qualsiasi di client esterni. Ogni granularità è un'istanza di una classe che implementa una o più delle interfacce seguenti:

I grani possono avere dati di stato volatili o persistenti che possono essere 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. Lo stato di granularità viene mantenuto in memoria mentre la granularità è attiva, causando una minore latenza e un minor carico negli archivi dati.

Ciclo di vita gestito di un Orleans granulo.

La creazione di istanze dei grani viene eseguita automaticamente su richiesta dal runtime Orleans. I grani non usati per un periodo di tempo vengono rimossi automaticamente dalla memoria per liberare risorse. Ciò è possibile a causa della loro identità stabile, che consente di richiamare grani se sono già caricati in memoria o meno. Ciò consente anche il ripristino trasparente da un errore perché il chiamante non deve sapere in quale server viene creata un'istanza di granularità in qualsiasi momento. I grani hanno un ciclo di vita gestito, con il runtime Orleans responsabile dell'attivazione/disattivazione e del posizionamento/individuazione dei grani in base alle esigenze. Ciò consente allo sviluppatore 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 runtime di Orleans 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 silo si coordinano tra loro per distribuire il lavoro e rilevare e recuperare dai guasti. Il runtime consente ai grani ospitati nel cluster di comunicare tra loro come se fossero all'interno di un singolo processo. Per visualizzare la relazione tra cluster, silo e grani, considerare il diagramma seguente:

Un cluster ha uno o più silo e un silo ha uno o più grani.

Il diagramma precedente mostra la relazione tra cluster, silo e grani. È possibile avere 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 un set di servizi di runtime, ad esempio timer, promemoria (timer persistenti), persistenza, transazioni, flussi e altro ancora. Per altre informazioni, vedere Cosa è possibile 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 posso fare con Orleans?

Orleans è un framework per la creazione di app native del cloud e deve essere considerato ogni volta che si creano app .NET che dovranno essere ridimensionate. Ci sono modi apparentemente infiniti per usare Orleans, ma di seguito sono alcuni dei modi più comuni; Gaming, Banking, Chat apps, GPS tracking, Stock trading, Shopping carts, Voting apps e altro ancora. Orleans viene usato da Microsoft in Azure, Xbox, Skype, Halo, PlayFab, Gears of War e molti altri servizi interni. Orleans offre molte funzionalità che semplificano l'uso per un'ampia gamma di applicazioni.

Persistenza

Orleans fornisce un modello di persistenza semplice che garantisce che lo stato sia disponibile prima dell'elaborazione di una richiesta e che la relativa coerenza venga mantenuta. I grani possono avere più oggetti dati persistenti denominati. Ad esempio, potrebbe esserci uno chiamato "profilo" per rappresentare quello di un utente e un altro denominato "inventario" per il loro inventario. Questo stato può essere archiviato in qualsiasi sistema di archiviazione.

Mentre un grain è in esecuzione, lo stato viene mantenuto in memoria in modo che le richieste di lettura possano essere servite senza accedere alla memoria di massa. Quando il grano aggiorna il suo stato, la chiamata IStorage.WriteStateAsync assicura che l'archivio di supporto venga aggiornato per garantire la durabilità e la coerenza.

Per ulteriori informazioni, vedere persistenza del grano.

Timer e promemoria

I promemoria sono un meccanismo di pianificazione durevole per i grani. Possono essere usati per garantire che un'azione venga completata in un momento futuro anche se il grain non è attivato in quel momento. 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) attivare quel grano. Questo è detto posizionamento del grano.

Il processo di posizionamento in Orleans è completamente configurabile. Gli sviluppatori possono scegliere tra un set di criteri di posizionamento predefiniti, ad esempio casuali, preferizioni locali e basate sul carico oppure è possibile configurare la logica personalizzata. Ciò consente la massima flessibilità nel decidere dove vengono creati i grani. Ad esempio, i grani possono essere posizionati su un server vicino alle risorse che devono operare su 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 da tenere conto in modo sicuro delle modifiche può risultare complesso, in particolare nei sistemi con stato. Per tenere conto di questo, le interfacce dei dati in Orleans possono essere versionate.

Il cluster gestisce una mappatura delle implementazioni granulari disponibili su quali silo nel cluster e delle versioni di tali implementazioni. Questa versione delle informazioni viene usata dal runtime insieme alle strategie di posizionamento per prendere decisioni di posizionamento durante il routing delle chiamate ai grani. Inoltre, per aggiornare in modo sicuro un granulare con controllo delle versioni, consente anche cluster eterogenei, in cui diversi silo hanno diversi set di implementazioni di granularità disponibili.

Per ulteriori informazioni, vedere Grain Versioning.

Lavoratori senza stato

I lavoratori senza stato sono grani contrassegnati appositamente che non hanno uno stato associato e possono essere attivati contemporaneamente su più silo. 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. I filtri per l'autorizzazione, la registrazione e la telemetria e la gestione degli errori sono considerati tutti comuni.

Contesto della richiesta

I metadati e altre informazioni possono essere passati con una serie di richieste usando il contesto della richiesta . Il contesto della richiesta può essere usato per contenere informazioni sulla traccia distribuita o qualsiasi altro valore definito dall'utente.

Transazioni ACID distribuite

Oltre al modello di persistenza semplice descritto in precedenza, i grani possono avere uno stato transazionale . Più grani possono partecipare transazioni ACID insieme indipendentemente dalla posizione in cui viene archiviato lo stato. Le transazioni in Orleans vengono distribuite e decentralizzate, poiché non esiste un gestore di transazioni centrale o un coordinatore delle transazioni, e hanno isolamento serializzabile .

Per altre informazioni sulle transazioni, vedere Transazioni.

Flussi

I flussi consentono agli sviluppatori di elaborare una serie di elementi di dati quasi in tempo reale. Orleans flussi vengono gestiti; i flussi non devono essere creati o registrati prima che un grano o un client pubblichi o si abboni a un flusso. Ciò consente un maggiore disaccoppiamento tra produttori di flussi e consumer l'uno dall'altro e l'infrastruttura.

L'elaborazione del flusso è affidabile: i grani possono archiviare checkpoint (cursori) e reimpostare un checkpoint archiviato durante l'attivazione o in qualsiasi 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 su un numero minore di code e la responsabilità dell'elaborazione di queste code viene bilanciata in modo uniforme attraverso il cluster.

Introduzione a Orleans video

Se si è interessati a un'introduzione video a Orleans, vedere il video seguente:

Passaggi successivi