WebSocket Event Hub & Skalabilitas Telemetri
Cockpit menggunakan hub distribusi peristiwa real-time untuk mengalirkan peristiwa operasional dan pembaruan telemetri ke browser klien. Arsitektur ini memungkinkan sinkronisasi antarmuka pengguna secara instan tanpa memerlukan pemungutan suara (polling) dari sisi klien.
Arsitektur Perutean Peristiwa
Hub peristiwa menggunakan WebSocket untuk koneksi klien dan notifikasi advisory PostgreSQL untuk komunikasi antar-node:
- Aliran WebSocket Upstream: Klien membangun koneksi WebSocket persisten ke endpoint
/api/v1/events. Saluran ini tetap terbuka, memungkinkan server untuk mengirimkan peristiwa secara langsung ke browser. - Perutean Antar-Node (
pg_notify): Dalam penerapan Cockpit multi-instance, klien mungkin terhubung ke node yang berbeda. Ketika perubahan status terjadi pada host Vapor yang terhubung ke Cockpit Instans A, instans tersebut menulis peristiwa ke database dan memanggil saluranpg_notifyPostgreSQL. Cockpit Instans B, yang mendengarkan pada saluran yang sama, menerima pemberitahuan tersebut dan meneruskannya ke klien WebSocket yang terhubung secara lokal.
┌──────────────┐ WebSocket ┌──────────────┐ pg_notify ┌──────────────┐ WebSocket ┌──────────┐
│ Vapor Host │───────────────►│ Cockpit #1 │───────────────►│ Cockpit #2 │───────────────►│ Browser │
│ (Physical │ │ (Node Aktif) │ │ (Node Aktif) │ │ Klien │
│ Server) │ └──────────────┘ └──────────────┘ └──────────┘
└──────────────┘Struktur Frame Pesan
Semua peristiwa yang dipertukarkan melalui antarmuka WebSocket dibingkai menggunakan skema JSON standar:
json
{
"type": "<message_type>",
"payload": {
"kind": "<channel_name>",
"data": { ... }
}
}Jenis Permintaan Klien
auth: Mengirimkan kredensial JSON Web Token (JWT) untuk mengautentikasi sesi.subscribe: Mendaftarkan sesi klien untuk menerima pembaruan dari saluran peristiwa tertentu.unsubscribe: Membatalkan pendaftaran sesi klien dari saluran peristiwa.
Jenis Respons Server
auth: Mengonfirmasi status autentikasi.event: Mengirimkan payload yang terkait dengan saluran peristiwa yang diikuti.error: Menunjukkan kesalahan permintaan (misalnya, token kedaluwarsa atau kegagalan izin).
Saluran Peristiwa yang Didukung
Untuk menerima pembaruan metrik atau peristiwa, browser klien berlangganan ke saluran tertentu:
| Nama Saluran | Deskripsi |
|---|---|
host-metrics:<host_id> | Mengalirkan metrik CPU, memori, dan I/O disk tingkat host secara real-time. |
vm-events:<host_id> | Menyiarkan pembaruan siklus hidup mesin virtual (misalnya, peristiwa start, shutdown, atau crash VM) untuk host tertentu. |
vm-metrics:<host_id> | Mengalirkan bagan kinerja gabungan untuk semua mesin virtual yang berjalan pada host yang ditentukan. |
vm-volume-migration-events:<uuid>:<disk> | Mengalirkan indikator kemajuan (0% hingga 100%) untuk proses migrasi penyimpanan yang aktif. |
task-events | Menyiarkan pembaruan status untuk operasi latar belakang sistem (misalnya, pencadangan VM, pembuatan templat, atau sinkronisasi host). |