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:
./run.sh trading
./run.sh telegramO 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:
if [[ "$MODULE" != "trading" && "$MODULE" != "telegram" ]]; then
echo "Invalid argument"
exit 1
fiO script também garante que o ambiente virtual Python existe:
if [ ! -f "$VENV_PATH" ]; then
echo "Virtual environment not found"
exit 1
fiIsso 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:
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:
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:
while true; do
PYTHONPATH="$(pwd)/src" python3 -c "$CMD"
doneSe 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):
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo "[CRASH] Restarting..."
sleep $RESTART_DELAY
fiIsso 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:
RESTART_DELAY=3Isso 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ço | Responsabilidade |
|---|---|
| Módulo de Trading | Motor de trading e execução de estratégia |
| Módulo Telegram | Controlo 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:
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:
🛑 Shutdown signal received...
💾 Forcing save to disk...
✅ PersistentMap stoppedIsto é 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:
Crash → Detect → Restart → Recover State → Continue TradingO 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:
[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.