Przejdź do treści

Ordered

Rozproszony system e-commerce wzorowany na Allegro

Ordered to backend marketplace'u e-commerce zbudowany od podstaw jako architektura mikroserwisowa. Zaczął jako monolit - z płatnościami przez Stripe, koszykiem, adresami dostawy i pełną obserwowalnością - który świadomie rozłożyłem na sześć niezależnych usług metodą Strangler Fig, żeby przećwiczyć realne problemy systemów rozproszonych: spójność danych bez transakcji rozproszonych, service discovery, centralną konfigurację i obserwowalność na poziomie całego systemu, nie pojedynczej aplikacji.

Klientweb / mobileAPI GatewayEurekaservice discoveryConfig ServerJWT secret, profileorder-serviceproduct-serviceuser-serviceengagement-serviceKafkaoutbox patternPostgreSQL / RedisGrafana · Jaeger · Prometheusobservability

Architektura systemu Ordered - sześć usług za jednym gatewayem.

Co warto wiedzieć:

  • Sześć niezależnych usług domenowych (zamówienia, produkty, użytkownicy, engagement) plus Eureka (service discovery) i API Gateway
  • Centralna konfiguracja przez Spring Cloud Config Server (profil natywny), z sekretem JWT trzymanym w jednym miejscu
  • Kafka w trybie KRaft z wzorcem transactional outbox dla zdarzeń typu „zamówienie dostarczone”
  • Stateless uwierzytelnianie JWT z niestandardowymi claimami (userId, role), odczytywanymi na gatewayu i w usługach
  • Wspólna biblioteka ordered-commons centralizująca uwierzytelnianie, obsługę wyjątków i odpowiedzi stronicowane
  • Pełny stack obserwowalności: Prometheus, Grafana (auto-provisionowany dashboard), Jaeger 2.x
  • Load testy w Gatlingu (symulacje ścieżki użytkownika i obciążenia katalogu produktów) - 100% sukcesu, p95 ~779ms / ~207ms
  • Dokumentacja API przez springdoc-openapi ze zagregowanym Swagger UI na poziomie gatewaya
stack
  • Java 21
  • Spring Boot 4.1
  • Spring Cloud (Eureka, Gateway, Config Server)
  • Kafka
  • PostgreSQL
  • MongoDB
  • Redis
  • Docker
  • Gatling
  • GitHub Actions