menuTicketing

Ticketing 서버 배포

실행 환경
모드
bash
클라이언트 연결 예시
rust
nc 빠른 테스트
bash

환경변수

ticketing.toml(선택)의 각 항목은 전부 환경변수로도 넣을 수 있습니다. 우선순위는 환경변수 > ticketing.toml > 기본값이고, 키·불리언 값은 대소문자를 구분하지 않습니다. Docker 이미지는 scratch 기반이라 설정은 환경변수로 주입하는 것이 기본입니다(설정 파일을 쓰려면 마운트 후 CONFIG로 경로 지정).

환경변수기본값설명
PORT (SERVER_PORT)5225TCP 리슨 포트. 클러스터 모드에서는 무시되고 CLUSTER_SELF의 포트를 씀
DEBUG (SERVER_DEBUG)빌드에 따름1/true면 debug 로그
SOCKET_BIND0.0.0.0리슨 주소
SOCKET_NODELAYtrueTCP_NODELAY
SOCKET_READ_BUF_LEN4096연결당 읽기 버퍼(바이트)
SOCKET_REPLY_QUEUE1024연결당 응답 큐 길이
SOCKET_REPLY_BATCH64한 번의 write로 모아 보내는 최대 응답 수
SWEEP_INTERVAL_SECS5만료 키 청소 주기(초)
CLUSTER_SELF(없음)이 노드의 광고 주소 host:port. 있으면 클러스터 모드
CLUSTER_PEERS(없음)노드 주소 목록(콤마 구분). 순서 = 승격 우선순위, self 포함, 2개 이상
CONFIG./conf/ticketing.toml설정 파일 경로

싱글 vs 클러스터

  • 싱글(1대): [cluster](또는 CLUSTER_*)가 없으면 싱글 노드. 가장 빠르지만 재기동 시 짧은 순단이 있고 상태는 인메모리라 재기동하면 사라집니다(lease가 안전망).
  • 클러스터(무정지): 최소 2대. 각 노드는 동일한 CLUSTER_PEERS(우선순위 순)와 자기 자신을 가리키는 CLUSTER_SELF를 갖습니다. 살아 있는 노드 중 우선순위가 가장 높은 하나가 액티브가 되고 나머지는 스탠바이로 실시간 복제를 받습니다. 자세한 원리는 동작 원리프로토콜 — 서버 ↔ 서버를 참고하세요.

Kubernetes 클러스터 배포는 StatefulSet + 헤드리스 서비스를 씁니다. 각 파드가 안정적인 DNS 이름(ticketing-0.ticketing…, ticketing-1.ticketing…)을 갖도록 해서, 그 이름들을 우선순위 순으로 CLUSTER_PEERS에 넣고 각 파드의 CLUSTER_SELF는 downward API(metadata.name)로 자동 주입합니다.

무정지 재기동(롤링)

  1. 스탠바이부터 하나씩 재기동합니다(액티브는 계속 서비스).
  2. 마지막으로 액티브를 종료(Ctrl+C)하면 핸드오프로 스탠바이가 승격하고 클라이언트가 넘어갑니다.
  3. 내렸던 옛 액티브를 다시 올리면 현재 액티브의 스탠바이로 합류합니다(자동 페일백 없음).

참고