menuTicketing

Deployment Ticketing Server

Environment
Mode
bash
Contoh koneksi klien
rust
Uji cepat dengan nc
bash

Environment Variable

Setiap entri ticketing.toml (opsional) juga dapat diisikan lewat environment variable. Urutan prioritas adalah environment variable > ticketing.toml > nilai default, dan key serta nilai boolean tidak case-sensitive. Docker image berbasis scratch sehingga konfigurasi lewat environment variable adalah cara default (untuk memakai file konfigurasi, mount lalu tentukan path via CONFIG).

Environment VariableDefaultDeskripsi
PORT (SERVER_PORT)5225Port listen TCP. Diabaikan pada mode cluster, memakai port dari CLUSTER_SELF
DEBUG (SERVER_DEBUG)tergantung build1/true untuk log debug
SOCKET_BIND0.0.0.0Alamat listen
SOCKET_NODELAYtrueTCP_NODELAY
SOCKET_READ_BUF_LEN4096Buffer baca per koneksi (byte)
SOCKET_REPLY_QUEUE1024Panjang antrean respons per koneksi
SOCKET_REPLY_BATCH64Jumlah maksimum respons yang digabung dalam satu write
SWEEP_INTERVAL_SECS5Interval pembersihan key yang kedaluwarsa (detik)
CLUSTER_SELF(tidak ada)Alamat yang diiklankan node ini, host:port. Jika ada, mode cluster aktif
CLUSTER_PEERS(tidak ada)Daftar alamat node (dipisah koma). Urutan = prioritas promosi, harus menyertakan self, minimal 2
CONFIG./conf/ticketing.tomlPath file konfigurasi

Single vs Cluster

  • Single (1 node): jika [cluster] (atau CLUSTER_*) tidak ada, node berjalan sebagai single node. Paling cepat, tetapi terjadi gangguan singkat saat restart dan state berada di memori sehingga hilang saat restart (lease menjadi jaring pengaman).
  • Cluster (tanpa downtime): minimal 2 node. Setiap node memiliki CLUSTER_PEERS yang sama (berurutan sesuai prioritas) dan CLUSTER_SELF yang menunjuk ke dirinya sendiri. Di antara node yang hidup, satu dengan prioritas tertinggi menjadi active dan sisanya menjadi standby yang menerima replikasi real-time. Untuk prinsip kerja lebih detail, lihat Cara Kerja dan Protokol — Server ↔ Server.

Deployment cluster Kubernetes menggunakan StatefulSet + headless service. Setiap pod diberi nama DNS yang stabil (ticketing-0.ticketing…, ticketing-1.ticketing…), nama-nama tersebut dimasukkan ke CLUSTER_PEERS sesuai urutan prioritas, dan CLUSTER_SELF setiap pod disuntikkan otomatis lewat downward API (metadata.name).

Rolling Restart (Tanpa Downtime)

  1. Restart standby terlebih dahulu satu per satu (active tetap melayani).
  2. Terakhir, matikan active (Ctrl+C), lalu melalui handoff standby akan dipromosikan dan klien berpindah.
  3. Menyalakan kembali active lama yang dimatikan akan membuatnya bergabung sebagai standby dari active saat ini (tidak ada failback otomatis).

Lihat Juga