Veritabanı Hariç Her Şeyi Ölçeklemek
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.
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.