Menggunakan Consul sebagai penyedia keanggotaan
Consul adalah platform penemuan layanan terdistribusi, dengan ketersediaan tinggi, dan yang memahami pusat data yang mencakup pendaftaran layanan sederhana, pemeriksaan kesehatan, deteksi kegagalan, dan penyimpanan bernilai kunci. Ini dibangun berdasarkan premis bahwa setiap node 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 bersifat sumber terbuka; unduhan yang dikompilasi tersedia untuk macOS, FreeBSD, Linux, Solaris, dan Windows.
Mengapa memilih Consul?
Sebagai Penyedia Keanggotaan Orleans, Consul adalah pilihan yang baik ketika Anda perlu memberikan solusi lokal yang tidak mengharuskan pelanggan potensial 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 keanggotaan Orleans 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 masuk akal untuk mengulanginya di sini. Namun, demi kenyamanan Anda, kami menyertakan panduan ini agar Anda dapat segera menjalankan Orleans dengan agen Konsul mandiri.
Buat folder untuk menginstal Consul ke dalam (misalnya C:\Consul).
Buat subfolder: C:\Consul\Data (Consul tidak membuat direktori ini jika tidak ada).
Unduh dan unzip Consul.exe ke C:\Consul.
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
: Memerintahkan 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 hanya 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'
: Memberi tahu Consul pada IP mana layanan akan dibuka.
Ada banyak parameter lain, dan opsi untuk menggunakan file konfigurasi JSON. Untuk daftar lengkap opsi, lihat dokumentasi Konsul.
-
Verifikasi bahwa 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 menggunakan Consul sebagai penyedia keanggotaan, proyek silo Anda harus mereferensikan paket Microsoft.Orleans.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:
- Membuat IHostBuilder dengan default dari Host.CreateDefaultBuilder().
- Menghubungkan panggilan ke UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>) yang mengonfigurasi silo Orleans.
- Mengingat ISiloBuilder memanggil UseConsulSiloClustering.
- Mengonfigurasi penyedia keanggotaan kluster untuk menggunakan Consul, dengan mengacu pada Consul
address
.
Untuk mengonfigurasi klien, referensikan paket NuGet yang sama dan panggil metode ekstensi UseConsulClientClustering.
SDK Pelanggan
Jika Anda tertarik menggunakan Consul untuk penemuan layanan Anda, ada SDK Klien untuk bahasa yang paling populer.
Detail implementasi
Penyedia Tabel Keanggotaan menggunakan fungsionalitas penyimpanan Kunci/Nilai Konsul dengan operasi Check-And-Set (CAS). Ketika setiap Silo dimulai, ia mendaftarkan dua entri kunci-nilai: satu yang berisi detail Silo dan satu lagi mencatat saat terakhir Silo melaporkan bahwa ia masih beroperasi. 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 Protokol Manajemen Kluster Orleans.
Setelah Silo beroperasi, Anda dapat melihat entri ini di http://localhost:8500/v1/kv/?keys&pretty
di browser web Anda, yang akan 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 orleans
, yang diprogram secara permanen di penyedia dan dimaksudkan untuk menghindari konflik ruang kunci 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 yang dikodekan Base64 UTF-8 Value
memberi Anda data keanggotaan Orleans yang sebenarnya:
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
.
Keterbatasan
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, Penyedia Keanggotaan konsul Orleans hanya menerapkan protokol keanggotaan dasar Orleans, seperti yang dijelaskan dalam manajemen Kluster di Orleans, dan tidak mendukung Protokol Keanggotaan yang Diperpanjang. 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 dalam Consul saat ini tidak direplikasi antar pusat data Consul. Ada proyek terpisah yang bertujuan untuk mengatasi upaya replikasi ini, namun belum ada bukti yang menunjukkan bahwa proyek tersebut dapat 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 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 untuk Anda.
Potensi penyempurnaan di masa mendatang
- Buktikan bahwa proyek replikasi Consul KV dapat mendukung kluster Orleans di lingkungan WAN antara beberapa pusat data Consul.
- Terapkan Tabel Pengingat di Consul.
- Terapkan Protokol Keanggotaan yang Diperluas. Tim di belakang Consul berencana untuk menerapkan operasi atomik. Setelah fungsionalitas ini tersedia, batasan di penyedia dapat dihapus.