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 genelken, diğer küme 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ı tutan 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ı

Name Birim Varsayılan değer Açıklamalar
WriteBufferMemoryPoolMinimumInKB Kilobayt 8388608 Günlükçü yazma arabelleği 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 özel 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ı "" Kümedeki tüm düğümlerde, hizmete özgü yapılandırmalarında SharedLogPath'i belirtmeyen tüm güvenilir hizmetler tarafından kullanılan paylaşılan günlük dosyasının tam yolunu 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 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 durum verilerini önbelleğe almak için bir düğümdeki tüm güvenilir hizmetler tarafından 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 olarak 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 zarar görebilir.

SharedLogId ve SharedLogPath ayarları her zaman kümedeki tüm düğümler için varsayılan paylaşılan günlüğün GUID'sini ve konumunu tanımlamak için birlikte kullanılır. Varsayılan paylaşılan günlük, belirli bir hizmet için settings.xml ayarlarını belirtmeyen tüm güvenilir hizmetler için kullanılır. En iyi performans için paylaşılan günlük dosyaları, çekişme oranını azaltmak için yalnızca paylaşılan günlük dosyası 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'in 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 . Yapılandırma paketinin veya bölüm adlarının yeniden adlandırılması, ReliableStateManager yapılandırılırken bir kod değişikliği gerektirir.

Ç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 anlamına gelir ve yüksek oranda kullanılabilir hale gelen verilerin de güvenli olmasını sağlar. 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ılabilecek 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şturulurken replicatorSettingsSectionName parametresini ReliableStateManagerConfiguration oluşturucusunun üzerine yazın.

Yapılandırma adları

Name Birim Varsayılan değer Açıklamalar
BatchAcknowledgementInterval Saniye 0.015 İkincildeki çoğaltıcının, birincil öğeye bir onay göndermeden önce bir işlemi aldıktan sonra beklediği zaman aralığı. Bu aralıkta işlenen işlemler için gönderilecek diğer 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 işlem sayısı üst sınırı. Birincil çoğaltıcı tüm ikincil çoğaltıcılardan bir onay aldıktan sonra bir işlem serbest bırakılır. Bu değer 64'ten büyük ve 2'nin gücü olmalıdır.
MaxSecondaryReplicationQueueSize İşlem sayısı 16384 İkincil kuyruktaki işlem sayısı üst sınırı. Kalıcılık yoluyla durumunu yüksek oranda kullanılabilir hale getirdikten sonra işlem serbest kalır. Bu değer 64'ten büyük ve 2'nin gücü olmalıdır.
CheckpointThresholdInMB MB 50 Durumun denetim noktası olarak belirtildiği 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 Faktör 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 yedekleme günlüklerinin en büyük birikmiş 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 temizlenmelerini sağlamak için kullanılabilir.
EnableStableReads Boole Yanlış Kararlı okumaların etkinleştirilmesi, ikincil çoğaltmaların çekirdek denetimi yapılmış 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ı da 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 artırmak, 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ükteki 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 değerdir. Ancak, hizmet daha büyük veri öğelerinin durum bilgilerinin bir parçası olmasına neden oluyorsa, bu değerin artırılması gerekebilir. Daha küçük kayıtlar yalnızca küçük kayıt için gereken alanı kullandığından MaxRecordSizeInKB'yi 1024'ten küçük hale getirmenin çok az avantajı vardır. Bu değerin yalnızca nadir durumlarda değiştirilmesi gerektiğini tahmin ediyoruz.

SharedLogId ve SharedLogPath ayarları, bir 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.

Sonraki adımlar