[Backend · Bazy danych · Architektura oprogramowania]

Architektura backendu i trwałość danych

Architektura serwerowa spinająca platformę: konta, sygnały, ustawienia, stany, zadania w tle, dostęp, raporty i monitoring — rozwijana bez przepisywania.

Przynależność
Podsystem ekosystemu automatyzacji tradingu i AI Astra Raven
Fokus techniczny
PythonAsync ProcessingSQL DesignBackground WorkersLogging
Co pokazuje
Architektura backendu · Usługi w Pythonie · SQL · Przetwarzanie asynchroniczne · Integracje · Utrzymywalność · Niezawodność operacyjna

01Przegląd projektu

Od tej warstwy zależą wszystkie pozostałe przypadki na stronie. Przechowuje użytkowników, sygnały, ustawienia i stany, uruchamia procesy w tle, komunikuje się z zewnętrznymi API i dostarcza informacje do Telegrama i interfejsów webowych.

Nacisk położony jest na kontrolowaną ewolucję: dodawanie funkcji i naprawianie błędów w systemie, który ma już wiele ruchomych części, z weryfikacją każdej zmiany przed produkcją.

02Wyzwanie inżynierskie

Gdy wiele podsystemów korzysta z jednej bazy i działa równolegle, trudne stają się spójność, obsługa awarii i zarządzanie zmianą — a nie pojedyncze funkcje.

  • A

    Utrzymać spójność stanu między akcjami użytkowników a procesami w tle.

  • B

    Obsługiwać błędne lub niepełne dane z zewnętrznych usług.

  • C

    Planować operacje w tle bez nakładania się i utraty pracy.

  • D

    Zapewnić śledzenie każdego istotnego zdarzenia w logach.

03Architektura rozwiązania

Najedź lub dotknij etapu.

01

Zewnętrzne API

Giełdy, Telegram, dostawcy AI i inne usługi.

Monitoring i dzienniki zdarzeń obserwują każdy etap.

04Główne komponenty

  • 01

    Model danych

    Tabele i relacje SQL dla kont, sygnałów, ustawień, stanów i historii zdarzeń.

  • 02

    Warstwa usług

    Asynchroniczne usługi w Pythonie hermetyzujące logikę biznesową i integracje zewnętrzne.

  • 03

    Workery

    Procesy w tle dla zadań cyklicznych i długotrwałych.

  • 04

    Kontrole integralności

    Walidacja danych wejściowych i niezmienników przed zapisem.

  • 05

    Logowanie zdarzeń

    Ustrukturyzowane logi łączące akcje użytkowników z pracą w tle.

  • 06

    Dostarczanie

    Endpointy i wiadomości przekazujące wyniki do Telegrama i interfejsów webowych.

05Stack technologiczny

Rdzeń

  • Python
  • async / await
  • aiohttp

Dane

  • SQL
  • SQLite
  • Data modeling

Eksploatacja

  • Linux VPS
  • Background processes
  • Structured logging

06Interaktywna demonstracja

Droga zapytania przez backend

IlustracjaDemo ilustracyjne. Wyślij zapytanie przez warstwy i wstrzyknij awarię, aby zobaczyć, jak błędy są obsługiwane i logowane.

backend · request pathbezczynny
01 Zewnętrzne API webhook / giełda
02 Backend w Pythonie usługa async
03 Walidacja / logika reguły i schematy
04 Baza SQL stan + historia
05 Workery zadania w tle
06 Telegram / Web UI dostarczenie

$ tail -f app.log

Monitoring

przetworzone
0
zdeduplikowane
0
ponowienia
0
odrzucone (błędne)
0
awaria → alert
0

07Decyzje inżynierskie

  1. 01

    Rozwijać, nie przepisywać

    Zmiany są wprowadzane stopniowo za jasnymi granicami, weryfikowane, a dopiero potem rozszerzane.

  2. 02

    Walidacja przed zapisem

    Złe dane są zatrzymywane w warstwie logiki, więc baza pozostaje wiarygodnym źródłem prawdy.

  3. 03

    Idempotentna praca w tle

    Workery można bezpiecznie uruchomić ponownie po przerwaniu bez dublowania efektów.

  4. 04

    Logi jako funkcja produktu

    Ustrukturyzowane, powiązane logi czynią zachowanie na produkcji wytłumaczalnym.

08Niezawodność i testy

  • Weryfikacja zmian względem istniejącego zachowania przed wdrożeniem.
  • Deduplikacja zdarzeń i idempotentne przetwarzanie.
  • Obsługa błędów wokół każdej zależności zewnętrznej.
  • Kontrola rzeczywistego zachowania na produkcji po wdrożeniu.

09Przykład kodu

process_event.py python
import sqlite3
from datetime import datetime, timezone

def process_event(db: sqlite3.Connection, event_id: str, source: str, kind: str) -> bool:
    """Returns True if processed now, False if it was already handled."""
    try:
        with db:  # one transaction: mark + apply, or neither
            db.execute(
                "INSERT INTO processed_events (event_id, source, event_type, processed_at) "
                "VALUES (?, ?, ?, ?)",
                (event_id, source, kind, datetime.now(timezone.utc).isoformat()),
            )
            apply_side_effects(db, event_id, kind)
        return True
    except sqlite3.IntegrityError:
        return False  # duplicate delivery — safe to ignore

def apply_side_effects(db: sqlite3.Connection, event_id: str, kind: str) -> None:
    ...

Ilustracja Przykład ilustracyjny — idempotentne przetwarzanie zdarzeń w SQLite.

Kod źródłowy produktu jest prywatny. Przykłady pokazują podejście inżynierskie, a nie wewnętrzną logikę. Więcej w Engineering Lab.

10Możliwe kierunki rozwoju

  • Migracja do PostgreSQL przy potrzebie większej współbieżności zapisu.
  • Endpoint metryk dla długości kolejki i czasu zadań.
  • Testy kontraktowe endpointów używanych przez interfejsy.
Następny case · 06 Astra Server Monitor Infrastruktura · Diagnostyka serwerów · Monitoring