Інфраструктура

Інфраструктура ByNinja Trading Bot розроблена для довготривалої автономної роботи в нестабільних реальних умовах. Системи криптотрейдингу повинні залишатися працездатними 24/7, автоматично відновлюватися після неочікуваних збоїв та мінімізувати час простою без необхідності ручного втручання.

Для досягнення цього інфраструктура включає:

  • Watchdog цикли виконання
  • Автоматичне відновлення після збоїв
  • Оркестрація перезапуску процесів
  • Керування безпечним завершенням роботи
  • Персистентне середовище виконання
  • Ізольоване виконання модулів

Вся архітектура побудована навколо відмовостійкості та безперервності роботи.


Скрипти Watchdog

Основний шар виконання системи керується за допомогою спеціального скрипта запуску watchdog:

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

Скрипт watchdog діє як легкий супервізор процесів, відповідальний за:

  • Валідацію середовища
  • Активацію віртуального середовища
  • Запуск модулів
  • Виявлення збоїв
  • Керування автоматичним перезапуском

Цей підхід дозволяє уникнути необхідності у зовнішніх менеджерах процесів під час розробки або легких розгортань, водночас забезпечуючи стійкість на рівні продакшену.


Валідація середовища

Перед запуском будь-якого модуля скрипт перевіряє:

  • Вхідні аргументи
  • Наявність віртуального середовища
  • Конфігурацію виконання

Приклад:

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

Скрипт також гарантує наявність віртуального середовища Python:

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

Це запобігає випадковому запуску зі зламаними залежностями або неправильними параметрами виконання.


Ізольоване середовище виконання

Інфраструктура активує виділене віртуальное середовище Python перед виконанням:

Code
source "./env/bin/activate"

Це гарантує:

  • Ізоляцію залежностей
  • Стабільні версії пакетів
  • Відтворювану поведінку під час виконання
  • Чисте розділення розгортань

Запускач також явно визначає PYTHONPATH:

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

Це забезпечує надійні імпорти незалежно від поточного контексту оболонки або місця розгортання.


Система автоперезапуску

Однією з найважливіших функцій інфраструктури є цикл автоматичного перезапуску.

Запускач постійно відстежує процес бота:

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

Якщо процес несподівано завершується, watchdog негайно виявляє збій і автоматично перезапускає модуль.

Логіка виявлення збоїв:

Code
EXIT_CODE=$?

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

Це створює модель виконання з самовідновленням, здатну оговтатися від:

  • Неочікуваних винятків
  • Мережевих збоїв
  • Відключень API
  • Взаємних блокувань (Deadlocks)
  • Тимчасової нестабільності системи
  • Зовнішнього завершення процесу

Контрольована затримка перезапуску

Інфраструктура навмисно додає затримку перед перезапуском:

Code
RESTART_DELAY=3

Це запобігає:

  • Нескінченним циклам швидких перезапусків
  • Стрибкам навантаження на CPU під час повторюваних збоїв
  • Надмірній кількості запитів до API
  • Заповненню логів

Коротка затримка дає зовнішнім системам час на відновлення перед повторною спробою виконання.


Архітектура окремих сервісів

Система розділяє інфраструктуру на два сервіси, які можуть перезапускатися незалежно:

СервісВідповідальність
Модуль TradingТорговий рушій та виконання стратегії
Модуль TelegramВіддалене керування та сповіщення

Ця ізоляція надає декілька переваг:

  • Одна підсистема може вийти з ладу незалежно
  • Моніторинг Telegram може залишатися онлайн під час збоїв у торгівлі
  • Торгівля може продовжуватися, навіть якщо Telegram не працює
  • Простіше налагодження та обслуговування

Модулі взаємодіють через внутрішній рівень TCP, а не через пряме зв'язування.


Безпечне завершення роботи

Інфраструктура підтримує контрольовану поведінку завершення роботи за допомогою обробки сигналів.

Приклад:

Code
signal.signal(signal.SIGINT, signal_handler)

Під час завершення роботи:

  • Торгівля зупиняється безпечно
  • Персистентні дані скидаються на диск
  • TCP-з'єднання закриваються чисто
  • Потоки завершуються коректно

Приклад процесу завершення роботи:

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

Це критично важливо в торгових системах, оскільки неправильне завершення роботи може призвести до:

  • Втрати стану позицій
  • Пошкодження персистентних даних
  • Несумісних даних для відновлення
  • Незакритих ордерів

Філософія відновлення після збоїв

Інфраструктура дотримується простого, але потужного принципу:

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

Бот розроблений з припущенням, що збої неминучі в розподілених системах, які працюють тривалий час.

Замість того, щоб намагатися запобігти кожному можливому збою, архітектура фокусується на:

  • Швидкому виявленні
  • Надійному перезапуску
  • Відновленні персистентного стану
  • Безперервності роботи

Це кардинально підвищує довгострокову надійність.


Інтеграція з рівнем персистентності

Інфраструктура тісно співпрацює з підсистемою персистентності.

Перед завершенням роботи або перезапуском:

  • Стан виконання зберігається
  • Позиції зберігаються
  • Конфігурація залишається недоторканою
  • Метадані відновлення зберігаються

Після перезапуску:

  • Стан перезавантажується автоматично
  • Торгівля відновлюється безпечно
  • Існуючі позиції відновлюються
  • Зв'язок з Telegram повертається автоматично

Це створює стійкий конвеєр відновлення навіть після неочікуваних збоїв або перезапусків сервера.


Моніторинг інфраструктури Telegram

Підсистема Telegram також діє як легкий шар операційного моніторингу.

Інфраструктурні події пересилаються безпосередньо в Telegram:

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

Це дає операторам миттєву видимість:

  • Збоїв
  • Перезапусків
  • Завершень роботи
  • Подій відновлення
  • Проблем з TCP-підключенням

В результаті ми отримуємо віддалено спостережувану інфраструктуру, яка не потребує складних панелей моніторингу.


Дизайн надійності, орієнтований на продакшн

Інфраструктура ByNinja поєднує кілька операційних концепцій рівня продакшену:

  • Watchdog цикли виконання
  • Автоматичне відновлення після збоїв
  • Керування безпечним завершенням роботи
  • Персистентний стан виконання
  • Ізоляція сервісів
  • Поведінка перезапуску з самовідновленням
  • Віддалений моніторинг через Telegram
  • Незалежне відновлення підсистем

Разом ці компоненти створюють інфраструктуру, здатну підтримувати безперервні автономні торгові операції з мінімальним ручним наглядом.