Studiu de caz / 06

Kit de Start pentru Microservicii

O arhitectură de microservicii pregătită pentru producție, cu 5 servicii NestJS (API Gateway, Auth, Users, Products, Payments) care comunică exclusiv prin evenimente RabbitMQ, fiecare cu propria bază de date PostgreSQL, deployate pe Kubernetes cu pipeline complet de CI/CD.

Statut
Proiect selectat
Contextul sistemului
TypeScript, NestJS, Prisma, PostgreSQL
Sursă
Repository public

01 / Comportamentul sistemului

Dovadă interactivă

Un mecanism tehnic specific proiectului, bazat pe arhitectura și contextul de implementare înregistrate.

Dovadă interactivăKit de Start pentru Microservicii
RabbitMQ topic exchange
Gateway
Isolated data
Auth
Isolated data
Users
Isolated data
Products
Isolated data
Payments
Isolated data

Context și intenție

Acest proiect construiește imaginea completă a microserviciilor - nu o demonstrație simplificată, ci un sistem cu o formă reală de producție, cu comunicare event-driven autentică, izolarea bazelor de date, verificări de sănătate și CI/CD.

Cinci servicii NestJS rulează independent, fiecare cu propria schemă Prisma, propriile migrări și propria bază de date PostgreSQL. API Gateway-ul este singurul punct de intrare - nu conține logică de business, doar rutare, autentificare JWT, limitare a ratei de cereri (100 cereri/minut) și agregarea stării de sănătate. Proxiază cererile către serviciile downstream și raportează starea agregată: healthy (toate funcționale), degraded (unele indisponibile) sau unhealthy (toate indisponibile).

03 / Înregistrarea arhitecturii

Arhitectură

O interpretare structurată a arhitecturii înregistrate pentru acest proiect.

Înregistrarea arhitecturiiKit de Start pentru Microservicii
API Gateway
Auth Service
User Service
Product Service
Payment Service
Citește înregistrarea completă a arhitecturii

Cinci servicii NestJS într-un monorepo Turborepo, fiecare rulând pe propriul port:

• API Gateway (3000) - Rutare, validare JWT, limitare a ratei, agregare de cereri, agregare a verificărilor de sănătate • Auth Service (3001) - Înregistrare, autentificare, token-uri JWT, resetare parolă, strategii Passport.js • User Service (3002) - Profiluri, preferințe, adrese; ascultă evenimentele auth.user.registered • Product Service (3003) - Catalog, categorii, inventar; publică alerte inventory.low_stock • Payment Service (3004) - Comenzi, plăți, rambursări; menține un cache local denormalizat al produselor din evenimente

Toată comunicarea între servicii trece printr-un RabbitMQ topic exchange (microservices.events). Evenimentele urmează convenția de denumire {serviciu}.{entitate}.{acțiune}. Pachetele partajate asigură că publicatorul și consumatorul sunt mereu de acord asupra string-urilor de routing key.

Infrastructură: Docker Compose pentru dezvoltare locală (PostgreSQL, Redis, RabbitMQ, Adminer), manifeste Kubernetes pentru deployment în producție cu probe de readiness/liveness.

Cum este structurat sistemul

Serviciile comunică asincron prin RabbitMQ cu un topic exchange. Când un utilizator se înregistrează, Auth Service publică auth.user.registered - User Service creează un profil, Email Service trimite un email de bun venit, Analytics Service înregistrează înscrierea. Auth Service nu are idee cine ascultă. Payload-urile evenimentelor urmează un format standardizat: eventType, data, timestamp, service, version. Toate mesajele sunt buffere JSON persistente cu ID-uri unice.

EventService-ul fiecărui serviciu implementează reziliență la conexiune: dacă RabbitMQ nu este disponibil la pornire, serviciul reîncearcă la fiecare 5 secunde. Serviciile pornesc și funcționează chiar dacă broker-ul de mesaje este temporar indisponibil - pur și simplu nu pot publica evenimente până la reconectare.

Verificările de sănătate sunt pe trei niveluri: /health (verificare completă cu conectivitate la baza de date), /health/ready (readiness probe) și /health/live (liveness probe). Manifestele Kubernetes le referențiază pentru managementul pod-urilor.

05 / Aspecte selectate

Note de implementare selectate

Deciziile și fluxurile cu cea mai mare valoare explicativă.

  1. 5 servicii NestJS independente cu granițe de domeniu clare: API Gateway, Auth, Users, Products și Payments
  2. Comunicare event-driven prin RabbitMQ topic exchange - serviciile publică evenimente de domeniu, consumatorii se abonează prin pattern-uri de routing key (*.user.*)
  3. Pattern bază-de-date-per-serviciu - fiecare serviciu are propria schemă Prisma, propriile migrări și propria bază de date PostgreSQL pentru deployabilitate independentă și izolarea defectelor
  4. Reziliență la conexiune - EventService reîncearcă conexiunea la RabbitMQ la fiecare 5 secunde, serviciile funcționează fără probleme când broker-ul este temporar indisponibil
  5. Format standardizat al payload-ului evenimentelor cu câmpuri eventType, data, timestamp, service și version - buffere JSON persistente cu ID-uri unice de mesaj rezistă la restarturile broker-ului
  6. API Gateway cu validare JWT, limitare a ratei (100 cereri/minut), proxiere de cereri și raportare agregată a stării (healthy/degraded/unhealthy)

06 / Metrici susținute

Înregistrarea verificată a proiectului

Servicii Independente
5
Baze de Date
4
Tipuri de Evenimente
15+
Endpoint-uri Swagger
5
Niveluri de Health Check
3
Apeluri Directe Între Servicii
0

Tehnologie în context

TypeScript, NestJS, Prisma, PostgreSQL, RabbitMQ, Redis, Docker, Kubernetes, Turborepo, GitHub Actions, Fastify, Swagger/OpenAPI, Passport.js, JWT

Vezi repository-ul sursă