DynamoDB ile veri akışı

AWS üzerinde Uygulama Geliştirme

Ricardo Sueiras

Principal Technologist

DynamoDB Streams temelleri

 

temeller

  • Veritabanı değişimlerine neredeyse gerçek zamanlı tepki ver.
  • Olay güdümlü kalıplar üzerine kurulu.
  • Her ekleme, değiştirme veya silme bir akış kaydı üretir.
  • Tabloyu yoklamadan reaktif uygulamalar kur.
  • Varsayılan olarak kapalıdır: StreamSpecification ile etkinleştir.
  • Her akışın tablo ARN'inden farklı kendi ARN'i vardır.
AWS üzerinde Uygulama Geliştirme

Saklama süresi

 

saklama süresi

  • Akış kayıtları 24 saat tutulur.
    • Saklama süresi sabittir, yapılandırılamaz.
  • Görünüm türünü değiştirmek akışın yeniden oluşturulması demektir.
    • Yeni bir akış yeni bir akış ARN'i üretir.
AWS üzerinde Uygulama Geliştirme

Akışlar ve DynamoDB okuma kapasitesi birimleri

 

rcu

  • Akış okumaları okuma kapasite birimlerini (RCU) TÜKETMEZ.
  • Akışları etkinleştirmek sağlanan aktarımı etkilemez.
AWS üzerinde Uygulama Geliştirme

Akış kayıtları

  • Her akış kaydı değişimi tanımlayan üst veriyi taşır.
  • Akışlar üç olay türünü yakalar:
    • INSERT
    • MODIFY
    • REMOVE

 

akış kayıtları

AWS üzerinde Uygulama Geliştirme
  • Görünüm türleri her kayda hangi verinin düştüğünü belirler.
    • KEYS_ONLY: sadece bölüm ve sıralama anahtarları.
    • NEW_IMAGE: değişimden sonraki tam öğe.
    • OLD_IMAGE: değişimden önceki tam öğe.
    • NEW_AND_OLD_IMAGES: öğenin önceki ve sonraki hali.
  • Denetim için NEW_AND_OLD_IMAGES idealdir.
  • DynamoDB Global Tables için gereklidir.

akış görünümleri

AWS üzerinde Uygulama Geliştirme
  • Akışlar bölüm anahtarı başına sıralamayı korur.
  • Lambda kayıtları toplu işler.
    • Her başarılı topludan sonra ilerlemeyi işaretler.
    • Başarısız toplular yeniden denenir.
    • Başarıya ulaşana veya kayıtlar süresi dolana dek sürer.

 

sıralama

AWS üzerinde Uygulama Geliştirme

 

akışlar ve aws lambda

  • En yaygın akış tüketicisi Lambda'dır.
  • Anket tabanlı event source mapping kullanır.
  • Kayıtları akıştan okur.
  • Fonksiyonunu toplu kayıtlarla çağırır.
AWS üzerinde Uygulama Geliştirme

Mimari kalıp

 

mimari kalıplar

  • Yaygın uçtan uca kalıp:
    • Bir öğe güncellemesi DynamoDB'ye düşer.
    • Değişim bir akış kaydı üretir.
    • Kayıt işleme için Lambda'yı tetikler.
AWS üzerinde Uygulama Geliştirme

Ölçekleme

 

ölçekleme

  • Akışlar dahili olarak shard'lara bölünür.
    • Kinesis Data Streams'e oldukça benzer.
  • Her shard en fazla iki eşzamanlı tüketiciye izin verir.
    • Bu sınırın aşılması okuma kısıtlamasının yaygın bir nedenidir.
