Etkinlik Sourcing’inde Teoriden Pratiğe: NestJS ile Bir Remote Config Servisi Uygulamak
(borntodare.me)Giriş
Daangn Server meetup’ında Won Ji-hyeok’un etkinlik sourcing’iyle ilgili sunumu, bu yaklaşımı anlamamda çok yardımcı olmuştu. Etkinlik sourcing’in temel kavramlarını derleyip, sunumdaki içeriği temel alarak NestJS, TypeScript ve MongoDB tabanlı basit bir config servisi oluşturdum.
- Orijinal: Etkinlik sourcing’ini kullanarak ölçeklenebilir bir şirket içi platform oluşturmak | Daangn SERVER Meetup 2
- Etkinlik sourcing config servisi örnek kaynak kodu
Etkinlik sourcing’in temel kavramları
- Geleneksel CRUD yaklaşımından farklı olarak, tüm durum değişiklikleri değiştirilemez etkinlikler olarak kaydedilir; bu da denetim izi ve rollback işlemlerini kolaylaştırır
- Muhasebe defteri gibi tüm işlemler (etkinlikler) sıralı biçimde kaydedilir, böylece mevcut durum istenildiği zaman yeniden oluşturulabilir
Temel bileşenler
- Etkinlik
- Benzersiz ID, oluşturulma zamanı, etkinlik tipi, kullanıcı bilgisi ve içerik (body) barındırır; değiştirilemezlik ve kendi kendine yeterlilik sağlar
- State
- Tüm etkinliklerin replay edilmesiyle elde edilen son durumdur (gerektiğinde snapshot veya cache kullanılabilir)
- Reducer
- Pure function olarak önceki durum ile etkinliği girdi olarak alır, yeni durumu hesaplar ve değiştirilemezliği korur
- Entity
- İlgili etkinlikleri tek bir nesne altında yönetir; böylece belirli bir entity’nin değişim geçmişi verimli şekilde sorgulanabilir
Uygulama örneği ve yapı
- Temel ortam kurulumu: Uygulama NestJS kullanılarak çalıştırılır
- Entity ve etkinlik tanımları
- TypeScript arayüzleri ve MongoDB şemaları kullanılarak çeşitli etkinlikler (ör. ayar oluşturma, parametre ekleme/silme) ve durum nesneleri açık biçimde tanımlanır
- Reducer implementasyonu:
- Etkinlik tipine göre durumu güncelleyen pure function’lar yazılarak, etkinlik dizisi replay edilip nihai durum elde edilir
- API endpoint’leri ve servis katmanı
- Config oluşturma, sorgulama, parametre ekleme/silme işlevleri sunan REST API uygulanır
dispatch-commitdeseni kullanılarak etkinlik yayımlandıktan sonra durum hesaplama ve etkinlik kaydetme işlemleri sıralı şekilde yürütülür
Ek geliştirmeler ve harici sistem entegrasyonu
- Generic arayüzler
- Yeniden kullanılabilir bir etkinlik repository tasarımıyla kod tekrarı azaltılır ve tip güvenliği sağlanır
- Etkinlik handler’ları
- Slack gibi harici sistemlerle entegre edilerek etkinlik oluştuğunda bildirim gönderme gibi ek işlemler gerçekleştirilir
- Performans optimizasyonu stratejileri
- Snapshot: Belirli bir andaki durum kaydedilir ve sonrasındaki etkinlikler uygulanır; tüm etkinlikleri replay etme maliyeti azaltılır
- Caching: In-memory cache veya Redis kullanılarak sık sorgulanan entity durumları hızlı şekilde sunulur
Sonuç
- Etkinlik sourcing, tüm değişim geçmişini açık biçimde kaydederek güvenilirliği ve bakım yapılabilirliği artıran güçlü bir mimaridir
- Alan ihtiyacına uygun kademeli benimseme ile snapshot, caching gibi optimizasyon stratejileri birlikte değerlendirilerek sistem performansı güvence altına alınmalı; öğrenme eğrisi de göz önünde bulundurularak dikkatli şekilde uygulanmalıdır
1 yorum
Harika harika! ^0^