menuTicketing

Implantação do Servidor Ticketing

Ambiente
Modo
bash
Exemplo de conexão do cliente
rust
Teste rápido com nc
bash

Variáveis de ambiente

Cada item do ticketing.toml (opcional) também pode ser definido como variável de ambiente. A prioridade é variável de ambiente > ticketing.toml > valor padrão, e chaves e valores booleanos não diferenciam maiúsculas de minúsculas. A imagem Docker é baseada em scratch, então injetar a configuração via variáveis de ambiente é o padrão (para usar um arquivo de configuração, monte-o e informe o caminho com CONFIG).

Variável de ambientePadrãoDescrição
PORT (SERVER_PORT)5225Porta TCP de escuta. Ignorada em modo cluster, usa a porta de CLUSTER_SELF
DEBUG (SERVER_DEBUG)depende do buildSe 1/true, ativa log de debug
SOCKET_BIND0.0.0.0Endereço de escuta
SOCKET_NODELAYtrueTCP_NODELAY
SOCKET_READ_BUF_LEN4096Buffer de leitura por conexão (bytes)
SOCKET_REPLY_QUEUE1024Tamanho da fila de respostas por conexão
SOCKET_REPLY_BATCH64Número máximo de respostas agrupadas em uma única escrita (write)
SWEEP_INTERVAL_SECS5Intervalo de limpeza de chaves expiradas (segundos)
CLUSTER_SELF(nenhum)Endereço anunciado deste nó, no formato host:port. Se definido, ativa o modo cluster
CLUSTER_PEERS(nenhum)Lista de endereços de nós (separados por vírgula). A ordem = prioridade de promoção, deve incluir self, com 2 ou mais entradas
CONFIG./conf/ticketing.tomlCaminho do arquivo de configuração

Single vs. cluster

  • Single (1 servidor): sem [cluster] (ou CLUSTER_*), o nó roda isolado. É o modo mais rápido, mas há uma breve interrupção ao reiniciar, e o estado é mantido em memória, sendo perdido ao reiniciar (o lease atua como rede de segurança).
  • Cluster (sem interrupção): mínimo de 2 servidores. Cada nó tem o mesmo CLUSTER_PEERS (na ordem de prioridade) e o seu próprio CLUSTER_SELF apontando para si mesmo. Entre os nós vivos, o de maior prioridade se torna ativo, e os demais ficam em standby recebendo replicação em tempo real. Para entender o funcionamento em detalhes, consulte Princípio de funcionamento e Protocolo — servidor ↔ servidor.

A implantação em cluster no Kubernetes usa StatefulSet + serviço headless. Cada pod recebe um nome DNS estável (ticketing-0.ticketing…, ticketing-1.ticketing…), esses nomes são colocados em CLUSTER_PEERS na ordem de prioridade, e o CLUSTER_SELF de cada pod é injetado automaticamente via downward API (metadata.name).

Reinicialização sem interrupção (rolling)

  1. Reinicie primeiro os nós em standby, um de cada vez (o ativo continua servindo).
  2. Por último, encerre o ativo (Ctrl+C); com isso, o handoff promove um standby e os clientes migram automaticamente.
  3. Ao subir novamente o antigo ativo que foi derrubado, ele se junta como standby do ativo atual (não há failback automático).

Veja também