Bagikan melalui


Menggunakan Consul sebagai penyedia keanggotaan

Consul adalah platform penemuan layanan terdistribusi, berketersediaan tinggi, dan yang mendukung pusat data, termasuk pendaftaran layanan sederhana, pemeriksaan kesehatan, deteksi kegagalan, dan penyimpanan pasangan kunci-nilai. Ini dibangun berdasarkan premis bahwa setiap simpul di data center menjalankan agen Consul yang bertindak sebagai server atau klien. Setiap agen berkomunikasi melalui protokol gosip yang dapat diskalakan.

Gambaran umum terperinci tentang Consul, termasuk perbandingan dengan solusi serupa, tersedia di Apa itu Consul?.

Consul ditulis dalam Go dan merupakan sumber terbuka. Unduhan yang dikompilasi tersedia untuk macOS X, FreeBSD, Linux, Solaris, dan Windows.

Mengapa memilih Consul?

Orleans Sebagai Penyedia Keanggotaan, Consul adalah pilihan yang baik untuk memberikan solusi lokal yang tidak mengharuskan pelanggan untuk memiliki infrastruktur yang ada atau penyedia IT yang kooperatif. Consul adalah executable tunggal ringan tanpa dependensi, sehingga mudah dibangun menjadi solusi middleware. Saat menggunakan Consul untuk menemukan, memeriksa, dan memelihara layanan mikro, sepenuhnya berintegrasi dengan Orleans keanggotaan menawarkan kesederhanaan dan kemudahan operasi. Consul juga menyediakan tabel keanggotaan (juga dikenal sebagai "Orleans Penyimpanan Sistem Kustom") yang sepenuhnya terintegrasi dengan OrleansManajemen Kluster.

Menyiapkan Consul

Dokumentasi ekstensif tentang menyiapkan kluster Consul yang stabil tersedia dalam dokumentasi Consul, sehingga informasi tidak akan diulang di sini. Namun, untuk kenyamanan, panduan ini menunjukkan cara cepat menjalankan Orleans dengan agen Consul mandiri.

  1. Buat folder untuk menginstal Consul ke dalam (misalnya C:\Consul).

  2. Buat subfolder: C:\Consul\Data (Consul tidak membuat direktori ini jika tidak ada).

  3. Unduh dan unzip Consul.exe ke C:\Consul.

  4. Buka prompt perintah di C:\Consul dan jalankan perintah berikut:

    ./consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client='0.0.0.0'
    

    Dalam perintah sebelumnya:

    • agent: Menginstruksikan Consul untuk menjalankan proses agen yang menghosting layanan. Tanpa sakelar ini, proses Consul mencoba menggunakan RPC untuk mengonfigurasi agen yang sedang berjalan.
    • -server: Mendefinisikan agen sebagai server, bukan klien. ( Klien Consul adalah layanan dan data hosting agen tetapi tidak memiliki hak suara dan tidak dapat menjadi pemimpin kluster).
    • -bootstrap: Simpul pertama (dan hanya yang pertama!) dalam kluster harus melalui proses bootstrap untuk memimpin kluster.
    • -data-dir [path]: Menentukan jalur tempat semua data Consul, termasuk tabel keanggotaan kluster, disimpan.
    • -client='0.0.0.0': Menginformasikan Consul alamat IP mana yang akan dibuka layanannya.

    Banyak parameter lain yang ada, termasuk opsi untuk menggunakan file konfigurasi JSON. Lihat dokumentasi Konsul untuk daftar lengkap.

  5. Pastikan Consul berjalan dan siap menerima permintaan keanggotaan dari Orleans dengan membuka titik akhir layanan di browser Anda di http://localhost:8500/v1/catalog/services. Saat berfungsi dengan benar, browser menampilkan JSON berikut:

    {
        "consul": []
    }
    

Konfigurasi Orleans

Untuk mengonfigurasi Orleans untuk menggunakan Consul sebagai penyedia keanggotaan, proyek silo perlu mereferensi paket NuGet Microsoft.Orleans.Clustering.Consul. Setelah menambahkan referensi, konfigurasikan penyedia keanggotaan dalam file Program.cs silo sebagai berikut:

IHostBuilder builder = Host.CreateDefaultBuilder(args)
    .UseOrleans(silo =>
    {
        silo.UseConsulSiloClustering(options =>
        {
            // The address of the Consul server
            var address = new Uri("http://localhost:8500");
            options.ConfigureConsulClient(address);
        });
    })
    .UseConsoleLifetime();

using IHost host = builder.Build();
host.Run();

Kode sebelumnya:

Untuk mengonfigurasi klien, referensikan paket NuGet yang sama dan panggil metode ekstensi UseConsulClientClustering.

