20 servisimizi harika ölçekledik. Hepsi aynı PostgreSQL instance'ına vuruyordu.

Mimari:

  • 20 mikroservis (bağımsız ölçeklenebilir! ✅)
  • 1 PostgreSQL veritabanı (ölçeklenemez ❌)
  • Her servis: 10 bağlantılık connection pool
  • PostgreSQL max_connections: 100

Matematik:

  • 20 servis × 10 bağlantı = 200 gerekli
  • Mevcut maksimum: 100
  • Sonuç: Ölçekleme sırasında bağlantı kıtlığı

Gerçekte olan:

  • A, B, C servisleri tüm bağlantıları kapıyor
  • D-T servisleri: “connection refused”
  • Health check'ler başarısız oluyor
  • Pod'lar yeniden başlıyor, daha fazla bağlantı kapıyor
  • Ölüm sarmalı

Çözüm:

  • Connection pooling için PgBouncer
  • Servis başına bağlantı limitleri
  • Okuma ağırlıklı servisler için read replica'lar
  • Nihayetinde: servis başına veritabanı deseni

Ders: Paylaşımlı veritabanlı “mikroservisler”, fazladan adımları olan dağıtık bir monolittir. Veri katmanı, bir DevOps mimari incelemesinde ilk kontrol ettiğimiz şeydir, çünkü kendi kendine asla autoscale olmayan tek bileşen odur.


← Çıkarılan Dersler'e dön

Bu tür olaylar önlenebilir. AWS Yönetilen Hizmetler ekibimiz müşteri ortamlarını yapay zekâ destekli izleme ve nöbetteki kıdemli mühendislerle 7/24 gözetir — böylece bu tür hikâyeler arşivde kalır.