Mengonfigurasi stateful reliable services

Ada dua set pengaturan konfigurasi untuk reliable services. Satu set adalah global untuk semua reliable services dalam klaster sementara set lainnya khusus untuk reliable services tertentu.

Konfigurasi Global

Konfigurasi reliable service global ditentukan dalam manifes klaster untuk klaster di bawah bagian KtlLogger. Ini memungkinkan konfigurasi lokasi dan ukuran log bersama ditambah batas memori global yang digunakan oleh pencatat. Manifes klaster adalah file XML tunggal yang menyimpan pengaturan dan konfigurasi yang berlaku untuk semua node dan layanan dalam klaster. File ini biasanya disebut ClusterManifest.xml. Anda dapat melihat manifes klaster untuk klaster Anda menggunakan perintah powershell Get-ServiceFabricClusterManifest.

Nama konfigurasi

Nama Unit Nilai default Keterangan
WriteBufferMemoryPoolMinimumInKB Kilobyte 8388608 Jumlah minimum KB yang dialokasikan dalam mode kernel untuk pencatat kumpulan memori buffer tulis. Kumpulan memori ini digunakan untuk penembolokan informasi status sebelum menulis ke disk.
WriteBufferMemoryPoolMaximumInKB Kilobyte Tanpa batas Ukuran maksimum di mana pencatat kumpulan memori buffer tulis dapat tumbuh.
SharedLogId GUID "" Menentukan GUID unik untuk digunakan untuk menentukan file log bersama default yang digunakan oleh semua reliable services pada semua node dalam klaster yang tidak menentukan SharedLogId dalam konfigurasi khusus layanan mereka. Jika SharedLogId ditentukan, maka SharedLogPath juga harus ditentukan.
SharedLogPath Nama jalur yang sepenuhnya memenuhi syarat "" Menentukan jalur yang sepenuhnya memenuhi syarat di mana file log bersama yang digunakan oleh semua reliable services pada semua node dalam klaster yang tidak menentukan SharedLogPath dalam konfigurasi spesifik layanan mereka. Namun, jika SharedLogPath ditentukan, maka SharedLogId juga harus ditentukan.
SharedLogSizeInMB Megabyte 8192 Menentukan jumlah MB ruang disk yang akan dialokasikan secara statis untuk log bersama. Nilainya harus 2048 atau lebih besar.

Di Azure ARM atau templat JSON lokal, contoh di bawah ini menunjukkan cara mengubah log transaksi bersama yang dibuat untuk mendukung reliable collections untuk layanan stateful .

"fabricSettings": [{
    "name": "KtlLogger",
    "parameters": [{
        "name": "SharedLogSizeInMB",
        "value": "4096"
    }]
}]

Contoh bagian manifes klaster pengembang lokal

Jika Anda ingin mengubah ini pada lingkungan pengembangan lokal Anda, Anda perlu mengedit file clustermanifest.xml lokal.

   <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>

Keterangan

Pencatat memiliki kumpulan memori global yang dialokasikan dari memori kernel non-halaman yang tersedia untuk semua reliable services pada node untuk penembolokan data status sebelum ditulis ke log khusus yang terkait dengan replika reliable services. Ukuran pool dikendalikan oleh pengaturan WriteBufferMemoryPoolMinimumInKB dan WriteBufferMemoryPoolMaximumInKB. WriteBufferMemoryPoolMinimumInKB menentukan ukuran awal kumpulan memori ini dan ukuran terendah yang dapat dikecilkan oleh kumpulan memori. WriteBufferMemoryPoolMaximumInKB adalah ukuran tertinggi di mana kumpulan memori dapat tumbuh. Setiap replika reliable service yang dibuka dapat meningkatkan ukuran kumpulan memori dengan jumlah yang ditentukan sistem hingga WriteBufferMemoryPoolMaximumInKB. Jika ada lebih banyak permintaan memori dari kumpulan memori daripada yang tersedia, permintaan memori akan tertunda sampai memori tersedia. Oleh karena itu, jika kumpulan memori buffer tulis terlalu kecil untuk konfigurasi tertentu, maka kinerja dapat terganggu.

Pengaturan SharedLogId dan SharedLogPath selalu digunakan bersama untuk menentukan GUID dan lokasi untuk log bersama default untuk semua node dalam klaster. Log bersama default digunakan untuk semua reliable services yang tidak menentukan pengaturan dalam settings.xml untuk layanan tertentu. Untuk kinerja terbaik, file log bersama harus ditempatkan pada disk yang digunakan hanya untuk file log bersama untuk mengurangi perselisihan.

SharedLogSizeInMB menentukan jumlah ruang disk yang akan dialokasikan untuk log bersama default pada semua node. SharedLogId dan SharedLogPath tidak perlu ditentukan agar SharedLogSizeInMB ditentukan.

Konfigurasi Khusus Layanan

