Aliasoft aliasoft.dev

Projet

Seaway

Seaway est un projet full-stack architecture conçu pour démontrer des pratiques modernes d’ingénierie logicielle, incluant clean architecture, event-driven systems et APIs production-ready. La plateforme combine un backend Java scalable avec un frontend React et des patterns de déploiement production-oriented.

Architecture du système

Seaway est conçu autour d’une architecture en couches inspirée des principes de l’architecture hexagonale. Le système sépare clairement le domain, la logique applicative et l’infrastructure afin de garantir des boundaries explicites et une long-term maintainability.

Domain layer

Contient les entités métier, la logique métier et les invariants du domaine. Le domain reste isolé des frameworks et des dépendances d’infrastructure.

Application layer

Implémente les use cases via des command et query handlers. Cette couche orchestre la logique du domaine sans contenir de règles métier.

Infrastructure layer

Adapters pour la persistence, la messagerie et les services externes, incluant des repositories PostgreSQL et des producers/consumers Kafka.

API layer

Contrôleurs REST exposant des endpoints validés avec error handling standardisé et filtering sécurisé.

Interface frontend

L’interface utilisateur est développée avec React et Tailwind CSS, fournissant un client léger pour interagir avec l’API. Le frontend met l’accent sur des component boundaries claires et une architecture UI maintenable.

  • Architecture de composants React
  • Tailwind CSS pour la cohérence du design system
  • Intégration API avec les services backend

Vue d’ensemble de l’architecture

flowchart TD Browser[Client Browser] Frontend[React Frontend] Proxy[Nginx Reverse Proxy] API[Spring Boot API] Kafka[(Kafka)] DB[(PostgreSQL)] Producer[Event Producer] Consumer[Event Consumer] Browser --> Frontend Frontend --> Proxy Proxy --> API API --> DB API --> Producer Producer --> Kafka Kafka --> Consumer Consumer --> DB

Architecture hexagonale

flowchart LR User[API Controller] App[Application Layer] Domain[Domain Layer] Infra[Infrastructure] User --> App App --> Domain Domain --> Infra

Workflows event-driven

La plateforme utilise Kafka pour orchestrer des workflows asynchrones entre les différents composants du système. Les événements permettent aux services de rester faiblement couplés tout en assurant scalabilité et résilience.

Event publishing

Les domain events sont publiés lors de changements d’état significatifs afin de permettre aux autres services de réagir de manière asynchrone.

Retry strategies

Les événements échoués sont rejoués avec des stratégies de backoff avant d’être redirigés vers des dead-letter topics pour inspection.

Consumers idempotents

Les consumers sont conçus pour traiter les événements plusieurs fois en toute sécurité afin de garantir la cohérence du système dans un environnement distribué.

Flux de traitement des événements

Kafka Spring Boot Architecture

Points techniques clés

Architecture hexagonale

Séparation claire entre domain, application et infrastructure pour garantir maintenabilité et testabilité.

Design CQRS

Séparation des commandes et des requêtes permettant une évolution indépendante des read models et des opérations d’écriture.

Workflows event-driven

Messaging basé sur Kafka permettant des services faiblement couplés et un traitement distribué résilient.

Pratiques de sécurité

  • DTO validation avec Bean Validation
  • Error handling centralisé
  • Pagination et filtering sécurisés
  • Secrets externalisés via variables d’environnement
  • API design aligné avec les pratiques OWASP
  • Durcissement des conteneurs Docker
  • Exécution des conteneurs en non-root
  • Filesystem en lecture seule
  • Reverse proxy avec Nginx
  • Rate limiting au niveau infrastructure

Architecture

  • Architecture hexagonale
  • Pattern CQRS
  • Event processing avec Kafka
  • PostgreSQL

Stack

  • Java 21
  • Spring Boot
  • Kafka
  • PostgreSQL
  • React
  • Tailwind CSS
  • Docker
  • Nginx