SDK Pelanggan

Jika tertarik menggunakan Consul untuk penemuan layanan, SDK Klien tersedia untuk bahasa yang paling populer.

Detail implementasi

Penyedia Tabel Keanggotaan menggunakan fungsionalitas penyimpanan Kunci-Nilai Consul dengan operasi Check-And-Set (CAS). Ketika setiap Silo dimulai, ia mendaftarkan dua entri kunci-nilai: satu berisi detail Silo dan satu menunjukkan waktu terakhir Silo melaporkan bahwa ia masih berfungsi. Yang terakhir mengacu pada entri diagnostik "Saya hidup", bukan detak jantung deteksi kegagalan, yang dikirim langsung antara silo dan tidak ditulis ke tabel. Semua penulisan ke tabel menggunakan CAS untuk memberikan kontrol konkurensi, seperti yang diperlukan oleh OrleansProtokol Manajemen Kluster.

Setelah Silo berjalan, lihat entri ini di browser web pada http://localhost:8500/v1/kv/?keys&pretty. Output terlihat mirip dengan ini:

[
    "orleans/default/192.168.1.11:11111@43165319",
    "orleans/default/192.168.1.11:11111@43165319/iamalive",
    "orleans/default/version"
]

Semua kunci diawali dengan orleans. Awalan ini dikodekan secara permanen di penyedia dan dimaksudkan untuk menghindari tabrakan keyspace dengan pengguna Consul lainnya. Ambil informasi tambahan untuk setiap kunci dengan menambahkan namanya (tanpa tanda kutip) ke akar Consul KV di http://localhost:8500/v1/kv/. Melakukannya menyajikan JSON berikut:

[
    {
        "LockIndex": 0,
        "Key": "orleans/default/192.168.1.11:11111@43165319",
        "Flags": 0,
        "Value": "[BASE64 UTF8 Encoded String]",
        "CreateIndex": 321,
        "ModifyIndex": 322
    }
]

Mendekode string Value yang dikodekan Base64 UTF-8 menyediakan data keanggotaan aktual Orleans :

http://localhost:8500/v1/KV/orleans/default/[SiloAddress]

{
    "Hostname": "[YOUR_MACHINE_NAME]",
    "ProxyPort": 30000,
    "StartTime": "2023-05-15T14:22:00.004977Z",
    "Status": 3,
    "SiloName": "Silo_fcad0",
    "SuspectingSilos": []
}

http://localhost:8500/v1/KV/orleans/default/[SiloAddress]/IAmAlive

"2023-05-15T14:27:01.1832828Z"

Ketika klien terhubung, mereka membaca KV untuk semua silo dalam kluster dalam satu permintaan HTTP GET menggunakan URI http://localhost:8500/v1/KV/orleans/default/?recurse.

Keterbatasan

Ketahui beberapa batasan saat menggunakan Consul sebagai penyedia keanggotaan.

Orleans protokol keanggotaan yang diperluas (versi tabel dan ETag)

Consul KV saat ini tidak mendukung pembaruan atomik. Oleh karena itu, Orleans Penyedia Keanggotaan Consul hanya menerapkan Orleans protokol keanggotaan dasar, seperti yang dijelaskan dalam Manajemen kluster di Orleans. Ini tidak mendukung Protokol Keanggotaan yang Diperpanjang. Protokol Extended ini diperkenalkan sebagai tambahan, meskipun tidak penting, validasi konektivitas silo dan sebagai fondasi untuk fungsionalitas yang belum diterapkan.

Beberapa pusat data

Pasangan kunci-nilai di Consul saat ini tidak direplikasi di antara pusat data Consul. Proyek terpisah ada untuk mengatasi upaya replikasi ini, tetapi belum terbukti mendukung Orleans.

Ketika berjalan di Windows

Ketika Consul dimulai di Windows, Consul mencatat pesan berikut:

==> WARNING: Windows is not recommended as a Consul server. Do not use in production.

Pesan peringatan ini muncul karena kurangnya fokus pada pengujian saat berjalan di lingkungan Windows, bukan karena masalah aktual yang diketahui. Baca diskusi sebelum memutuskan apakah Consul adalah pilihan yang tepat.

Potensi penyempurnaan di masa mendatang

  1. Buktikan proyek replikasi Consul KV dapat mendukung Orleans kluster di lingkungan WAN antara beberapa pusat data Consul.
  2. Terapkan Tabel Pengingat di Consul.
  3. Terapkan Protokol Keanggotaan yang Diperluas. Tim di balik Consul berencana untuk menerapkan operasi atom. Setelah fungsionalitas ini tersedia, menghapus batasan di penyedia mungkin dimungkinkan.