Anda dapat memodifikasi konfigurasi stateful Reliable Services dengan menggunakan paket konfigurasi (Config) atau penerapan layanan (kode).

  • Konfigurasi - Konfigurasi melalui paket konfigurasi diselesaikan dengan mengubah file Settings.xml yang dihasilkan dalam akar paket Microsoft Visual Studio di bawah folder Konfigurasi untuk setiap layanan dalam aplikasi.
  • Kode - Konfigurasi melalui kode dicapai dengan membuat ReliableStateManager menggunakan objek ReliableStateManagerConfiguration dengan set opsi yang sesuai.

Secara default, runtime Azure Service Fabric mencari bagian nama yang telah di tentukan sebelumnya di file Settings.xml dan menggunakan nilai konfigurasi saat membuat komponen runtime yang mendasarinya.

Catatan

Jangan hapus nama bagian dari konfigurasi berikut dalam file Settings.xml yang dibuat dalam solusi Visual Studio kecuali Anda berencana untuk mengonfigurasi layanan Anda melalui kode. Mengganti nama paket konfigurasi atau nama bagian akan memerlukan perubahan kode saat mengonfigurasi ReliableStateManager.

Konfigurasi keamana replikator

Konfigurasi keamana replikator digunakan untuk mengamankan saluran komunikasi yang digunakan selama replikasi. Ini berarti bahwa layanan tersebut tidak akan dapat melihat lalu lintas replikasi satu sama lain, dan memastikan data yang dibuat sangat tersedia juga aman. Secara default, bagian konfigurasi keamanan yang kosong mencegah keamanan replikasi.

Penting

Pada node Linux, sertifikat harus berformat PEM. Untuk mempelajari selengkapnya tentang menemukaan dan mengonfigurasi sertifikat untuk Linux, lihat Konfigurasi sertifikat di Linux.

Nama bagian default

ReplicatorSecurityConfig

Catatan

Untuk mengubah nama bagian ini, ganti parameter replicatorSecuritySectionName ke konstruktor ReliableStateManagerConfiguration saat membuat ReliableStateManager untuk layanan ini.

Konfigurasi replikator

Konfigurasi replikator digunakan untuk mengonfigurasi replikator yang bertanggung jawab untuk membuat status stateful Reliable Service sangat andal dengan mereplikasi dan mempertahankan status secara lokal. Konfigurasi default dihasilkan oleh templat Visual Studio dan sudah cukup. Bagian ini membahas tentang konfigurasi tambahan yang tersedia untuk menyetel replikator.

Nama bagian default

ReplicatorConfig

Catatan

Untuk mengubah nama bagian ini, ganti parameter replicatorSettingsSectionName ke konstruktor ReliableStateManagerConfiguration saat membuat ReliableStateManager untuk layanan ini.

Nama konfigurasi

