← Bütün Patternlər
📦

Database per Service

Hər mikroservisin öz xüsusi bazası olur. Heç bir servis digərinin bazasına birbaşa daxil ola bilməz — yalnız API vasitəsilə.

🎯
Nə üçün lazımdır?

Servislərin bir-birindən asılı olmaması (Loose Coupling) üçün. Bir servisin baza sxemini dəyişməsi digərinə mane olmamalıdır.

🗃️
Polyglot Persistence

Hər servis özünə uyğun baza seçə bilər: User → PostgreSQL, Catalog → MongoDB, Search → Elasticsearch.

🛠️
Təcrübə

Kubernetes-də hər servisin öz DB pod-u olur. Schema migration-lar müstəqil aparılır (Flyway/Liquibase).

İNTERAKTİV

Vizual İzah

Mərhələ {{ currentStep + 1 }}: {{ steps[currentStep].title }}

{{ svc.icon }}
{{ svc.name }}
🗄️
{{ svc.db }}
🔒 Xüsusi
JAVA

Kod Nümunəsi

application.yml (User Service)
# Hər servisin öz database konfiqurasiyası
spring:
  datasource:
    url: jdbc:postgresql://user-db:5432/userdb
    username: user_svc
    password: ${DB_PASSWORD}
  jpa:
    hibernate:
      ddl-auto: validate
  flyway:
    enabled: true              # Schema migration — müstəqil
OrderService.java (Başqa servisin datasını API ilə alır)
@Service
public class OrderService {

    private final UserClient userClient;  // Feign Client

    public OrderResponse createOrder(OrderRequest req) {
        // ❌ YANLIŞ: userRepository.findById() — Bazasına birbaşa girə bilməz!
        // ✅ DOĞRU: API vasitəsilə alır
        UserDto user = userClient.getUser(req.getUserId());
        // ... sifarişi yarat
    }
}
✅ Üstünlükləri
  • Tam izolyasiya — sxem dəyişikliyi təhlükəsiz
  • Polyglot Persistence (hər servisə uyğun DB)
  • Müstəqil deployment və scaling
⚠️ Riskləri
  • Servislər arası JOIN mümkün deyil
  • Distributed transaction problemi (→ Saga lazım)
  • Data dublikasiyası / sinxronizasiya mürəkkəbliyi