Infraestrutura

A infraestrutura do Bot de Trading ByNinja é projetada para operação autónoma de longa duração em ambientes reais instáveis. Os sistemas de trading de criptomoedas devem permanecer operacionais 24/7, recuperar de falhas inesperadas automaticamente e minimizar o tempo de inatividade sem exigir intervenção manual.

Para isso, a infraestrutura inclui:

  • Ciclos de execução de vigilância (watchdog)
  • Recuperação automática de falhas (crashes)
  • Orquestração de reinicialização de processos
  • Tratamento de encerramento gracioso (graceful shutdown)
  • Ambiente de execução persistente
  • Execução isolada de módulos

Toda a arquitetura é construída em torno da tolerância a falhas e da continuidade operacional.


Scripts de Vigilância (Watchdog)

A camada de execução principal do sistema é controlada através de um script de lançamento watchdog dedicado:

Code
./run.sh trading
./run.sh telegram

O script watchdog atua como um supervisor de processos leve responsável por:

  • Validação do ambiente
  • Ativação do ambiente virtual
  • Inicialização do módulo
  • Detecção de falhas (crashes)
  • Tratamento de reinicialização automática

Esta abordagem evita a necessidade de gestores de processos externos durante o desenvolvimento ou implantações leves, enquanto ainda fornece resiliência de estilo de produção.


Validação do Ambiente

Antes de iniciar qualquer módulo, o script valida:

  • Argumentos de entrada
  • Existência do ambiente virtual
  • Configuração de tempo de execução

Exemplo:

Code
if [[ "$MODULE" != "trading" && "$MODULE" != "telegram" ]]; then
    echo "Invalid argument"
    exit 1
fi

O script também garante que o ambiente virtual Python existe:

Code
if [ ! -f "$VENV_PATH" ]; then
    echo "Virtual environment not found"
    exit 1
fi

Isso evita a inicialização acidental com dependências quebradas ou parâmetros de execução incorretos.


Ambiente de Execução Isolado

A infraestrutura ativa um ambiente virtual Python dedicado antes da execução:

Code
source "./env/bin/activate"

Isso garante:

  • Isolamento de dependências
  • Versões de pacotes estáveis
  • Comportamento de execução reproduzível
  • Separação limpa de implantação

O lançador também define explicitamente o PYTHONPATH:

Code
PYTHONPATH="$(pwd)/src" python3 -c "$CMD"

Isso garante importações confiáveis, independentemente do contexto atual do shell ou localização da implantação.


Sistema de Reinicialização Automática

Uma das características de infraestrutura mais importantes é o ciclo de reinicialização automática.

O lançador monitoriza continuamente o processo do bot:

Code
while true; do
    PYTHONPATH="$(pwd)/src" python3 -c "$CMD"
done

Se o processo sair inesperadamente, o watchdog deteta imediatamente a falha e relança o módulo automaticamente.

Lógica de deteção de falhas (crash):

Code
EXIT_CODE=$?

if [ $EXIT_CODE -ne 0 ]; then
    echo "[CRASH] Restarting..."
    sleep $RESTART_DELAY
fi

Isso cria um modelo de execução auto-curável capaz de recuperar de:

  • Exceções inesperadas
  • Falhas de rede
  • Interrupções de API
  • Deadlocks
  • Instabilidade temporária do sistema
  • Terminação de processo externa

Atraso de Reinicialização Controlado

A infraestrutura adiciona intencionalmente um tempo de arrefecimento (cooldown) para reinicialização:

Code
RESTART_DELAY=3

Isso previne:

  • Ciclos de reinicialização rápida infinitos
  • Picos de CPU durante falhas repetidas
  • Sobrecarga de API
  • Inundação de logs

O pequeno atraso dá tempo aos sistemas externos para recuperar antes de tentar novamente a execução.


Arquitetura de Serviços Separados

O sistema separa a infraestrutura em dois serviços reiniciáveis independentemente:

ServiçoResponsabilidade
Módulo de TradingMotor de trading e execução de estratégia
Módulo TelegramControlo remoto e notificações

Este isolamento fornece várias vantagens:

  • Um subsistema pode falhar independentemente
  • A monitorização por Telegram pode permanecer online durante falhas (crashes) do trading
  • O trading pode continuar mesmo se o Telegram falhar
  • Depuração e manutenção mais fáceis

Os módulos comunicam através da camada TCP interna em vez de acoplamento direto.


Tratamento de Encerramento Gracioso (Graceful Shutdown)

A infraestrutura suporta comportamento de encerramento controlado usando tratamento de sinais.

Exemplo:

Code
signal.signal(signal.SIGINT, signal_handler)

No encerramento:

  • O trading para de forma segura
  • A persistência é descarregada (flushed) para o disco
  • As conexões TCP fecham de forma limpa
  • As threads terminam graciosamente

Exemplo de fluxo de encerramento:

Code
🛑 Shutdown signal received...
💾 Forcing save to disk...
✅ PersistentMap stopped

Isto é crítico em sistemas de trading porque encerramentos inadequados podem, de outra forma, levar a:

  • Perda do estado da posição
  • Persistência corrompida
  • Dados de recuperação inconsistentes
  • Ordens não fechadas

Filosofia de Recuperação de Falhas (Crash Recovery)

A infraestrutura segue um princípio simples mas poderoso:

Code
Crash → Detect → Restart → Recover State → Continue Trading

O bot é projetado sob a premissa de que falhas (crashes) são inevitáveis em sistemas distribuídos de longa duração.

Em vez de tentar prevenir todas as falhas possíveis, a arquitetura foca-se em:

  • Detecção rápida
  • Reinicialização confiável
  • Recuperação de estado persistente
  • Continuidade operacional

Isso aumenta drasticamente a fiabilidade a longo prazo.


Integração com a Camada de Persistência

A infraestrutura trabalha em estreita colaboração com o subsistema de persistência.

Antes do encerramento ou reinicialização:

  • O estado de execução é salvo
  • As posições são persistidas
  • A configuração permanece intacta
  • Os metadados de recuperação são armazenados

Após a reinicialização:

  • O estado é recarregado automaticamente
  • O trading recomeça de forma segura
  • As posições existentes são restauradas
  • A conectividade com o Telegram retorna automaticamente

Isso cria um pipeline de recuperação resiliente mesmo após falhas (crashes) inesperadas ou reinicializações do servidor.


Monitorização da Infraestrutura via Telegram

O subsistema Telegram também atua como uma camada leve de monitorização operacional.

Eventos de infraestrutura são encaminhados diretamente para o Telegram:

Code
[CRASH] Module trading exited with code 1
Restarting in 3 seconds...

Isso dá aos operadores visibilidade instantânea sobre:

  • Falhas (crashes)
  • Reinicializações
  • Encerramentos
  • Eventos de recuperação
  • Problemas de conectividade TCP

O resultado é uma infraestrutura observável remotamente sem exigir painéis de monitorização complexos.


Design de Fiabilidade Orientado à Produção

A infraestrutura ByNinja combina vários conceitos operacionais de nível de produção:

  • Ciclos de execução de vigilância (watchdog)
  • Recuperação automática de falhas (crashes)
  • Tratamento de encerramento gracioso (graceful shutdown)
  • Estado de execução persistente
  • Isolamento de serviços
  • Comportamento de reinicialização auto-curável
  • Monitorização remota através do Telegram
  • Recuperação independente de subsistemas

Juntos, estes componentes criam uma infraestrutura capaz de suportar operações de trading autónomas contínuas com supervisão manual mínima.