Nama Unit Nilai default Keterangan
BatchAcknowledgementInterval Detik 0.015 Periode waktu yang mana replikator di sekunder menunggu setelah menerima operasi sebelum mengirim kembali konfirmasi ke primer. Konfirmasi lain yang akan dikirim untuk operasi yang di proses pada interval ini dikirim sebagai respon.
ReplicatorEndpoint T/A Tidak ada parameter yang diperlukan default Alamat IP dan port akan digunakan replikator primer/sekunder untuk berkomunikasi dengan replikator lain di rangkaian replika. Ini harus mereferensikan titik akhir sumber daya TCP pada manifes layanan. Lihat Sumber daya manifes layanan untuk membaca selengkapnya tentang menentukan sumber daya titik akhir dalam manifes layanan.
MaxPrimaryReplicationQueueSize Jumlah operasi 8192 Jumlah maksimum operasi dalam antrean utama. Operasi akan di bebaskan setelah replikator primer menerima konfirmasi dari semua replikator sekunder. Nilai ini harus lebih besar dari 64 dan kekuatan 2.
MaxSecondaryReplicationQueueSize Jumlah operasi 16384 Jumlah maksimum operasi dalam antrean sekunder. Operasi akan dibebaskan setelah membuat statusnya tersedia sepenuhnya melalui persistensi. Nilai ini harus lebih besar dari 64 dan kekuatan 2.
CheckpointThresholdInMB MB 50 Jumlah ruang file log setelah statusnya di-checkpoint.
MaxRecordSizeInKB KB 1024 Ukuran rekaman terbesar yang dapat ditulis replikator dalam log. Nilai ini harus kelipatan 4 dan lebih besar dari 16.
MinLogSizeInMB MB 0 (ditentukan sistem) Ukuran minimum log transaksional. Log tidak akan diizinkan untuk dipotong ke ukuran di bawah setelan ini. 0 menunjukkan bahwa replikator akan menentukan ukuran log minimum. Meningkatkan nilai ini meningkatkan kemungkinan melakukan salinan parsial dan pencadangan inkremental karena kemungkinan catatan log yang relevan dipotong diturunkan.
TruncationThresholdFactor Faktor 2 Menentukan pada ukuran log apa, pemotongan akan dipicu. Ambang pemotongan ditentukan oleh MinLogSizeInMB dikalikan dengan TruncationThresholdFactor. TruncationThresholdFactor harus lebih besar dari 1. MinLogSizeInMB * TruncationThresholdFactor harus kurang dari MaxStreamSizeInMB.
ThrottlingThresholdFactor Faktor 4 Menentukan pada ukuran log apa, replika akan mulai dibatasi. Ambang pembatasan (dalam MB) ditentukan oleh Max((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)). Ambang pembatasan (dalam MB) harus lebih besar dari ambang pemotongan (dalam MB). Ambang pemotongan (dalam MB) harus kurang dari MaxStreamSizeInMB.
MaxAccumulatedBackupLogSizeInMB MB 800 Ukuran akumulasi maks (dalam MB) log cadangan dalam rangkaian log cadangan yang diberikan. Permintaan pencadangan bertahap akan gagal jika cadangan bertahap akan menghasilkan log cadangan yang akan menyebabkan akumulasi log cadangan karena cadangan lengkap yang relevan menjadi lebih besar dari ukuran ini. Dalam kasus seperti itu, pengguna diharuskan untuk mengambil pencadangan penuh.
SharedLogId GUID "" Menentukan guid unik yang digunakan untuk mengidentifikasi file log bersama yang digunakan dengan replika ini. Biasanya, layanan tidak boleh menggunakan pengaturan ini. Namun, jika SharedLogId ditentukan, maka SharedLogPath juga harus ditentukan.
SharedLogPath Nama jalur yang sepenuhnya memenuhi syarat "" Menentukan jalur yang sepenuhnya memenuhi syarat tempat file log bersama untuk replika ini akan dibuat. Biasanya, layanan tidak boleh menggunakan pengaturan ini. Namun, jika SharedLogPath ditentukan, maka SharedLogId juga harus ditentukan.
SlowApiMonitoringDuration Detik 300 Menyetel interval pemantauan untuk panggilan API terkelola. Contoh: pengguna menyediakan fungsi panggilan balik cadangan. Setelah interval berlalu, laporan kesehatan peringatan akan dikirim ke Health Manager.
LogTruncationIntervalSeconds Detik 0 Interval yang dapat dikonfigurasi di mana pemotongan log akan dimulai pada setiap replika. Ini digunakan untuk memastikan log juga dipotong berdasarkan waktu alih-alih hanya ukuran log. Pengaturan ini juga memaksa hapus menyeluruh entri yang dihapus dalam reliable dictionary. Oleh karena itu dapat digunakan untuk memastikan item yang dihapus menyeluruh dibersihkan tepat waktu.
EnableStableReads Boolean FALSE Mengaktifkan bacaan yang stabil membatasi replika sekunder untuk mengembalikan nilai yang telah diorum-acked.

Konfigurasi sampel melalui kode

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)
    { }
    ...
}

File konfigurasi sampel

<?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>

Keterangan

BatchAcknowledgementInterval mengontrol latensi replikasi. Nilai '0' menghasilkan latensi serendah mungkin, dengan biaya throughput (karena lebih banyak pesan konfirmasi yang harus dikirim dan di proses, masing-masing berisi lebih sedikit konfirmasi). Semakin besar nilai BatchAcknowledgementInterval, semakin tinggi juga throughput replikasi keseluruhan, dengan biaya latensi operasi lebih tinggi. Hal ini di terjemah secara langsung ke latensi transaksi yang dilakukan.

Nilai untuk CheckpointThresholdInMB mengontrol jumlah ruang disk yang dapat digunakan replikator untuk menyimpan informasi status dalam file log khusus replika. Meningkatkannya ke nilai yang lebih tinggi daripada default dapat menghasilkan waktu konfigurasi ulang yang lebih cepat ketika replika baru ditambahkan ke set. Hal ini disebabkan oleh transfer status parsial yang terjadi karena ketersediaan lebih banyak riwayat operasi dalam log. Hal ini berpotensi meningkatkan waktu pemulihan replika setelah crash.

Pengaturan MaxRecordSizeInKB menentukan ukuran maksimum rekaman yang dapat ditulis oleh replikator ke dalam file log. Dalam kebanyakan kasus, ukuran rekaman 1024-KB default sudah optimal. Namun, jika layanan menyebabkan item data yang lebih besar menjadi bagian dari informasi status, maka nilai ini perlu ditingkatkan. Terdapat sedikit keuntungan dalam membuat MaxRecordSizeInKB lebih kecil dari 1024, karena rekaman yang lebih kecil hanya menggunakan ruang yang diperlukan untuk rekaman yang lebih kecil. Kami berharap bahwa nilai ini perlu diubah hanya dalam kasus yang jarang terjadi.

Pengaturan SharedLogId dan SharedLogPath selalu digunakan bersama untuk membuat layanan menggunakan log bersama terpisah dari log bersama default untuk node. Untuk efisiensi terbaik, sebanyak mungkin layanan harus menentukan log bersama yang sama. File log bersama harus ditempatkan pada disk yang hanya digunakan untuk file log bersama, untuk mengurangi ketidakcocokan gerakan kepala. Kami berharap bahwa nilai ini perlu diubah hanya dalam kasus yang jarang terjadi.

Langkah berikutnya