AWS üzerinde Uygulama Geliştirme
  • Lambda eşzamanlılığı shard sayısıyla ölçeklenir.
  • İşlemeyi şunlarla ayarla:
    • BatchSize: çağrı başına en çok kayıt.
    • MaximumBatchingWindow: kısmi toplu için bekleme.
    • MaximumRetryAttempts: başarısız hedefe gitmeden önce deneme sayısı.
    • MaximumRecordAgeInSeconds: bu yaşı geçen kayıtları at.
    • ParallelizationFactor: shard başına eşzamanlı işleme (en çok 10).

lambda ile ölçekleme

AWS üzerinde Uygulama Geliştirme

Filtreleme ve tumbling window'lar

  • Lambda filtre ölçütlerini destekler.
    • Fonksiyon çağrılmadan önce kayıtları ele.
    • Gereksiz çağrıları ve maliyeti keser.
  • Lambda tumbling window'ları destekler.
    • Bir shard içinde toplular arasında durumu biriktir.

 

filtreleme ve tumbling window'lar

AWS üzerinde Uygulama Geliştirme

Yinelenen kayıtları yönetme

  • Akışlar her değişimi tam olarak bir kez yakalar.
  • Lambda, en az bir kez işleme semantiğiyle çalışır.
    • Yeniden denemeler aynı kaydı tekrar işleyebilir.
  • Tüketicileri idempotent tasarla.
  • Yaygın bir kalıp: işlenen eventID veya SequenceNumber sakla.
    • Zaten ele aldığın kayıtları atla.
    • İkisi de yeniden denemelerde sabit kalır.
    • Güvenilir idempotency anahtarlarıdır.

 

yinelenen kayıtları yönetme

AWS üzerinde Uygulama Geliştirme

Hatalarla başa çıkma

 

hatalarla başa çıkma

  • ReportBatchItemFailures sadece başarısız kayıtları yeniden dener.
  • Lambda hatalarını şunlarla ele al:
    • Topluyu bölmek için BisectBatchOnFunctionError.
    • Yeniden deneme denetimleri.
    • Denemeleri tüketen sorunlu toplular için başarısızlık hedefleri.
AWS üzerinde Uygulama Geliştirme

DynamoDB'den Kinesis'e entegrasyon

 

entegrasyon

  • Tablolar değişiklikleri doğrudan Kinesis Data Streams'e itebilir.
    • DynamoDB için Kinesis Data Streams özelliğiyle.
    • Zincirli değil, ayrı ve paralel bir yetenek.
    • Olaylar DynamoDB Streams üzerinden AKMAZ.
  • İkisi de aynı tabloda eşzamanlı çalışabilir.
    • Bağımsız çalışırlar.
    • Daha geniş akış ve analitik mimarilerini besler.
AWS üzerinde Uygulama Geliştirme

İzleme: yaygın sorunlar

 

sorun giderme

  • İzlenmesi gereken yaygın işletim sorunları:
    • Sıcak bölümler.
    • Başarısız yeniden denemeler.
    • Yinelenen işleme.
    • Kısıtlama ve tüketici gecikmesi.
AWS üzerinde Uygulama Geliştirme

İzleme: CloudWatch metrikleri

  • İzlenecek temel CloudWatch metrikleri:
    • Lambda Errors: kod veya alt sistem sorunlarını gösterir.
    • IteratorAge: yüksek değerler yavaş tüketicileri işaretler.
    • Kısıtlama metrikleri: okuma limitlerinin aşılması.
    • Toplu işleme hataları: kayıtlar bir DLQ'ya gönderildi.

 

sorun giderme

AWS üzerinde Uygulama Geliştirme

Güvenlik

  • Akış erişimi IAM izinleriyle kontrol edilir.
  • Akışlar tablonun şifreleme ayarlarını devralır.
    • KMS ile beklemede sunucu tarafı şifreleme dahil.
  • En az ayrıcalık ilkesini tüketicilere ve aşağı akış işlemcilere uygula.

 

güvenlik

AWS üzerinde Uygulama Geliştirme

Hadi pratik yapalım!

AWS üzerinde Uygulama Geliştirme

Preparing Video For Download...