# ΑρχιτεκτονικήEvent-driven, multi-tenant, ML-augmented πλατφόρμα αποφάσεων — πώς δομείται.

## Επισκόπηση pipeline

```
Stream-Ingest → Validators features → Αποθήκευση
                                        ↓
                                   Event bus (PG LISTEN/NOTIFY)
                                        ↓
                              ┌────────────────────┐
                              │ Daemon απόφασης    │ (config ανά tenant)
                              └──────────┬─────────┘
                                         ↓
                                  Επικυρωμένη ενέργεια
                                         ↓
                                  Feedback αποτελέσματος
                                         ↓
                              Εκπαίδευση / Tuning μοντέλου
```

Η πλατφόρμα μετατρέπει ακατέργαστες ροές δεδομένων σε συγκλίνουσες
αποφάσεις μέσω μιας σκόπιμα κλιμακωτής pipeline. Κάθε στάδιο έχει
μία ευθύνη και εκπέμπει durable events για το επόμενο.

## Event-driven πυρήνας

- **Event bus.** Το PostgreSQL `LISTEN/NOTIFY` μεταφέρει events
  μεταξύ daemons. Τα events αποθηκεύονται σε durable πίνακα, δεν
  απλώς μεταδίδονται — οι consumers μπορούν να κάνουν replay από
  cursor μετά από επανασύνδεση.
- **Παράδοση at-least-once.** Οι consumers επιβεβαιώνουν τα
  επεξεργασμένα events. Τα μη επιβεβαιωμένα events
  επαναπαραδίδονται μετά από timeout. Η ιδεμποτεντικότητα είναι
  ευθύνη του consumer.
- **Cursor-tracked replay.** Κάθε consumer διατηρεί τον δικό του
  cursor. Μετά από αποσύνδεση, συνεχίζει από εκεί που σταμάτησε —
  κανένα event δεν χάνεται, κανένα event δεν επεξεργάζεται
  διπλά πέρα από τις διαμορφωμένες σημασιολογίες retry.

## Pipeline ML

- **Μοντέλα.** XGBoost εκπαιδευμένο σε ιστορικά features, με
  ONNX Runtime για inference (2–5× ταχύτερο από το framework
  εκπαίδευσης).
- **Έξοδοι.** Τα μοντέλα ταξινομούν καθεστώτα σε τρεις
  διαστάσεις — κατεύθυνση, μεταβλητότητα, ποιότητα. Καμία
  κερδοσκοπική σημειακή πρόβλεψη.
- **Tuning υπερ-παραμέτρων.** Optuna με walk-forward holdout,
  champion/challenger waves, quality gates.
- **Feedback loop.** Το αποτέλεσμα κάθε απόφασης καταγράφεται και
  τροφοδοτείται στον επόμενο γύρο tuning.

## Multi-tenant μοντέλο

Η απομόνωση tenant επιβάλλεται σε δύο επίπεδα:

- **Stored procedures.** Όλες οι λειτουργίες πλευράς tenant
  περνούν από stored procedures που επιβάλλουν ownership. Άμεσες
  εγγραφές πίνακα από κώδικα tenant δεν επιτρέπονται.
- **Row-level security.** Το RLS της Postgres ως σκληρό
  backstop. Ακόμη και αν η λογική εφαρμογής έχει bug, το RLS
  εμποδίζει πρόσβαση δεδομένων μεταξύ tenants.

Η ανά-tenant διαμόρφωση καλύπτει:

- **Κλειδιά και rate limits.**
- **Kill-switch.** Operator override για άμεση απενεργοποίηση
  ενός tenant χωρίς redeployment.
- **Προφίλ κινδύνου.** Παράμετροι κατωφλίων ανά κλάση
  απόφασης.

## Validators

Τρία σημεία όπου γίνεται validation:

1. **Πριν την αποθήκευση.** Stream events που αποτυγχάνουν στο
   validation σημειώνονται, δεν απορρίπτονται σιωπηλά. Οι
   operators τα βλέπουν στο dashboard.
2. **Πριν την εκπαίδευση μοντέλων.** Τα features που
   χρησιμοποιούνται για εκπαίδευση επανα-επικυρώνονται έναντι
   του σχήματος. Το drift πυροδοτεί alert πριν την
   επανεκπαίδευση.
3. **Σε runtime.** Οι validators features τρέχουν συνεχώς με
   αυτόματη ανάκαμψη `DATAMISSING` — όταν ένα αναμενόμενο
   feature απουσιάζει, ο daemon πέφτει πίσω σε ένα τεκμηριωμένο
   default και εκπέμπει ένα δομημένο event.

## Παρατηρησιμότητα

- **21 live dashboards.** Heartbeat, latency, drift detection,
  κατανομή αποφάσεων, όγκος ανά tenant.
- **Δομημένη καταγραφή.** Κονσόλα, αρχείο και βάση δεδομένων — τα
  ίδια log events αναγνώσιμα και από τα τρία με το ίδιο query.
- **Health monitoring.** Κάθε daemon εκπέμπει events υγείας σε
  σταθερή συχνότητα. Τα events που λείπουν πυροδοτούν pages.

## Μηχανισμοί production-readiness

- **Circuit breakers** ανά πηγή δεδομένων — οι αστοχίες
  υποβαθμίζονται graceful αντί να κλιμακώνονται.
- **Email και XMPP alerting** για events ορατά στον operator.
- **Universal config-driven defaults.** Mappings πηγών δεδομένων,
  αλυσίδες fallback, μετατροπές μονάδων, κατώφλια — όλα σε JSON.
  Κανένα magic number στον κώδικα.
- **Απομόνωση διεργασίας** μέσω tmux + Devuan — οι daemons
  μπορούν να επανεκκινηθούν μεμονωμένα χωρίς συντονισμό.

## Τι δεν είναι αυτό

- Δεν είναι πλατφόρμα autoscaling τύπου Kubernetes. Αυτό τρέχει
  σε μικρό αριθμό καλά κατανοητών μηχανημάτων με σκόπιμη
  τοποθέτηση daemon.
- Δεν είναι «στήσε και ξέχνα». Σύνολα tokens, εκδόσεις
  μοντέλων, configs tenant και dashboards απαιτούν προσοχή
  operator.
- Δεν είναι γενικό. Η πλατφόρμα αντικατοπτρίζει μια συγκεκριμένη
  κλάση προβλημάτων αποφάσεων υψηλής συχνότητας — η προσαρμογή
  της σε πολύ διαφορετικό workload είναι η υπηρεσία
  [Ανάπτυξη](/el/services/development/).
