Durum bilgisi olan güvenilir hizmetleri yapılandırma
Güvenilir hizmetler için iki yapılandırma ayarı kümesi vardır. Kümelerden biri kümedeki tüm güvenilir hizmetler için genel, diğer küme ise belirli bir güvenilir hizmete özeldir.
Genel Yapılandırma
Genel güvenilir hizmet yapılandırması, kümenin küme bildiriminde KtlLogger bölümü altında belirtilir. Paylaşılan günlük konumunun ve boyutunun yanı sıra günlükçü tarafından kullanılan genel bellek sınırlarının yapılandırılmasına izin verir. Küme bildirimi, kümedeki tüm düğümlere ve hizmetlere uygulanan ayarları ve yapılandırmaları barındıran tek bir XML dosyasıdır. Dosya genellikle ClusterManifest.xml olarak adlandırılır. Get-ServiceFabricClusterManifest powershell komutunu kullanarak kümenizin küme bildirimini görebilirsiniz.
Yapılandırma adları
Veri Akışı Adı | Unit | Default value | Açıklamalar |
---|---|---|---|
WriteBufferMemoryPoolMinimumInKB | Kilobayt | 8388608 | Günlükçü yazma arabellek bellek havuzu için çekirdek modunda ayrılacak en az KB sayısı. Bu bellek havuzu diske yazmadan önce durum bilgilerini önbelleğe almak için kullanılır. |
WriteBufferMemoryPoolMaximumInKB | Kilobayt | Sınırsız | Günlükçü yazma arabellek bellek havuzunun büyüyebileceği en büyük boyut. |
SharedLogId | GUID | "" | Hizmet yapılandırmasında SharedLogId değerini belirtmeyen kümedeki tüm düğümlerde tüm güvenilir hizmetler tarafından kullanılan varsayılan paylaşılan günlük dosyasını tanımlamak için kullanılacak benzersiz bir GUID belirtir. SharedLogId belirtilirse SharedLogPath de belirtilmelidir. |
SharedLogPath | Tam yol adı | "" | Paylaşılan günlük dosyasının, hizmete özgü yapılandırmalarında SharedLogPath'i belirtmeyen kümedeki tüm düğümlerde tüm güvenilir hizmetler tarafından kullanıldığı tam yolu belirtir. Ancak, SharedLogPath belirtilirse SharedLogId de belirtilmelidir. |
SharedLogSizeInMB | Megabayt | 8192 | Paylaşılan günlük için statik olarak ayrılacak MB disk alanı sayısını belirtir. Değer 2048 veya daha büyük olmalıdır. |
Azure ARM'de veya şirket içi JSON şablonunda aşağıdaki örnekte, durum bilgisi olan hizmetler için güvenilir koleksiyonları desteklemek üzere oluşturulan paylaşılan işlem günlüğünün nasıl değiştirildiğini görebilirsiniz.
"fabricSettings": [{
"name": "KtlLogger",
"parameters": [{
"name": "SharedLogSizeInMB",
"value": "4096"
}]
}]
Örnek yerel geliştirici kümesi bildirim bölümü
Bunu yerel geliştirme ortamınızda değiştirmek istiyorsanız, yerel clustermanifest.xml dosyasını düzenlemeniz gerekir.
<Section Name="KtlLogger">
<Parameter Name="SharedLogSizeInMB" Value="4096"/>
<Parameter Name="WriteBufferMemoryPoolMinimumInKB" Value="8192" />
<Parameter Name="WriteBufferMemoryPoolMaximumInKB" Value="8192" />
<Parameter Name="SharedLogId" Value="{7668BB54-FE9C-48ed-81AC-FF89E60ED2EF}"/>
<Parameter Name="SharedLogPath" Value="f:\SharedLog.Log"/>
</Section>
Açıklamalar
Günlükçü, güvenilir hizmet çoğaltmasıyla ilişkili ayrılmış günlüğe yazılmadan önce önbelleğe alma durumu verileri için bir düğümdeki tüm güvenilir hizmetler için kullanılabilen, disk belleği olmayan çekirdek belleğinden ayrılmış genel bir bellek havuzuna sahiptir. Havuz boyutu WriteBufferMemoryPoolMinimumInKB ve WriteBufferMemoryPoolMaximumInKB ayarları tarafından denetlenir. WriteBufferMemoryPoolMinimumInKB hem bu bellek havuzunun başlangıç boyutunu hem de bellek havuzunun küçülebileceği en düşük boyutu belirtir. WriteBufferMemoryPoolMaximumInKB, bellek havuzunun büyüyebileceği en yüksek boyutdur. Açılan her güvenilir hizmet çoğaltması, bellek havuzunun boyutunu WriteBufferMemoryPoolMaximumInKB'ye kadar belirlenen bir sistem tarafından artırabilir. Bellek havuzundan bellek için kullanılabilir olandan daha fazla talep varsa, bellek kullanılabilir olana kadar bellek istekleri geciktirilir. Bu nedenle, yazma arabelleği bellek havuzu belirli bir yapılandırma için çok küçükse performans olumsuz etkilenebilir.
SharedLogId ve SharedLogPath ayarları, kümedeki tüm düğümler için varsayılan paylaşılan günlüğün GUID'sini ve konumunu tanımlamak için her zaman birlikte kullanılır. Varsayılan paylaşılan günlük, belirli bir hizmet için settings.xml ayarları belirtmeyen tüm güvenilir hizmetler için kullanılır. En iyi performans için, paylaşılan günlük dosyaları yalnızca paylaşılan günlük dosyasının çekişmesini azaltmak için kullanılan disklere yerleştirilmelidir.
SharedLogSizeInMB, tüm düğümlerde varsayılan paylaşılan günlük için önceden ayrılmaya yönelik disk alanı miktarını belirtir. SharedLogSizeInMB belirtilebilmesi için SharedLogId ve SharedLogPath'in belirtilmesi gerekmez.
Hizmete Özgü Yapılandırma
Durum bilgisi olan Reliable Services'ın varsayılan yapılandırmalarını, yapılandırma paketini (Yapılandırma) veya hizmet uygulamasını (kod) kullanarak değiştirebilirsiniz.
- Yapılandırma - Yapılandırma paketi aracılığıyla yapılandırma, uygulamadaki her hizmet için Config klasörünün altındaki Microsoft Visual Studio paket kökünde oluşturulan Settings.xml dosyası değiştirilerek gerçekleştirilir.
- Kod - Kod aracılığıyla yapılandırma, uygun seçenekler ayarlanmış bir ReliableStateManagerConfiguration nesnesi kullanılarak ReliableStateManager oluşturularak gerçekleştirilir.
Varsayılan olarak, Azure Service Fabric çalışma zamanı Settings.xml dosyasında önceden tanımlanmış bölüm adlarını arar ve temel çalışma zamanı bileşenlerini oluştururken yapılandırma değerlerini kullanır.
Not
Hizmetinizi kod aracılığıyla yapılandırmayı planlamadığınız sürece Visual Studio çözümünde oluşturulan Settings.xml dosyasında aşağıdaki yapılandırmaların bölüm adlarını silmeyin. ReliableStateManager yapılandırılırken yapılandırma paketinin veya bölüm adlarının yeniden adlandırılması için kod değişikliği gerekir.
Çoğaltıcı güvenlik yapılandırması
Çoğaltıcı güvenlik yapılandırmaları, çoğaltma sırasında kullanılan iletişim kanalının güvenliğini sağlamak için kullanılır. Bu, hizmetlerin birbirlerinin çoğaltma trafiğini göremeyecekleri ve yüksek oranda kullanılabilir hale gelen verilerin de güvenli olduğundan emin olacağı anlamına gelir. Varsayılan olarak, boş bir güvenlik yapılandırması bölümü çoğaltma güvenliğini engeller.
Önemli
Linux düğümlerinde sertifikaların PEM biçimli olması gerekir. Linux için sertifikaları bulma ve yapılandırma hakkında daha fazla bilgi edinmek için bkz . Linux'ta sertifikaları yapılandırma.
Varsayılan bölüm adı
ReplicatorSecurityConfig
Not
Bu bölüm adını değiştirmek için, bu hizmet için ReliableStateManager oluştururken ReplicatorSecuritySectionName parametresini ReliableStateManagerConfiguration oluşturucusunun üzerine yazın.
Çoğaltıcı yapılandırması
Çoğaltıcı yapılandırmaları, durumu yerel olarak çoğaltıp kalıcı hale getirerek durum bilgisi olan Reliable Service'in durumunu son derece güvenilir hale getirmekle sorumlu olan çoğaltıcıyı yapılandırabilir. Varsayılan yapılandırma Visual Studio şablonu tarafından oluşturulur ve yeterli olmalıdır. Bu bölümde, çoğaltıcıyı ayarlamak için kullanılabilen ek yapılandırmalar anlatılır.
Varsayılan bölüm adı
ReplicatorConfig
Not
Bu bölüm adını değiştirmek için, bu hizmet için ReliableStateManager oluştururken replicatorSettingsSectionName parametresini ReliableStateManagerConfiguration oluşturucusunun üzerine yazın.
Yapılandırma adları
Veri Akışı Adı | Unit | Default value | Açıklamalar |
---|---|---|---|
BatchAcknowledgementInterval | Saniye | 0,015 | İkincildeki çoğaltıcının, birincile bir onay göndermeden önce bir işlem aldıktan sonra beklediği zaman aralığı. Bu aralık içinde işlenen işlemler için gönderilecek diğer tüm onaylar tek yanıt olarak gönderilir. |
ReplicatorEndpoint | Yok | Varsayılan yok--gerekli parametre | Birincil/ikincil çoğaltıcının çoğaltma kümesindeki diğer çoğaltıcılarla iletişim kurmak için kullanacağı IP adresi ve bağlantı noktası. Bu, hizmet bildirimindeki bir TCP kaynak uç noktasına başvurmalıdır. Hizmet bildiriminde uç nokta kaynaklarını tanımlama hakkında daha fazla bilgi edinmek için Hizmet bildirimi kaynaklarına bakın. |
MaxPrimaryReplicationQueueSize | İşlem sayısı | 8192 | Birincil kuyruktaki en fazla işlem sayısı. Birincil çoğaltıcı tüm ikincil çoğaltıcılardan bir onay aldıktan sonra bir işlem serbesttir. Bu değer 64'ten büyük ve 2'lik bir güç olmalıdır. |
MaxSecondaryReplicationQueueSize | İşlem sayısı | 16384 | İkincil kuyruktaki en fazla işlem sayısı. Kalıcılık yoluyla durumu yüksek oranda kullanılabilir hale getirildikten sonra bir işlem serbest kalır. Bu değer 64'ten büyük ve 2'lik bir güç olmalıdır. |
CheckpointThresholdInMB | MB | 50 | Durumun denetim noktası olarak atandığı günlük dosyası alanı miktarı. |
MaxRecordSizeInKB | KB | 1024 | Çoğaltıcının günlüğe yazabileceği en büyük kayıt boyutu. Bu değer 4'ün katı ve 16'dan büyük olmalıdır. |
MinLogSizeInMB | MB | 0 (sistem belirlendi) | İşlem günlüğünün en küçük boyutu. Günlüğün bu ayarın altındaki bir boyuta kesilmesine izin verilmez. 0, çoğaltmanın en düşük günlük boyutunu belirleyeceğini gösterir. İlgili günlük kayıtlarının kesilmesi olasılığı azaltıldığından, bu değerin artırılması kısmi kopyalar ve artımlı yedeklemeler yapma olasılığını artırır. |
TruncationThresholdFactor | Faktör | 2 | Günlüğün boyutuna göre kesmenin tetikleneceğini belirler. Kesme eşiği, TruncationThresholdFactor ile çarpılan MinLogSizeInMB ile belirlenir. TruncationThresholdFactor değeri 1'den büyük olmalıdır. MinLogSizeInMB * TruncationThresholdFactor, MaxStreamSizeInMB değerinden küçük olmalıdır. |
ThrottlingThresholdFactor | Katsayı | 4 | Günlüğün boyutuna göre çoğaltmanın kısıtlanmaya başlayacağını belirler. Azaltma eşiği (MB cinsinden) Max((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)) tarafından belirlenir. Azaltma eşiği (MB cinsinden) kesme eşiğinden (MB cinsinden) büyük olmalıdır. Kesme eşiği (MB cinsinden) MaxStreamSizeInMB değerinden küçük olmalıdır. |
MaxAccumulatedBackupLogSizeInMB | MB | 800 | Belirli bir yedekleme günlüğü zincirindeki en fazla birikmiş yedekleme günlüğü boyutu (MB cinsinden). Artımlı yedekleme, ilgili tam yedeklemenin bu boyuttan daha büyük olması nedeniyle birikmiş yedekleme günlüklerine neden olacak bir yedekleme günlüğü oluşturursa artımlı yedekleme istekleri başarısız olur. Bu gibi durumlarda, kullanıcının tam yedekleme alması gerekir. |
SharedLogId | GUID | "" | Bu çoğaltmayla kullanılan paylaşılan günlük dosyasını tanımlamak için kullanılacak benzersiz bir GUID belirtir. Genellikle hizmetler bu ayarı kullanmamalıdır. Ancak SharedLogId belirtilirse SharedLogPath de belirtilmelidir. |
SharedLogPath | Tam yol adı | "" | Bu çoğaltma için paylaşılan günlük dosyasının oluşturulacağı tam yolu belirtir. Genellikle hizmetler bu ayarı kullanmamalıdır. Ancak, SharedLogPath belirtilirse SharedLogId de belirtilmelidir. |
SlowApiMonitoringDuration | Saniye | 300 | Yönetilen API çağrıları için izleme aralığını ayarlar. Örnek: kullanıcı tarafından sağlanan yedekleme geri çağırma işlevi. Aralık geçtikten sonra Sistem Durumu Yöneticisi'ne bir uyarı sistem durumu raporu gönderilir. |
LogTruncationIntervalSeconds | Saniye | 0 | Her çoğaltmada günlük kesilmesinin başlatılacağı yapılandırılabilir aralık. Günlüğün yalnızca günlük boyutu yerine zamana göre kesilmesini sağlamak için kullanılır. Bu ayar, güvenilir sözlükteki silinmiş girdilerin temizlenmesini de zorlar. Bu nedenle, silinen öğelerin zamanında temizlenmesini sağlamak için kullanılabilir. |
EnableStableReads | Boolean | False | Kararlı okumaların etkinleştirilmesi, ikincil çoğaltmaların çekirdekte takılı olan değerleri döndürmesini kısıtlar. |
Kod aracılığıyla örnek yapılandırma
class Program
{
/// <summary>
/// This is the entry point of the service host process.
/// </summary>
static void Main()
{
ServiceRuntime.RegisterServiceAsync("HelloWorldStatefulType",
context => new HelloWorldStateful(context,
new ReliableStateManager(context,
new ReliableStateManagerConfiguration(
new ReliableStateManagerReplicatorSettings()
{
RetryInterval = TimeSpan.FromSeconds(3)
}
)))).GetAwaiter().GetResult();
}
}
class MyStatefulService : StatefulService
{
public MyStatefulService(StatefulServiceContext context, IReliableStateManagerReplica stateManager)
: base(context, stateManager)
{ }
...
}
Örnek yapılandırma dosyası
<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<Section Name="ReplicatorConfig">
<Parameter Name="ReplicatorEndpoint" Value="ReplicatorEndpoint" />
<Parameter Name="BatchAcknowledgementInterval" Value="0.05"/>
<Parameter Name="CheckpointThresholdInMB" Value="512" />
</Section>
<Section Name="ReplicatorSecurityConfig">
<Parameter Name="CredentialType" Value="X509" />
<Parameter Name="FindType" Value="FindByThumbprint" />
<Parameter Name="FindValue" Value="9d c9 06 b1 69 dc 4f af fd 16 97 ac 78 1e 80 67 90 74 9d 2f" />
<Parameter Name="StoreLocation" Value="LocalMachine" />
<Parameter Name="StoreName" Value="My" />
<Parameter Name="ProtectionLevel" Value="EncryptAndSign" />
<Parameter Name="AllowedCommonNames" Value="My-Test-SAN1-Alice,My-Test-SAN1-Bob" />
</Section>
</Settings>
Açıklamalar
BatchAcknowledgementInterval çoğaltma gecikme süresini denetler. '0' değeri, aktarım hızı karşılığında mümkün olan en düşük gecikme süresiyle sonuçlanır (her biri daha az onay içeren daha fazla onay iletisinin gönderilmesi ve işlenmesi gerektiğinden). BatchAcknowledgementInterval değeri ne kadar büyükse, daha yüksek işlem gecikme süresi maliyetiyle genel çoğaltma aktarım hızı o kadar yüksek olur. Bu, işlem işlemelerinin gecikme süresine doğrudan çevrilir.
CheckpointThresholdInMB değeri, çoğaltmanın durum bilgilerini çoğaltmanın ayrılmış günlük dosyasında depolamak için kullanabileceği disk alanı miktarını denetler. Bunu varsayılan değerden daha yüksek bir değere yükseltmek, kümeye yeni bir çoğaltma eklendiğinde yeniden yapılandırma sürelerinin daha hızlı olmasına neden olabilir. Bunun nedeni, günlükte daha fazla işlem geçmişinin kullanılabilir olması nedeniyle gerçekleşen kısmi durum aktarımıdır. Bu, kilitlenme sonrasında çoğaltmanın kurtarma süresini artırabilir.
MaxRecordSizeInKB ayarı, çoğaltıcı tarafından günlük dosyasına yazılabilir bir kaydın en büyük boyutunu tanımlar. Çoğu durumda, varsayılan 1024 KB kayıt boyutu en uygun seçenektir. Ancak, hizmet daha büyük veri öğelerinin durum bilgilerinin bir parçası haline geliyorsa, bu değerin artırılması gerekebilir. MaxRecordSizeInKB'yi 1024'ten küçük hale getirmenin çok az avantajı vardır, daha küçük kayıtlar yalnızca daha küçük kayıt için gereken alanı kullanır. Bu değerin yalnızca nadir durumlarda değiştirilmesi gerektiğini tahmin ediyoruz.
SharedLogId ve SharedLogPath ayarları, hizmetin düğüm için varsayılan paylaşılan günlükten ayrı bir paylaşılan günlük kullanmasını sağlamak için her zaman birlikte kullanılır. En iyi verimlilik için, mümkün olduğunca çok hizmet aynı paylaşılan günlüğü belirtmelidir. Paylaşılan günlük dosyaları, kafa hareketi çekişmesini azaltmak için yalnızca paylaşılan günlük dosyası için kullanılan disklere yerleştirilmelidir. Bu değerin yalnızca nadir durumlarda değiştirilmesi gerektiğini tahmin ediyoruz.