Bagikan melalui


Menggunakan Consul sebagai penyedia langganan

Consul adalah platform penemuan layanan terdistribusi, sangat tersedia, dan sadar pusat data yang mencakup pendaftaran layanan sederhana, pemeriksaan kesehatan, deteksi kegagalan, dan penyimpanan bernilai kunci. Ini dibangun di tempat bahwa setiap simpul di pusat data menjalankan agen Consul yang bertindak sebagai server atau klien. Setiap agen berkomunikasi melalui protokol gosip yang dapat diskalakan.

Ada gambaran umum terperinci tentang Consul termasuk perbandingan dengan solusi serupa di sini.

Consul ditulis dalam Go dan 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 ketika Anda perlu memberikan solusi lokal yang tidak mengharuskan calon pelanggan Anda memiliki infrastruktur yang ada dan penyedia TI yang kooperatif. Consul adalah executable tunggal ringan, tidak memiliki dependensi, dan dengan demikian dapat dengan mudah dibangun ke dalam solusi middleware Anda. Ketika Consul adalah solusi Anda untuk menemukan, memeriksa, dan memelihara layanan mikro Anda, masuk akal untuk sepenuhnya berintegrasi dengan Orleans keanggotaan untuk kesederhanaan dan kemudahan operasi. Ada juga tabel keanggotaan di Consul (juga dikenal sebagai "Orleans Penyimpanan Sistem Kustom"), yang sepenuhnya terintegrasi dengan OrleansManajemen Kluster.

Menyiapkan Consul

Ada dokumentasi ekstensif yang tersedia di Consul.io tentang menyiapkan kluster Consul yang stabil, dan tidak efektif jika menjelaskan kembali di sini. Namun, demi kenyamanan Anda, kami menyertakan panduan ini sehingga Anda dapat dengan cepat Orleans menjalankan 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 ekstrak Consul.exe ke C:\Consul.

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

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

    Pada 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 dan bukan klien (Klien Consul adalah agen yang menghosting semua layanan dan data, tetapi tidak memiliki hak suara untuk memutuskan, dan tidak dapat menjadi, pemimpin kluster.
    • -bootstrap: Simpul pertama (dan satu-satunya yang pertama!) dalam kluster harus di-bootstrap sehingga mengasumsikan kepemimpinan kluster.
    • -data-dir [path]: Menentukan jalur tempat semua data Consul disimpan, termasuk tabel keanggotaan kluster.
    • -client='0.0.0.0': Menginformasikan Consul IP mana yang akan dibuka layanannya.

    Terdapat banyak parameter lain, dan opsi untuk menggunakan file konfigurasi JSON. Untuk daftar lengkap opsi, lihat dokumentasi Konsul.

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

    {
        "consul": []
    }
    

Mengkonfigurasi Orleans

Untuk mengonfigurasi Orleans untuk menggunakan Consul sebagai penyedia keanggotaan, proyek silo Anda harus mereferensikan Microsoft.Orleans. Paket Clustering.Consul NuGet. Setelah melakukannya, Anda dapat mengonfigurasi penyedia keanggotaan dalam file Program.cs silo Anda 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 UseConsulClientClustering metode ekstensi.

SDK Klien

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

Detail implementasi

Penyedia Tabel Langganan menggunakan fungsionalitas penyimpanan Kunci/Nilai Consul dengan operasi Periksa-Dan-Atur (CAS). Ketika setiap Silo dimulai, ia mendaftarkan dua entri kunci-nilai, satu yang berisi detail Silo dan yang memegang terakhir kali Silo melaporkan itu hidup. Yang terakhir mengacu pada entri diagnostik "Saya masih hidup" dan bukan untuk detak jantung deteksi kegagalan, yang dikirim langsung antara silo dan tidak ditulis ke dalam tabel. Semua penulisan ke tabel dilakukan dengan CAS untuk memberikan kontrol konkurensi, seperti yang diperlukan oleh OrleansProtokol Manajemen Kluster .

Setelah Silo berjalan, Anda dapat melihat entri ini di browser web Anda di http://localhost:8500/v1/kv/?keys&pretty, yang menampilkan sesuatu seperti:

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

Semua kunci diawali dengan , yang dikodekan secara orleanspermanen di penyedia dan dimaksudkan untuk menghindari tabrakan keyspace dengan pengguna Consul lainnya. Anda dapat menggunakan salah satu kunci ini untuk mengambil informasi tambahan tentang Masing-masing kunci ini dapat dibaca dengan menambahkan nama kunci mereka (tanpa tanda kutip) ke akar Consul KV di http://localhost:8500/v1/kv/. Melakukannya memberi Anda 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 memberi Anda data keanggotaan yang sebenarnya 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 HTTP GET dengan menggunakan URI http://192.168.1.26:8500/v1/KV/orleans/default/?recurse.

Batasan

Ada beberapa batasan yang perlu diperhatikan saat menggunakan Consul sebagai penyedia keanggotaan.

Orleans protokol keanggotaan yang diperluas (versi tabel & 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, dan tidak mendukung Protokol Keanggotaan yang Diperluas. Protokol Yang Diperluas ini diperkenalkan sebagai tambahan, tetapi tidak penting, validasi konektivitas silo dan sebagai fondasi untuk fungsionalitas yang belum diimplementasikan.

Beberapa pusat data

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

Saat menggunakan Windows

Ketika Consul dimulai di Windows, Konsul mencatat pesan berikut:

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

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

Potensi penyempurnaan di masa mendatang

  1. Buktikan bahwa proyek replikasi Consul KV dapat mendukung Orleans kluster di lingkungan WAN antara beberapa pusat data Consul.
  2. Implementasikan Tabel Pengingat di Consul.
  3. Implementasikan Protokol Langganan Diperpanjang. Tim di belakang Consul memang berencana untuk menerapkan operasi atomik, setelah fungsionalitas ini tersedia, Anda dapat menghapus batasan di penyedia.