CRUD için Event Sourcing
Basit bir CRUD uygulaması için event sourcing uyguladık, çünkü “doğru yol buydu.” Özellikler yerine altyapıya 6 ay harcadık.
Uygulama gereksinimleri:
- Kullanıcı yönetimi CRUD'u
- Günlük 500 kullanıcı
- Denetim (audit) gereksinimi yok
- Zamanda yolculuk gerekmiyor
- Standart iş mantığı
Ne inşa ettik:
- Kafka + PostgreSQL üzerinde event store — kendi başına tartışmalı bir karar: event store olarak Kafka, aggregate başına okuma sunmaz ve retention semantiği hantaldır; bu bize ek geçici çözümlere mal oldu
- Event replay sistemi
- Projeksiyonlar (okuma modelleri)
- Snapshot alma
- Sürümlenmiş event'ler
- Saga orkestrasyonu
Harcanan süre:
- Altyapı: 4 ay
- Event şema tasarımı: 1 ay
- Eventual consistency debug'ı: 1 ay
- Gerçek iş özellikleri: 2 hafta
Tutarlılık debug'ına giden ay, tek örnekle: bir kullanıcı e-postasını değiştirdi, okuma modeli geride kaldığı için onay ekranı hâlâ eski adresi gösteriyordu, kullanıcı yeniden denedi — ve biz iki günümüzü bir projeksiyon yeniden inşası boyunca mükerrer EmailChanged event'lerinin izini sürerek geçirdik. Tek bir satırı güncelleyen bir form için.
Neye ihtiyacımız vardı:
class User:
def update(self, data):
self.name = data.name
self.email = data.email
db.save(self)
Event sourcing ne zaman mantıklıdır:
- Düzenleyici denetim izi gereksinimleri
- Finansal işlemler
- Zamanda yolculukla debug
- Çok sayıda durum geçişi olan karmaşık domain
Ders: Event sourcing güçlüdür. Aynı zamanda pahalıdır. Karmaşıklığı gereksinimlerle eşleştirin — küçük ekipleri ihtiyaç duymadıkları mikroservislere sürükleyen de aynı içgüdüdür.
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.