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 garantisce che, quando viene effettuata una chiamata a un grain, un'istanza di quel grain sia disponibile in memoria su un server nel cluster per elaborare la richiesta. Se la granularità non è attualmente attiva nel cluster, Orleans seleziona un server per attivare la granularità. Questo processo è detto posizionamento della grana. Il posizionamento è anche un modo per Orleans bilanciare il carico: posizionare grani occupati in modo uniforme consente di distribuire il carico di lavoro nel cluster.
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 che devono operare su o vicino ad altri grani con cui comunicano.
Annotazioni
Orleans A partire dalla versione 9.2, la strategia di posizionamento predefinita è cambiata dal posizionamento casuale al posizionamento ottimizzato per le risorse. Ciò offre una distribuzione del carico migliore in base all'utilizzo della CPU e della memoria tra silo. Se è necessario il comportamento precedente di posizionamento casuale, configurarlo in modo esplicito come descritto in Configurare la strategia di posizionamento predefinita.
Per impostazione predefinita, Orleans seleziona un server compatibile casuale.
Configurare la strategia Orleans di posizionamento usa a livello globale o per classe granulare.
Posizionamento ottimizzato per le risorse (impostazione predefinita)
Annotazioni
Orleans A partire dalla versione 9.2, il posizionamento ottimizzato per le risorse è la strategia di posizionamento predefinita. Non è necessario configurarlo in modo esplicito, a meno che non si desideri personalizzare le opzioni.
Per usare il posizionamento ottimizzato per le risorse, aggiungere la ResourceOptimizedPlacementAttribute alla classe di granulo.
Il posizionamento ottimizzato per le risorse non è disponibile in questa versione di Orleans. Prendere in considerazione l'aggiornamento alla Orleans versione 8.1 o successiva per usare questa funzionalità.
La strategia di posizionamento ottimizzata per le risorse tenta di ottimizzare le risorse del cluster bilanciando le attivazioni granulari tra silo in base all'utilizzo di memoria e CPU disponibile. Assegna pesi alle statistiche di runtime per assegnare priorità a risorse diverse e calcola un punteggio normalizzato per ogni silo. Il silo con il punteggio più basso viene scelto per inserire l'attivazione imminente. La normalizzazione garantisce che ogni proprietà contribuisca proporzionalmente al punteggio complessivo. Regolare i pesi tramite ResourceOptimizedPlacementOptions in base a requisiti e priorità specifici per le diverse risorse.
Inoltre, questa strategia di posizionamento espone un'opzione per creare una preferenza più forte per il silo locale (quello che riceve la richiesta di effettuare un nuovo posizionamento) da selezionare come destinazione per l'attivazione. Controlla questa proprietà tramite la LocalSiloPreferenceMargin proprietà , parte delle opzioni.
Inoltre, un algoritmo adattivoonline fornisce un effetto di smussamento evitando rapide cadute di segnale trasformando il segnale in un processo di decadimento simile a un polinomio. Ciò è particolarmente importante per l'utilizzo della CPU e contribuisce complessivamente a evitare la saturazione delle risorse sui silo, in particolare quelli appena aggiunti.
Questo algoritmo si basa sul posizionamento basato su risorse con il filtro Kalman a doppia modalità cooperativo.
Configurare questa strategia di posizionamento aggiungendo il ResourceOptimizedPlacementAttribute alla classe grain.
Opzioni di posizionamento ottimizzate per le risorse
Configurare la strategia di posizionamento ottimizzata per le risorse usando ResourceOptimizedPlacementOptions:
siloBuilder.Configure<ResourceOptimizedPlacementOptions>(options =>
{
options.CpuUsageWeight = 40;
options.MemoryUsageWeight = 20;
options.AvailableMemoryWeight = 20;
options.MaxAvailableMemoryWeight = 5;
options.ActivationCountWeight = 15;
options.LocalSiloPreferenceMargin = 5;
});
| Opzione | TIPO | Predefinito | Description |
|---|---|---|---|
CpuUsageWeight |
int |
40 | Importanza dell'utilizzo della CPU. I valori più elevati favoriscono i silo con un utilizzo inferiore della CPU. Intervallo valido: 0-100. |
MemoryUsageWeight |
int |
20 | Importanza dell'utilizzo della memoria. I valori più elevati favoriscono i silo con un utilizzo inferiore della memoria. Intervallo valido: 0-100. |
AvailableMemoryWeight |
int |
20 | Importanza della memoria disponibile. I valori più alti favoriscono i silo con una maggiore quantità di memoria disponibile. Intervallo valido: 0-100. |
MaxAvailableMemoryWeight |
int |
5 | Importanza della memoria massima disponibile. I valori più elevati favoriscono i silo con una capacità di memoria fisica superiore. Utile nei cluster con risorse distribuite in modo non uniforme. Intervallo valido: 0-100. |
ActivationCountWeight |
int |
15 | Importanza del numero di attivazioni. I valori più alti prediligeno i silo con meno grani attivi. Intervallo valido: 0-100. |
LocalSiloPreferenceMargin |
int |
5 | Margine per preferire il silo locale. Se impostato su 0, seleziona sempre il silo con un utilizzo più basso. Se impostato su 100, preferisce sempre il silo locale (equivalente a PreferLocalPlacement). Consigliato: 5-10. Intervallo valido: 0-100. |
Annotazioni
I valori di peso non devono arrivare a 100. Orleans li normalizza automaticamente, in modo che rappresentino l'importanza relativa anziché le percentuali assolute.
Posizionamento casuale
Orleans seleziona in modo casuale un server dai server compatibili nel cluster. Per configurare questa strategia di posizionamento, aggiungere alla RandomPlacementAttribute classe grain.
Posizionamento locale
Se il server locale è compatibile, Orleans seleziona il server locale; in caso contrario, seleziona un server casuale. Configurare questa strategia di posizionamento aggiungendo il PreferLocalPlacementAttribute alla classe grain.
Posizionamento basato su hash
Orleans effettua una hash dell'ID del grano trasformandolo in un numero intero non negativo e applica un'operazione modulo con il numero di server compatibili. Seleziona quindi il server corrispondente nell'elenco dei server compatibili ordinati in base all'indirizzo del server. Si noti che questo posizionamento non è garantito che rimanga stabile man mano che l'appartenenza al cluster cambia. In particolare, l'aggiunta, la rimozione o il riavvio dei server può modificare il server selezionato per un ID di granularità specificato. Poiché i granelli posizionati usando questa strategia vengono registrati nella directory granulare, questo cambiamento nella decisione di posizionamento quando le modifiche di appartenenza solitamente non ha un effetto notevole.
Configurare questa strategia di posizionamento aggiungendo il HashBasedPlacementAttribute alla classe grain.
Posizionamento basato sul conteggio delle attivazioni
Questa strategia di posizionamento tenta di inserire nuove attivazioni granulari sul server meno caricato in base al numero di grani occupati di recente. Include un meccanismo in cui tutti i server pubblicano periodicamente il numero totale di attivazioni in tutti gli altri server. Il direttore di posizionamento seleziona quindi un server stimato per avere le attivazioni più poche esaminando il numero di attivazioni segnalate più di recente e stimando il conteggio corrente in base alle attivazioni recenti effettuate dal direttore di posizionamento nel server corrente. Il direttore seleziona casualmente diversi server quando fa questa previsione per evitare che più server separati sovraccarichino lo stesso server. Per impostazione predefinita, due server vengono selezionati in modo casuale, ma questo valore può essere configurato tramite ActivationCountBasedPlacementOptions.
Questo algoritmo si basa sulla tesi The Power of Two Choices in Randomized Load Balancing di Michael David Mitzenmacher. Viene usato anche in Nginx per il bilanciamento del carico distribuito, come descritto nell'articolo NGINX e "Power of Two Choices" Load-Balancing Algorithm.
Configurare questa strategia di posizionamento aggiungendo il ActivationCountBasedPlacementAttribute alla classe grain.
Posizionamento di lavoratore senza stato
Il posizionamento dei lavoratori senza stato è una strategia speciale di posizionamento usata da lavoro senza stato grani. Questo posizionamento funziona quasi identicamente a PreferLocalPlacement, ad eccezione del fatto che ogni server può avere più attivazioni dello stesso grain, e il grain non è registrato nella directory dei grain perché non è necessario.
Configurare questa strategia di posizionamento aggiungendo il StatelessWorkerAttribute alla classe grain.
Collocamento basato su ruoli compartimentati
Si tratta di una strategia di posizionamento deterministica che inserisce grani su silo con un ruolo specifico. Configurare questa strategia di posizionamento aggiungendo il SiloRoleBasedPlacementAttribute alla classe grain.
Scegliere una strategia di posizionamento
La scelta della strategia di posizionamento granulare appropriata, oltre alle impostazioni predefinite Orleans , richiede il monitoraggio e la valutazione. La scelta deve essere basata sulle dimensioni e sulla complessità dell'app, sulle caratteristiche del carico di lavoro e sull'ambiente di distribuzione.
Il posizionamento casuale si basa sulla legge dei numeri grandi, quindi è in genere un buon valore predefinito per carichi imprevedibili distribuiti tra molti grani (10.000 o più).
Il posizionamento basato sul conteggio delle attivazioni ha anche un elemento casuale, che si basa sul principio Power of Two Choices. Si tratta di un algoritmo comunemente usato per il bilanciamento del carico distribuito e viene usato nei servizi di bilanciamento del carico più diffusi. I silo pubblicano di frequente le statistiche di runtime agli altri silo nel cluster, incluso:
- Memoria disponibile, memoria fisica totale e utilizzo della memoria.
- Utilizzo della CPU.
- Numero totale di attivazioni e numero di attivazioni attive recenti.
- Finestra scorrevole delle attivazioni attive negli ultimi secondi, talvolta denominata insieme di lavoro delle attivazioni.
Da queste statistiche vengono attualmente usati solo i conteggi di attivazione per determinare il carico su un determinato silo.
Infine, sperimentare strategie diverse e monitorare le metriche delle prestazioni per determinare la scelta migliore. La selezione della strategia di posizionamento granulare appropriata ottimizza le prestazioni, la scalabilità e l'efficacia delle Orleans app.
Configurare la strategia di posizionamento predefinita
Orleans A partire dalla versione 9.2, Orleans usa il posizionamento ottimizzato per le risorse per impostazione predefinita. Eseguire l'override della strategia di posizionamento predefinita registrando un'implementazione di PlacementStrategy durante la configurazione.
Per ripristinare il comportamento di posizionamento casuale precedente:
siloBuilder.Services.AddSingleton<PlacementStrategy, RandomPlacement>();
Per usare una strategia di posizionamento personalizzata:
siloBuilder.Services.AddSingleton<PlacementStrategy, MyPlacementStrategy>();
Orleans usa il posizionamento casuale a meno che non venga eseguito l'override del valore predefinito. Eseguire l'override della strategia di posizionamento predefinita registrando un'implementazione di PlacementStrategy durante la configurazione:
siloBuilder.Services.AddSingleton<PlacementStrategy, MyPlacementStrategy>();
Orleans usa il posizionamento casuale a meno che non venga eseguito l'override del valore predefinito. Eseguire l'override della strategia di posizionamento predefinita registrando un'implementazione di PlacementStrategy durante la configurazione:
siloBuilder.ConfigureServices(services =>
services.AddSingleton<PlacementStrategy, MyPlacementStrategy>());
Configurare la strategia di posizionamento per un grain
Configurare la strategia di posizionamento per un tipo di grano aggiungendo l'attributo appropriato alla classe del grano. Gli attributi pertinenti sono specificati nelle sezioni precedenti delle strategie di posizionamento .
Strategia di posizionamento personalizzata di esempio
Prima di tutto, definire una classe che implementa l'interfaccia IPlacementDirector , richiedendo un singolo metodo. In questo esempio, si supponga che venga definita una funzione GetSiloNumber che restituisce un numero di silo dato il Guid del grano che sta per essere creato.
public class SamplePlacementStrategyFixedSiloDirector : IPlacementDirector
{
public Task<SiloAddress> OnAddActivation(
PlacementStrategy strategy,
PlacementTarget target,
IPlacementContext context)
{
var silos = context.GetCompatibleSilos(target).OrderBy(s => s).ToArray();
int silo = GetSiloNumber(target.GrainIdentity.PrimaryKey, silos.Length);
return Task.FromResult(silos[silo]);
}
}
Definire quindi due classi per consentire l'assegnazione di classi granulari alla strategia:
[Serializable]
public sealed class SamplePlacementStrategy : PlacementStrategy
{
}
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public sealed class SamplePlacementStrategyAttribute : PlacementAttribute
{
public SamplePlacementStrategyAttribute() :
base(new SamplePlacementStrategy())
{
}
}
Contrassegnare quindi tutte le classi di granularità destinate a usare questa strategia con l'attributo :
[SamplePlacementStrategy]
public class MyGrain : Grain, IMyGrain
{
// ...
}
Registrare infine la strategia durante la compilazione di ISiloHost:
private static async Task<ISiloHost> StartSilo()
{
var builder = new HostBuilder(c =>
{
// normal configuration methods omitted for brevity
c.ConfigureServices(ConfigureServices);
});
var host = builder.Build();
await host.StartAsync();
return host;
}
private static void ConfigureServices(IServiceCollection services)
{
services.AddPlacementDirector<SamplePlacementStrategy, SamplePlacementStrategyFixedSiloDirector>();
}
Per un secondo esempio semplice che mostra un ulteriore uso del contesto di posizionamento, vedere PreferLocalPlacementDirector nel Orleans repository dei sorgenti.
Filtro di posizionamento
Il filtro di posizionamento permette di filtrare quali silo sono idonei per il posizionamento del grano prima che la strategia di posizionamento scelga un bersaglio. Questo approccio funziona in combinazione con le strategie di posizionamento e abilita scenari come:
- Posizionamento compatibile con la zona: posizionare grani su silo nella stessa zona di disponibilità
- Distribuzioni a livelli: indirizzare determinati grani a silo di livello Premium o Standard
- Affinità hardware: Allocare processi ad alto impiego di calcolo su silos con funzionalità specifiche
Orleans fornisce filtri predefiniti basati sui metadati silo, inclusi i filtri di corrispondenza obbligatoria e di corrispondenza preferita. È anche possibile implementare filtri di posizionamento personalizzati.
Per informazioni dettagliate sulla configurazione dei metadati silo, sull'uso di filtri predefiniti e sull'implementazione di filtri personalizzati, vedere Filtro di posizionamento granulare.
Ripartizione dell'attivazione
Il ripartizionamento dell'attivazione è una funzionalità che ottimizza automaticamente la località delle chiamate granulari eseguendo la migrazione delle attivazioni granulari per avvicinarsi ai grani con cui comunicano più frequentemente. Questa funzionalità può migliorare significativamente le prestazioni riducendo gli hop di rete per la comunicazione inter-granulare.
Avvertimento
Il ripartizionamento dell'attivazione è una funzionalità sperimentale. Usare la #pragma warning disable ORLEANSEXP001 direttiva o aggiungere <NoWarn>ORLEANSEXP001</NoWarn> al file di progetto per eliminare l'avviso sperimentale.
Come funziona
Il repartitioner monitora i modelli di comunicazione tra grani e costruisce un grafico di "archi" che rappresenta la frequenza con cui i grani comunicano. Analizza periodicamente questo grafo per identificare le opportunità di miglioramento della località eseguendo la migrazione dei grani ai silos dove si trovano i partner di comunicazione, mantenendo al tempo stesso una distribuzione approssimativamente equilibrata delle attivazioni tra i silos.
Caratteristiche chiave:
- Rilevamento probabilistico: usa una struttura di dati probabilistica per tenere traccia dei collegamenti di comunicazione più pesanti mantenendo la memoria
- Distribuzione bilanciata: tenta di mantenere bilanciati i conteggi delle attivazioni tra silo
- Periodo di recupero: dopo la migrazione dei grani, un silo attende prima di partecipare a un altro round di ripartizione per consentire al sistema di stabilizzarsi
- Filtro di ancoraggio: identifica grani ben partizionati (quelli già vicini ai partner di comunicazione) ed evita di eseguirne la migrazione
Abilitare il ripartizionamento delle attivazioni
Abilitare il ripartizionamento dell'attivazione usando il AddActivationRepartitioner metodo di estensione:
#pragma warning disable ORLEANSEXP001
siloBuilder.AddActivationRepartitioner();
#pragma warning restore ORLEANSEXP001
Opzioni di configurazione
Configurare il ripartitore usando ActivationRepartitionerOptions:
#pragma warning disable ORLEANSEXP001
siloBuilder.AddActivationRepartitioner();
siloBuilder.Configure<ActivationRepartitionerOptions>(options =>
{
options.MaxEdgeCount = 10_000;
options.MinRoundPeriod = TimeSpan.FromMinutes(1);
options.MaxRoundPeriod = TimeSpan.FromMinutes(2);
options.RecoveryPeriod = TimeSpan.FromMinutes(1);
options.AnchoringFilterEnabled = true;
});
#pragma warning restore ORLEANSEXP001
| Opzione | TIPO | Predefinito | Description |
|---|---|---|---|
MaxEdgeCount |
int |
10,000 | Numero massimo di archi (collegamenti di comunicazione granulare) da tenere traccia. I valori più elevati migliorano l'accuratezza, ma usano più memoria. I valori sotto 100 non sono consigliati. |
MaxUnprocessedEdges |
int |
100,000 | Numero massimo di archi non elaborati da memorizzare nel buffer. I bordi meno recenti vengono eliminati quando viene superato un limite. |
MinRoundPeriod |
TimeSpan | 1 minuto | Tempo minimo tra i round di ripartizione. |
MaxRoundPeriod |
TimeSpan | 2 minuti | Tempo massimo tra i round di ripartizione. La tempistica effettiva è casuale tra min e max. Per ottenere risultati ottimali, puntare a ~10 secondi moltiplicato per il numero massimo di silo. |
RecoveryPeriod |
TimeSpan | 1 minuto | Tempo di attesa di un silo dopo un ciclo di ripartizione prima di partecipare a un altro. Deve essere minore o uguale a MinRoundPeriod. |
AnchoringFilterEnabled |
bool |
true |
Consente di tenere traccia dei grani ben partizionati per evitare di eseguirne la migrazione inutilmente. Riduce leggermente l'accuratezza, ma migliora l'efficacia. |
ProbabilisticFilteringMaxAllowedErrorRate |
double |
0,01 | Frequenza massima di errore per il filtro probabilistico (da 0,1% a 1 intervallo di%). Si applica solo quando AnchoringFilterEnabled è true. |
Considerazioni sulle prestazioni
-
Tempo di convergenza: il ripartizionatore migliora gradualmente la localizzazione in più round. Se il sistema non converge abbastanza velocemente, prendere in considerazione l'aumento di
MaxEdgeCount. -
Utilizzo della memoria: valori più elevati
MaxEdgeCountusano più memoria. La struttura dei dati probabilistica consente di limitare l'utilizzo della memoria mantenendo al tempo stesso un'accuratezza ragionevole. -
Stabilità del cluster: evitare valori molto brevi
RecoveryPeriodper evitare una migrazione di granularità eccessiva. - Modelli di carico di lavoro: funziona meglio con i carichi di lavoro con modelli di comunicazione stabili. I carichi di lavoro altamente dinamici possono risultare meno vantaggiosi.
Quando usare il ripartizionamento dell'attivazione
Valutare la possibilità di abilitare il ripartizionamento dell'attivazione quando:
- I grains hanno modelli di comunicazione prevedibili (grain A chiama spesso grain B)
- Si dispone di un cluster multi-silo in cui la latenza di rete tra silo è significativa
- Il benchmarking mostra una velocità effettiva migliorata con la funzionalità abilitata
Evitare il ripartizionamento dell'attivazione quando:
- I grani comunicano con molti grani diversi in modo casuale
- Il tuo cluster è piccolo (2-3 silos), dove il sovraccarico della migrazione potrebbe superare i vantaggi.
- I cereali spesso si disattivano e riattivano, impedendo modelli stabili dall'emergere
Il ripartizionamento dell'attivazione è stato introdotto come funzionalità sperimentale nella Orleans versione 8.2. Per la documentazione più recente su questa funzionalità, vedere la Orleans documentazione 9.0+.
Il ripartizionamento dell'attivazione è disponibile nella Orleans versione 8.2 e successive.
Riequilibrio dell'attivazione
Il ribilanciamento dell'attivazione è una funzionalità a livello di cluster che ridistribuisce automaticamente le attivazioni granulari tra silo per ottimizzare l'utilizzo della memoria e il saldo del numero di attivazioni . A differenza del ripartizionamento dell'attivazione (ottimizzato per la località di comunicazione), il ribilanciamento si concentra sul mantenere i silos di dati equamente caricati in termini di consumo delle risorse.
Avvertimento
Il bilanciamento dell'attivazione è una funzionalità sperimentale. Usare la #pragma warning disable ORLEANSEXP002 direttiva o aggiungere <NoWarn>ORLEANSEXP002</NoWarn> al file di progetto per eliminare l'avviso sperimentale.
Come funziona
Il ribilanciatore funziona come un singolo componente che coordina il ribilanciamento nel cluster.
- Raccolta statistiche: Ogni silo pubblica periodicamente l'utilizzo della memoria e il conteggio delle attivazioni al ribilanciatore.
- Calcolo dell'entropia: il ribilanciatore calcola l'entropia corrente del cluster, una misura della modalità di distribuzione uniforme delle risorse. L'entropia massima significa equilibrio perfetto.
- Decisioni sulla migrazione: quando l'entropia è al di sotto della destinazione, il ribilanciatore identifica i silo "pesanti" (numero elevato di memoria/attivazione) e i silo "leggeri", quindi indica ai silo pesanti di eseguire la migrazione delle attivazioni ai silo leggeri.
- Esecuzione basata su sessioni: il ribilanciamento viene eseguito in sessioni con cicli multipli. Una sessione termina quando il cluster raggiunge un equilibrio accettabile o quando non viene rilevato alcun ulteriore miglioramento.
L'algoritmo considera sia il consumo di memoria che i conteggi di attivazione, usando la media armonica dell'utilizzo della memoria per calcolare la distribuzione di attivazione ideale. Ciò significa che i silo con meno memoria disponibile ricevono meno attivazioni.
Abilitare il ribilanciamento delle attivazioni
Abilitare il ribilanciamento dell'attivazione usando il AddActivationRebalancer metodo di estensione:
#pragma warning disable ORLEANSEXP002
siloBuilder.AddActivationRebalancer();
#pragma warning restore ORLEANSEXP002
Opzioni di configurazione
Configurare il ribilanciamento usando ActivationRebalancerOptions:
#pragma warning disable ORLEANSEXP002
siloBuilder.AddActivationRebalancer();
siloBuilder.Configure<ActivationRebalancerOptions>(options =>
{
options.RebalancerDueTime = TimeSpan.FromSeconds(60);
options.SessionCyclePeriod = TimeSpan.FromSeconds(15);
options.MaxStagnantCycles = 3;
});
#pragma warning restore ORLEANSEXP002
| Opzione | TIPO | Predefinito | Description |
|---|---|---|---|
RebalancerDueTime |
TimeSpan | 60 secondi | Ritardo iniziale prima dell'avvio della prima sessione di ribilanciamento dopo che il cluster si stabilizza. |
SessionCyclePeriod |
TimeSpan | 5 secondi | Tempo tra i cicli di ribilanciamento all'interno di una sessione. Deve essere almeno due volte l'intervallo di pubblicazione delle statistiche. |
MaxStagnantCycles |
int |
3 | Numero massimo di cicli consecutivi senza miglioramenti prima della fine di una sessione. |
EntropyQuantum |
double |
0.0001 | Modifica di entropia minima considerata un miglioramento. I valori più piccoli rendono il ribilanciamento più sensibile. |
AllowedEntropyDeviation |
double |
0.0001 | Soglia di base per la deviazione accettabile dall'entropia massima. Quando la deviazione è inferiore a questa soglia, il cluster viene considerato bilanciato. |
ScaleAllowedEntropyDeviation |
bool |
true |
Indica se ridimensionare dinamicamente la deviazione consentita in base alle dimensioni del cluster e al numero di attivazioni. |
CycleNumberWeight |
double |
0,1 | Fattore di peso per il numero di ciclo nel calcolo della frequenza di migrazione. I valori più elevati accelerano la migrazione nei cicli successivi. |
SiloNumberWeight |
double |
0,1 | Fattore di peso per il numero di silo nel calcolo del tasso di migrazione. I valori più elevati migrano più attivazioni in cluster più grandi. |
ActivationMigrationCountLimit |
int |
Int.ValoreMassimo | Numero massimo di attivazioni di cui eseguire la migrazione in un singolo ciclo. Usare per limitare la frequenza di migrazione. |
Requisiti
- Dimensioni minime del cluster: richiede almeno 2 silo per funzionare.
- Statistiche di memoria: ogni silo deve segnalare l'utilizzo della memoria valido (diverso da zero). Se uno dei silo segnala memoria zero, i cicli di ribilanciamento vengono ignorati.
-
Migrazione granulare: i grani contrassegnati con
[Immovable]o[Immovable(ImmovableKind.Rebalancer)]sono esclusi dal ribilanciamento.
Quando usare il ribilanciamento dell'attivazione
È consigliabile abilitare il ribilanciamento dell'attivazione quando:
- Il tuo cluster ha silos con un utilizzo non uniforme delle risorse (alcuni silos operano a pieno carico mentre altri sono sottoutilizzati)
- Sono presenti attivazioni granulari a esecuzione prolungata che possono accumularsi in modo non uniforme nel tempo
- I modelli di carico di lavoro causano squilibri di attivazione che le strategie di posizionamento da sole non possono affrontare
Evitare il ribilanciamento dell'attivazione quando:
- Il tuo cluster è piccolo (2-3 silos), il che significa che il sovraccarico potrebbe superare i vantaggi.
- I grani hanno durate molto brevi e disattivano rapidamente
- Stai già utilizzando il ripartizionamento delle attivazioni e desideri evitare migrazioni in conflitto, sebbene le due funzionalità possano coesistere, poiché il ripartizionatore regola il proprio comportamento in base ai report del ribilanciatore.
Confronto con il ripartizionamento dell'attivazione
| Caratteristica / Funzionalità | Ribilanciamento dell'attivazione | Ripartizione dell'attivazione |
|---|---|---|
| Ottimizza per | Bilanciamento del conteggio di memoria e attivazione | Località di comunicazione |
| Scope | Coordinamento a livello di cluster | Coordinamento tra silos a coppie |
| ID sperimentale | ORLEANSEXP002 |
ORLEANSEXP001 |
| Trigger di migrazione | Squilibrio delle risorse | Modelli di comunicazione |
Entrambe le funzionalità possono essere abilitate contemporaneamente. Il ripartizionatore regola automaticamente la tolleranza in base allo squilibrio del cluster segnalato dal ribilanciatore.
Il ribilanciamento dell'attivazione è disponibile dalla Orleans versione 10.0 in poi.