Infrastruttura

L'infrastruttura del Trading Bot ByNinja è progettata per un funzionamento autonomo a lungo termine in ambienti reali instabili. I sistemi di trading crypto devono rimanere operativi 24/7, recuperare automaticamente da guasti imprevisti e minimizzare i tempi di inattività senza richiedere interventi manuali.

Per raggiungere questo obiettivo, l'infrastruttura include:

  • Loop di esecuzione Watchdog
  • Recupero automatico da crash
  • Orchestrazione riavvio processi
  • Gestione spegnimento graduale
  • Ambiente runtime persistente
  • Esecuzione modulo isolato

L'intera architettura è costruita attorno alla tolleranza ai guasti e alla continuità operativa.


Script Watchdog

Il livello di esecuzione principale del sistema è controllato attraverso uno script di lancio watchdog dedicato:

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

Lo script watchdog agisce come un supervisore di processo leggero responsabile di:

  • Validazione ambiente
  • Attivazione ambiente virtuale
  • Avvio modulo
  • Rilevamento crash
  • Gestione riavvio automatico

Questo approccio evita la necessità di gestori di processi esterni durante lo sviluppo o distribuzioni leggere, fornendo comunque resilienza di tipo produttivo.


Validazione Ambiente

Prima di avviare qualsiasi modulo, lo script valida:

  • Argomenti di input
  • Esistenza ambiente virtuale
  • Configurazione runtime

Esempio:

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

Lo script assicura anche che l'ambiente virtuale Python esista:

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

Questo previene l'avvio accidentale con dipendenze rotte o parametri di esecuzione errati.


Ambiente Runtime Isolato

L'infrastruttura attiva un ambiente virtuale Python dedicato prima dell'esecuzione:

Code
source "./env/bin/activate"

Questo garantisce:

  • Isolamento dipendenze
  • Versioni pacchetti stabili
  • Comportamento runtime riproducibile
  • Separazione distribuzione pulita

Il launcher definisce anche esplicitamente PYTHONPATH:

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

Questo garantisce import affidabili indipendentemente dal contesto della shell corrente o dalla posizione di distribuzione.


Sistema di Riavvio Automatico

Una delle caratteristiche infrastrutturali più importanti è il loop di riavvio automatico.

Il launcher monitora continuamente il processo del bot:

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

Se il processo esce inaspettatamente, il watchdog rileva immediatamente il guasto e rilancia il modulo automaticamente.

Logica di rilevamento crash:

Code
EXIT_CODE=$?

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

Questo crea un modello di esecuzione auto-riparante capace di recuperare da:

  • Eccezioni impreviste
  • Guasti di rete
  • Interruzioni API
  • Deadlock
  • Instabilità temporanea del sistema
  • Terminazione processo esterno

Ritardo di Riavvio Controllato

L'infrastruttura aggiunge intenzionalmente un tempo di raffreddamento al riavvio:

Code
RESTART_DELAY=3

Questo previene:

  • Loop di riavvio rapido infiniti
  • Picchi di CPU durante crash ripetuti
  • Sovraccarico API
  • Inondazione log

Il breve ritardo dà ai sistemi esterni il tempo di recuperare prima di riprovare l'esecuzione.


Architettura Servizi Separati

Il sistema separa l'infrastruttura in due servizi riavviabili indipendentemente:

ServizioResponsabilità
Modulo TradingMotore di trading ed esecuzione strategia
Modulo TelegramControllo remoto e notifiche

Questo isolamento fornisce diversi vantaggi:

  • Un sottosistema può fallire indipendentemente
  • Il monitoraggio Telegram può rimanere online durante i crash del trading
  • Il trading può continuare anche se Telegram fallisce
  • Debug e manutenzione più facili

I moduli comunicano attraverso il livello TCP interno piuttosto che tramite accoppiamento diretto.


Gestione Spegnimento Graduale

L'infrastruttura supporta il comportamento di spegnimento controllato utilizzando la gestione dei segnali.

Esempio:

Code
signal.signal(signal.SIGINT, signal_handler)

Allo spegnimento:

  • Il trading si ferma in modo sicuro
  • La persistenza viene scaricata su disco
  • Le connessioni TCP si chiudono pulitamente
  • I thread terminano gradualmente

Esempio di flusso di spegnimento:

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

Questo è critico nei sistemi di trading perché spegnimenti impropri potrebbero altrimenti portare a:

  • Perdita dello stato della posizione
  • Persistenza corrotta
  • Dati di recupero incoerenti
  • Ordini non chiusi

Filosofia Recupero Crash

L'infrastruttura segue un principio semplice ma potente:

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

Il bot è progettato presupponendo che i crash siano inevitabili nei sistemi distribuiti a lungo termine.

Invece di cercare di prevenire ogni possibile guasto, l'architettura si concentra su:

  • Rilevamento rapido
  • Riavvio affidabile
  • Recupero stato persistente
  • Continuità operativa

Questo aumenta drasticamente l'affidabilità a lungo termine.


Integrazione con Livello di Persistenza

L'infrastruttura lavora a stretto contatto con il sottosistema di persistenza.

Prima dello spegnimento o riavvio:

  • Lo stato runtime viene salvato
  • Le posizioni vengono persistite
  • La configurazione rimane intatta
  • I metadati di recupero vengono memorizzati

Dopo il riavvio:

  • Lo stato si ricarica automaticamente
  • Il trading riprende in modo sicuro
  • Le posizioni esistenti vengono ripristinate
  • La connettività Telegram ritorna automaticamente

Questo crea una pipeline di recupero resiliente anche dopo crash imprevisti o riavvii del server.


Monitoraggio Infrastruttura Telegram

Il sottosistema Telegram agisce anche come un leggero livello di monitoraggio operativo.

Gli eventi infrastrutturali vengono inoltrati direttamente a Telegram:

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

Questo dà agli operatori visibilità immediata su:

  • Crash
  • Riavvii
  • Spegnimenti
  • Eventi di recupero
  • Problemi di connettività TCP

Il risultato è un'infrastruttura osservabile a distanza senza richiedere complessi dashboard di monitoraggio.


Design Affidabilità Orientato alla Produzione

L'infrastruttura ByNinja combina diversi concetti operativi di livello produttivo:

  • Loop di esecuzione Watchdog
  • Recupero automatico da crash
  • Gestione spegnimento graduale
  • Stato runtime persistente
  • Isolamento servizi
  • Comportamento di riavvio auto-riparante
  • Monitoraggio remoto tramite Telegram
  • Recupero sottosistema indipendente

Insieme, questi componenti creano un'infrastruttura capace di supportare operazioni di trading autonome continue con minima supervisione manuale.