Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Orleans bir grainde çağrı yapıldığında, isteği işlemek için kümede bir sunucuda bu graine ait bir örneğin bellekte bulunmasını sağlar. Kümede tahıl şu anda etkin değilse, Orleans tahılı etkinleştirmek için bir sunucu seçer. Bu işleme tahıl yerleştirme denir. Yerleştirme ayrıca yükü dengelemenin bir yoludur Orleans : meşgul dilimlerin eşit şekilde yerleştirilmesi, iş yükünün kümeye dağıt olmasına yardımcı olur.
Yerleştirme işlemi Orleans'da tamamen yapılandırılabilir. Kullanıma hazır seçenekler arasında rastgele, yerel tercihli ve yük tabanlı yerleştirme ilkelerinden birini seçin veya özel mantık yapılandırın. Bu, tanelerin nerede oluşturulduğuna karar verirken tam esneklik sağlar. Örneğin, çalışma birimlerini, üzerinde çalışması gereken kaynaklara ya da iletişim kurulan diğer çalışma birimlerine yakın bir sunucuya yerleştirin.
Uyarı
9.2'den Orleans başlayarak, varsayılan yerleştirme stratejisi rastgele yerleştirmedenkaynak için iyileştirilmiş yerleştirmeye değiştirildi. Bu, silolar arasında CPU ve bellek kullanımına göre daha iyi yük dağıtımı sağlar. Önceki rastgele yerleştirme davranışına ihtiyacınız varsa, bunu Varsayılan yerleştirme stratejisini yapılandırma başlığında açıklandığı gibi açıkça yapılandırın.
Varsayılan olarak, Orleans rastgele uyumlu bir sunucu seçer.
Yerleştirme stratejisini Orleans genel olarak veya her bir grain sınıfı için yapılandırın.
Kaynak-optimizasyonlu yerleştirme (varsayılan)
Uyarı
9.2'den itibaren, varsayılan yerleştirme stratejisi kaynak açısından optimize edilmiş yerleştirmedir. Seçenekleri özelleştirmek istemediğiniz sürece açıkça yapılandırmanız gerekmez.
Kaynak-uyumlu yerleştirmeyi kullanmak için ResourceOptimizedPlacementAttribute öğesini tanecik sınıfınıza ekleyin.
Bu Orleans sürümünde kaynak-optimizasyonlu yerleştirme kullanılamaz. Bu özelliği kullanmak için Orleans 8.1 veya sonraki bir sürüme yükseltmeyi göz önünde bulundurun.
Kaynakları optimize edilmiş yerleştirme stratejisi, bellek ve CPU kullanımı göz önüne alınarak silolar arasında görev etkinleştirmelerini dengeleyerek küme kaynaklarını optimize etmeye çalışır. Farklı kaynaklara öncelik vermek için çalışma zamanı istatistiklerine ağırlıklar atar ve her silo için normalleştirilmiş bir puan hesaplar. Yaklaşan etkinleştirmeyi yerleştirmek için en düşük puana sahip silo seçilir. Normalleştirme, her özelliğin genel puana orantılı olarak katkıda bulunabilmesini sağlar. Farklı kaynaklar için belirli gereksinimlere ve önceliklere göre ağırlıkları ResourceOptimizedPlacementOptions ayarlayın.
Ayrıca bu yerleştirme stratejisi, yeni yerleştirme isteği alan yerel silonun etkinleştirme için hedef olarak seçilmesi konusunda daha güçlü bir tercih oluşturma seçeneği sunar. Bunu seçeneklerin LocalSiloPreferenceMargin bir parçası olan özelliği aracılığıyla denetleyin.
Ayrıca , çevrimiçi, uyarlamalı bir algoritma, sinyali polinom benzeri bir çürüme sürecine dönüştürerek hızlı sinyal düşüşlerini önleyerek bir düzeltme etkisi sağlar. Bu özellikle CPU kullanımı için önemlidir ve silolarda, özellikle yeni katılanlarda kaynak doygunluğunu önlemeye katkıda bulunur.
Bu algoritma, işbirliğine dayalı çift modlu Kalman filtrelemesi ile Kaynak tabanlı yerleştirmeyi temel alır.
grain sınıfına ResourceOptimizedPlacementAttribute ekleyerek bu yerleştirme stratejisini yapılandırın.
Kaynakların optimize edildiği yerleştirme seçenekleri
ResourceOptimizedPlacementOptions kullanarak kaynakları optimize eden yerleştirme stratejisini yapılandırın.
siloBuilder.Configure<ResourceOptimizedPlacementOptions>(options =>
{
options.CpuUsageWeight = 40;
options.MemoryUsageWeight = 20;
options.AvailableMemoryWeight = 20;
options.MaxAvailableMemoryWeight = 5;
options.ActivationCountWeight = 15;
options.LocalSiloPreferenceMargin = 5;
});
| Seçenek | Türü | Varsayılan | Description |
|---|---|---|---|
CpuUsageWeight |
int |
40 | CPU kullanımının önemi. Daha yüksek değerler, daha düşük CPU kullanımına sahip siloları tercih eder. Geçerli aralık: 0-100. |
MemoryUsageWeight |
int |
20 | Bellek kullanımının önemi. Daha yüksek değerler, daha düşük bellek kullanımına sahip siloları tercih eder. Geçerli aralık: 0-100. |
AvailableMemoryWeight |
int |
20 | Kullanılabilir belleğin önemi. Daha yüksek değerler, daha fazla kullanılabilir belleğe sahip siloları tercih eder. Geçerli aralık: 0-100. |
MaxAvailableMemoryWeight |
int |
5 | Kullanılabilir bellek üst sınırının önemi. Daha yüksek değerler, daha yüksek fiziksel bellek kapasitesine sahip siloları tercih eder. Eşit dağıtılmamış kaynaklara sahip kümelerde kullanışlıdır. Geçerli aralık: 0-100. |
ActivationCountWeight |
int |
15 | Etkinleştirme sayısının önemi. Daha yüksek değerler, daha az aktif tane içeren siloları tercih eder. Geçerli aralık: 0-100. |
LocalSiloPreferenceMargin |
int |
5 | Yerel siloyu tercih etme payı. 0 olarak ayarlandığında, her zaman en düşük kullanıma sahip siloyu seçer. 100 olarak ayarlandığında, her zaman yerel siloyu (eşdeğeri PreferLocalPlacement) tercih eder. Önerilen: 5-10. Geçerli aralık: 0-100. |
Uyarı
Ağırlık değerlerinin 100 toplamına ulaşması gerekmez. Orleans bunları otomatik olarak normalleştirir, böylece mutlak yüzdeler yerine göreli önem derecesini temsil eder.
Rastgele yerleştirme
Orleans kümedeki uyumlu sunuculardan rastgele bir sunucu seçer. Bu yerleştirme stratejisini yapılandırmak için RandomPlacementAttribute öğesini grain sınıfına ekleyin.
Yerel yerleştirme
Yerel sunucu uyumluysa yerel Orleans sunucuyu seçer; aksi takdirde rastgele bir sunucu seçer. grain sınıfına PreferLocalPlacementAttribute ekleyerek bu yerleştirme stratejisini yapılandırın.
Hash tabanlı yerleştirme
Orleans , tanecik kimliğini negatif olmayan bir tamsayıya karmalar ve uyumlu sunucu sayısıyla bir modül işlemi uygular. Ardından, sunucu adresine göre sıralanmış uyumlu sunucular listesinden ilgili sunucuyu seçer. Küme üyeliği değiştikçe bu yerleşimin kararlı kalacağı garanti edilmez. Özellikle, sunucuları eklemek, kaldırmak veya yeniden başlatmak belirli bir tanecik kimliği için seçilen sunucuyu değiştirebilir. Bu strateji kullanılarak yerleştirilen tanecikler grain dizinine kaydedildiğinden, üyelik değişiklikleri nedeniyle yerleştirme kararındaki bu değişikliğin genellikle fark edilebilir bir etkisi olmaz.
grain sınıfına HashBasedPlacementAttribute ekleyerek bu yerleştirme stratejisini yapılandırın.
Etkinleştirme sayısına dayalı yerleştirme
Bu yerleştirme stratejisi, son zamanlarda meşgul olan tanelerin sayısına bağlı olarak en az yük altındaki sunucuya yeni tanelerin etkinleştirmelerini yerleştirmeyi dener. Tüm sunucuların toplam etkinleştirme sayısını diğer tüm sunuculara düzenli aralıklarla yayımladığı bir mekanizma içerir. Yerleştirme yöneticisi daha sonra en son bildirilen etkinleştirme sayısını inceleyerek ve geçerli sunucuda yerleştirme yöneticisi tarafından yapılan son etkinleştirmelere göre geçerli sayıyı tahmin ederek en az etkinleştirmeye sahip olduğu tahmin edilen bir sunucuyu seçer. Yönetici, birden çok ayrı sunucunun aynı sunucuyu aşırı yüklemesini önlemek için bu tahminde bulunurken rastgele birkaç sunucu seçer. Varsayılan olarak, iki sunucu rastgele seçilir, ancak bu değer aracılığıyla ActivationCountBasedPlacementOptionsyapılandırılabilir.
Bu algoritma, Michael David Mitzenmacher'ın Rastgele Yük Dengelemede İki Seçeneğin Gücü tezini temel alır. Ayrıca NGINX ve "İki Seçeneğin Gücü" Load-Balancing Algoritması makalesinde açıklandığı gibi dağıtılmış yük dengeleme için Nginx'te de kullanılır.
grain sınıfına ActivationCountBasedPlacementAttribute ekleyerek bu yerleştirme stratejisini yapılandırın.
Durumsuz çalışan yerleştirme
Durum bilgisi olmayan çalışan yerleştirme, durum bilgisi olmayan çalışan parçacıkları tarafından kullanılan özel bir yerleştirme stratejisidir. Bu yerleştirme, PreferLocalPlacement ile neredeyse aynı şekilde çalışır, ancak her sunucunun aynı tanecikten birden çok etkinleştirmesi olabilir ve gerekli olmadığından tanecik dizinine kaydedilmez.
grain sınıfına StatelessWorkerAttribute ekleyerek bu yerleştirme stratejisini yapılandırın.
Silo rolüne dayalı yerleştirme
Bu, taneleri belirli bir role sahip silolara yerleştiren deterministik bir yerleştirme stratejisidir. grain sınıfına SiloRoleBasedPlacementAttribute ekleyerek bu yerleştirme stratejisini yapılandırın.
Yerleştirme stratejisi seçme
Varsayılan Orleans ayarlarının ötesine geçmek için uygun taneli yerleştirme stratejisini seçmek izleme ve değerlendirme gerektirir. Seçim, uygulamanın boyutuna ve karmaşıklığına, iş yükü özelliklerine ve dağıtım ortamına dayalı olmalıdır.
Rastgele yerleştirme, Büyük Sayılar Yasası'na dayanır, bu nedenle birçok taneye (10.000 veya daha fazla) yayılan öngörülemeyen yükler için genellikle iyi bir varsayılan seçimdir.
Etkinleştirme sayısı tabanlı yerleştirme, İki Seçimin Gücü ilkesini kullanan rastgele bir öğeye de sahiptir. Bu, dağıtılmış yük dengeleme için yaygın olarak kullanılan bir algoritmadır ve popüler yük dengeleyicilerde kullanılır. Silolar, kümedeki diğer silolara sık sık çalışma zamanı istatistikleri yayımlar, örneğin:
- Kullanılabilir bellek, toplam fiziksel bellek ve bellek kullanımı.
- CPU kullanımı.
- Toplam etkinleştirme sayısı ve son etkin etkinleştirme sayısı.
- Son birkaç saniye içinde etkin olan ve bazen etkinleştirme çalışma kümesi olarak da adlandırılan kayan etkinleştirme penceresi.
Bu istatistiklerden, şu anda belirli bir silo üzerindeki yükü belirlemek için yalnızca etkinleştirme sayıları kullanılmaktadır.
Sonuç olarak, farklı stratejilerle denemeler yapın ve en uygunu belirlemek için performans ölçümlerini izleyin. Doğru gren yerleştirme stratejisinin seçilmesi, uygulamaların performansını, ölçeklenebilirliğini ve uygun maliyetliliğini Orleans iyileştirir.
Varsayılan yerleştirme stratejisini yapılandırma
9.2'den itibaren, Orleans varsayılan olarak kaynak optimizasyonlu yerleştirmeyi kullanır. Yapılandırma sırasında PlacementStrategy uygulaması kaydedilerek varsayılan yerleştirme stratejisi geçersiz kılınabilir.
Önceki rastgele yerleştirme davranışına geri dönmek için:
siloBuilder.Services.AddSingleton<PlacementStrategy, RandomPlacement>();
Özel yerleştirme stratejisi kullanmak için:
siloBuilder.Services.AddSingleton<PlacementStrategy, MyPlacementStrategy>();
Orleans varsayılan geçersiz kılınmadıkça rastgele yerleştirme kullanır. Yapılandırma sırasında PlacementStrategy için bir uygulama kaydederek varsayılan yerleştirme stratejisini geçersiz kılın.
siloBuilder.Services.AddSingleton<PlacementStrategy, MyPlacementStrategy>();
Orleans varsayılan geçersiz kılınmadıkça rastgele yerleştirme kullanır. Yapılandırma sırasında PlacementStrategy için bir uygulama kaydederek varsayılan yerleştirme stratejisini geçersiz kılın.
siloBuilder.ConfigureServices(services =>
services.AddSingleton<PlacementStrategy, MyPlacementStrategy>());
Bir dilim için yerleştirme stratejisini yapılandırma
Grain sınıfına uygun nitelik ekleyerek bir tahıl türü için yerleştirme stratejisini yapılandırın. İlgili öznitelikler, yukarıdaki yerleştirme stratejileri bölümlerinde belirtilir.
Örnek özel yerleştirme stratejisi
İlk olarak, tek bir yöntem gerektiren arabirimi uygulayan IPlacementDirector bir sınıf tanımlayın. Bu örnekte, oluşturulmak üzere olan taneciğin GetSiloNumber'i verildiğinde bir silo numarası döndüren bir işlevin Guid tanımlandığını varsayalım.
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]);
}
}
Ardından, stratejiye tanecik sınıfları atamaya izin vermek için iki sınıf tanımlayın:
[Serializable]
public sealed class SamplePlacementStrategy : PlacementStrategy
{
}
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public sealed class SamplePlacementStrategyAttribute : PlacementAttribute
{
public SamplePlacementStrategyAttribute() :
base(new SamplePlacementStrategy())
{
}
}
Ardından, bu stratejiyi kullanmaya yönelik tüm tanecik sınıflarını şu öznitelikle etiketleyin:
[SamplePlacementStrategy]
public class MyGrain : Grain, IMyGrain
{
// ...
}
Son olarak, ISiloHost oluştururken stratejiyi kaydedin.
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>();
}
Konumlandırma bağlamının daha fazla kullanımını gösteren basit bir ikinci örnek için PreferLocalPlacementDirectorkaynak deposundaki Orleans bölümüne bakın.
Yerleştirme filtreleme
Yerleştirme filtrelemesi, yerleştirme stratejisi bir hedef seçmeden önce hangi siloların tahıl yerleştirme için uygun olduğunu filtrelemenizi sağlar. Bu, yerleştirme stratejileriyle birlikte çalışır ve aşağıdaki gibi senaryolara olanak tanır:
- Bölge farkındalığı ile yerleştirme: Taneleri aynı kullanılabilirlik bölgesindeki silolara yerleştirin
- Katmanlı dağıtımlar: Belirli dilimleri premium veya standart katman silolarına yönlendirme
- Donanım bağımlılığı: Belirli özelliklere sahip silolara işlem yoğunluğuna sahip taneler yerleştirin
Orleans gerekli eşleşme ve tercih edilen eşleşme filtreleme dahil olmak üzere silo meta verilerini temel alan yerleşik filtreler sağlar. Özel yerleştirme filtreleri de uygulayabilirsiniz.
Silo meta verilerini yapılandırma, yerleşik filtreleri kullanma ve özel filtreler uygulama hakkında ayrıntılı bilgi için bkz. Taneli yerleştirme filtreleme.
Etkinleştirme yeniden bölümleme
Etkinleştirme yeniden bölümleme, tahıl etkinleştirmelerini en sık iletişim kurdukları diğer taneciklere daha yakın bir konuma taşıyarak tahıl çağrısı yerelliğini otomatik olarak optimize eden bir özelliktir. Bu özellik, hub'lar arası iletişim için ağ atlamalarını azaltarak performansı önemli ölçüde geliştirebilir.
Uyarı
Etkinleştirme yeniden bölümleme deneysel bir özelliktir. Deneysel uyarıyı engellemek için yönergesini #pragma warning disable ORLEANSEXP001 kullanın veya proje dosyanıza ekleyin <NoWarn>ORLEANSEXP001</NoWarn> .
Nasıl çalışır?
Yeniden bölümleyici, tanecikler arası iletişim desenlerini izler ve taneciklerin ne sıklıkta iletişim kuracaklarını gösteren bir "kenarlar" grafiği oluşturur. Düzenli aralıklarla bu grafiği analiz ederek taneleri, iletişim ortaklarının bulunduğu silolara taşıyarak yerel etkileşimi artırma fırsatlarını tespit eder ve etkinliklerin silolar arasında yaklaşık eşit dağılımını korur.
Temel özellikler:
- Olasılık izleme: Bellek tasarrufu yaparken en ağır iletişim bağlantılarını izlemek için olasılıksal bir veri yapısı kullanır
- Dengeli dağıtım: Etkinleştirme sayılarını silolar arasında dengeli tutmaya yönelik girişimler
- Geri kazanım süresi: Birimler taşındıktan veya yer değiştirildikten sonra, sistemin kararlı hale gelmesini sağlamak için bir silo başka bir yeniden bölüştürme turuna katılmadan önce bekler.
- Tutturma filtresi: İyi bölümlenmiş tanecikleri (iletişim ortaklarına zaten yakın olanlar) tanımlar ve bunların taşınmasını önler
Aktivasyon bölümlenmesini etkinleştir
AddActivationRepartitioner uzantı yöntemini kullanarak etkinleştirme bölümlemesini yeniden yapılandırmayı etkinleştirin.
#pragma warning disable ORLEANSEXP001
siloBuilder.AddActivationRepartitioner();
#pragma warning restore ORLEANSEXP001
Yapılandırma seçenekleri
Yeniden bölümleyiciyi ActivationRepartitionerOptions kullanarak yapılandırın.
#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
| Seçenek | Türü | Varsayılan | Description |
|---|---|---|---|
MaxEdgeCount |
int |
10.000 | Takip edilecek maksimum kenar sayısı (tane iletişim bağlantıları). Daha yüksek değerler doğruluğu artırırken bellek tüketimini artırır. 100'in altındaki değerler önerilmez. |
MaxUnprocessedEdges |
int |
100,000 | Arabelleğe alınacak işlenmemiş kenar sayısı üst sınırı. Aşıldığında en eski kenarlar atılır. |
MinRoundPeriod |
TimeSpan | 1 dakika | Yeniden bölümleme işlemleri arasındaki en kısa süre. |
MaxRoundPeriod |
TimeSpan | 2 dakika | Yeniden bölümleme döngüleri arasındaki maksimum süre. Gerçek zamanlama min ve max arasında rastgeledir. En iyi sonuçlar için maksimum silo sayısıyla çarpılmış yaklaşık 10 saniyeyi hedefleyin. |
RecoveryPeriod |
TimeSpan | 1 dakika | Bir silo, yeniden bölümleme turundan sonra başka bir tura katılmadan önce bekler. değerinden küçük veya eşit MinRoundPeriodolmalıdır. |
AnchoringFilterEnabled |
bool |
true |
İyi bölümlenmiş taneciklerin gereksiz yere taşınmalarını önlemek için izlenmelerini sağlar. Doğruluğu biraz azaltır ancak verimliliği artırır. |
ProbabilisticFilteringMaxAllowedErrorRate |
double |
0,01 | Olası filtre için en yüksek hata oranı (0,1% ile 1% aralığı). Yalnızca AnchoringFilterEnabledtrue olduğunda geçerlidir. |
Performansla ilgili dikkat edilmesi gerekenler
-
Yakınsama süresi: Yeniden bölümleyici, birden çok turda yavaş yavaş yerelliği geliştirir. Sistem yeterince hızlı yakınsamıyorsa,
MaxEdgeCountdeğerini artırmayı düşünün. -
Bellek kullanımı: Daha yüksek
MaxEdgeCountdeğerler daha fazla bellek tüketir. Olasılıksal veri yapısı, makul doğruluğu korurken bellek kullanımını sınırlamaya yardımcı olur. -
Küme kararlılığı: Aşırı tanecik göçünü önlemek için çok kısa
RecoveryPerioddeğerlerden kaçının. - İş yükü desenleri: En iyi şekilde kararlı iletişim desenlerine sahip iş yükleriyle çalışır. Yüksek düzeyde dinamik iş yükleri daha az avantaj görebilir.
Etkinleştirme yeniden bölümlendirme ne zaman kullanılır?
Aşağıdaki durumlarda etkinleştirme yeniden bölümleme özelliğini etkinleştirmeyi göz önünde bulundurun:
- Tanelerinizin tahmin edilebilir iletişim desenleri vardır (A taneleri sık sık B dilimini çağırır)
- Silolar arasındaki ağ gecikme süresinin önemli olduğu çok silolu bir kümeniz var
- Karşılaştırma özelliği etkinken geliştirilmiş aktarım hızını gösterir
Etkinleştirmenin yeniden bölümlenmesinden kaçının:
- Tahıllar birçok farklı tanecikle rastgele iletişim kurar
- Kümeniz küçük (2-3 silo) ve geçiş yükü avantajlardan daha ağır basabilir
- Taneleriniz sık sık devre dışı bırakılıp yeniden etkinleştirildiğinden kararlı desenlerin ortaya çıkmasını önler
Aktivasyon yeniden bölümlendirme, Orleans 8.2'de deneysel bir özellik olarak tanıtıldı. Bu özellikle ilgili en son belgeler için 9.0+ belgelerine bakın Orleans .
Etkinleştirme yeniden bölümleme 8.2 ve sonraki sürümlerde Orleans kullanılabilir.
Etkinleştirme dengesinin yeniden kurulması
Etkinleştirme yeniden dengelemesi, hem bellek kullanımını hem de etkinleştirme sayısı bakiyesini iyileştirmek için küme genelindeki etkinleştirmeleri silolar arasında otomatik olarak yeniden dağıtan bir özelliktir. Etkinleştirme yeniden bölümlemesinin aksine (iletişim yerelliği için iyileştirilmiştir), yeniden dengeleyici siloların kaynak tüketimi açısından eşit bir şekilde yüklenmesine odaklanır.
Uyarı
Etkinleştirme yeniden dengelemesi deneysel bir özelliktir. Deneysel uyarıyı engellemek için yönergesini #pragma warning disable ORLEANSEXP002 kullanın veya proje dosyanıza ekleyin <NoWarn>ORLEANSEXP002</NoWarn> .
Nasıl çalışır?
Etkinleştirme yeniden dengeleyicisi, küme genelinde yeniden dengelemeyi koordine eden tekil bir bileşen olarak çalışır.
- İstatistik toplama: Her silo düzenli aralıklarla bellek kullanımını ve etkinleştirme sayısını yeniden dengeleyiciye yayımlar.
- Entropi hesaplaması: Yeniden dengeleyici, kümenin geçerli "entropisini" hesaplar; bu, kaynakların ne kadar eşit dağıtılmış olduğunu gösteren bir ölçüdür. Maksimum entropi mükemmel denge anlamına gelir.
- Geçiş kararları: Entropi hedefin altında olduğunda, yeniden dengeleyici "ağır" siloları (yüksek bellek/etkinleştirme sayısı) ve "hafif" siloları tanımlar, ardından ağır silolara etkinleştirmeleri hafif silolara geçirmelerini bildirir.
- Oturum tabanlı yürütme: Yeniden dengeleme, birden çok döngüye sahip oturumlarda çalışır. Bir oturum, küme kabul edilebilir bir dengeye ulaştığında veya başka bir iyileştirme algılanmıyorsa sona erer.
Algoritma, ideal etkinleştirme dağıtımını hesaplamak için bellek kullanımının harmonik ortalamasını kullanarak hem bellek tüketimini hem de etkinleştirme sayılarını dikkate alır. Bu, daha az kullanılabilir belleğe sahip siloların daha az etkinleştirme aldığı anlamına gelir.
Yeniden dengeleme etkinliğini açma
Uzantı yöntemini kullanarak etkinleştirme yeniden dengelemeyi AddActivationRebalancer etkinleştirin:
#pragma warning disable ORLEANSEXP002
siloBuilder.AddActivationRebalancer();
#pragma warning restore ORLEANSEXP002
Yapılandırma seçenekleri
kullanarak ActivationRebalancerOptionsyeniden dengeleyiciyi yapılandırın:
#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
| Seçenek | Türü | Varsayılan | Description |
|---|---|---|---|
RebalancerDueTime |
TimeSpan | 60 saniye | Küme dengelendikten sonra ilk yeniden dengeleme oturumu başlamadan önceki başlangıç gecikmesi. |
SessionCyclePeriod |
TimeSpan | 15 saniye | Oturum içindeki döngüleri yeniden dengeleme arasındaki süre. İstatistik yayımlama aralığının en az iki katı olmalıdır. |
MaxStagnantCycles |
int |
3 | Bir oturum bitmeden önce, iyileştirme yapılmadan art arda geçen en fazla döngü sayısı. |
EntropyQuantum |
double |
0.0001 | Minimum entropi değişikliği bir gelişme olarak kabul edilir. Daha küçük değerler, yeniden dengeleyiciyi daha hassas hale getirir. |
AllowedEntropyDeviation |
double |
0.0001 | Maksimum entropiden kabul edilebilir sapma için temel eşik. Sapma bu eşiğin altında olduğunda küme dengeli olarak kabul edilir. |
ScaleAllowedEntropyDeviation |
bool |
true |
küme boyutuna ve etkinleştirme sayısına göre izin verilen sapmanın dinamik olarak ölçeklendirilip ölçeklendirilmeyeceği. |
CycleNumberWeight |
double |
0,1 | Geçiş hızı hesaplamasında döngü sayısı için ağırlık faktörü. Daha yüksek değerler sonraki döngülerde geçişi hızlandırır. |
SiloNumberWeight |
double |
0,1 | Geçiş hızı hesaplamasında silo sayısı için ağırlık faktörü. Daha yüksek değerler, daha büyük kümelere daha fazla etkinleştirmenin taşınmasına neden olur. |
ActivationMigrationCountLimit |
int |
Int. Maxvalue | Tek bir döngüde taşınacak en fazla etkinleştirme sayısı. Geçiş hızını kısıtlamak için kullanın. |
Gereksinimler
- En düşük küme boyutu: Çalışması için en az 2 silo gerekir.
- Bellek istatistikleri: Her silo geçerli (sıfır olmayan) bellek kullanımını raporlamalıdır. Herhangi bir silo sıfır bellek bildirirse, yeniden dengeleme döngüleri atlanır.
-
Tahıl taşınabilirliği: ile
[Immovable]veya[Immovable(ImmovableKind.Rebalancer)]işaretlenmiş tahıllar yeniden dengelemeden hariç tutulmuştur.
Etkinleştirme yeniden dengelemesini ne zaman kullanmalısınız?
Aşağıdaki durumlarda etkinleştirme yeniden dengelemesini etkinleştirmeyi göz önünde bulundurun:
- Kümenizde eşit olmayan kaynak kullanımına sahip silolar var (bazı silolar sık çalışırken diğerleri az kullanılıyor)
- Zamana yayılarak eşit olmayan bir şekilde birikim yapabilecek uzun süreli tanecik etkinleştirmeleriniz var.
- İş yükü düzenleriniz, yalnızca yerleştirme stratejileriyle çözülemeyen etkinleştirme dengesizliklerine neden oluyor.
Aktivasyon dengesizleştirmesinden kaçının:
- Kümeniz küçük (2-3 silo) ve ek yük avantajlardan daha ağır basabilir
- Tahılların ömrü çok kısadır ve hızlı bir şekilde devre dışı bırakılır
- Etkinleştirme yeniden bölümlemesini zaten kullanıyorsunuz ve çakışmaya neden olan geçişleri önlemek istiyorsunuz; ancak yeniden bölümleyici yeniden dengeleyici raporlarına göre davranışını ayarladığı için iki özellik bir arada bulunabilir
Etkinleştirme yeniden bölümleme ile karşılaştırma
| Özellik | Etkinleştirme Yeniden Dengeleme | Aktivasyon Yeniden Bölümleme |
|---|---|---|
| İyileştirmeler: | Bellek ve etkinleştirme sayısı dengesi | İletişim konumu |
| Scope | Küme genelinde koordinasyon | Çiftler halinde silo koordinasyonu |
| Deneysel Kimlik | ORLEANSEXP002 |
ORLEANSEXP001 |
| Geçiş tetikleyicisi | Kaynak dengesizliği | İletişim desenleri |
Her iki özellik de aynı anda etkinleştirilebilir. Yeniden bölümleyici, yeniden dengeleyici tarafından bildirilen küme dengesizliğini temel alarak toleransını otomatik olarak ayarlar.
Etkinleştirme yeniden dengelemesi 10.0 ve üzeri sürümlerde Orleans kullanılabilir.