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过期 key 清理周期(秒)
CLUSTER_SELF(无)该节点的对外公布地址 host:port。若设置,则进入集群模式
CLUSTER_PEERS(无)节点地址列表(逗号分隔)。顺序 = 晋升优先级,需包含 self,至少 2 个
CONFIG./conf/ticketing.toml配置文件路径

单机 vs 集群

  • 单机(1 台):若没有 [cluster](或 CLUSTER_*),即为单机节点。速度最快,但重启时会有短暂 中断,且状态保存在内存中,重启后即丢失(lease 是安全网)。
  • 集群(无停机):至少 2 台。各节点拥有相同的 CLUSTER_PEERS(按优先级排序)以及指向 自身的 CLUSTER_SELF。存活节点中优先级最高的一个成为主节点,其余节点作为备用节点 实时接收复制数据。详细原理请参阅工作原理协议 — 服务器 ↔ 服务器

Kubernetes 集群部署使用 StatefulSet + 无头服务(headless service)。让每个 Pod 拥有稳定的 DNS 名称(ticketing-0.ticketing…ticketing-1.ticketing…),将这些名称按优先级顺序填入 CLUSTER_PEERS,每个 Pod 的 CLUSTER_SELF 则通过 downward API(metadata.name)自动注入。

无停机重启(滚动升级)

  1. 先从备用节点开始逐一重启(主节点持续提供服务)。
  2. 最后关闭主节点Ctrl+C)时,会通过交接使备用节点晋升,客户端随之切换过去。
  3. 重新启动之前下线的旧主节点后,它会作为当前主节点的备用节点重新加入(不会自动降级回退)。

参考

  • 镜像: sarolab/ticketing · Github: saro-lab/ticketing
  • 请在客户端(broker)中注册所有节点地址,以便发生故障时能自动切换。各语言的具体用法请参阅