Akış verileri

AWS üzerinde Uygulama Geliştirme

Ricardo Sueiras

Principal Technologist

Akış verilerinin temelleri

 

akış verileri

  • Kayıtlar geldikçe sürekli işlenir.
  • Üreticiler bir akışa yazar.
  • Tüketiciler bağımsız ve paralel okur.
  • Yığın işleri beklemeden trafik sıçramalarını emer.
AWS üzerinde Uygulama Geliştirme

Akış verileri nelerden oluşur?

 

akış sistemi bileşenleri

  • Üreticiler: kayıt yayan uygulamalar.
  • Akışlar: üreticileri tüketicilerden ayıran kalıcı, sıralı tamponlar.
  • Tüketiciler: kayıtları okuyan ve işleyen uygulamalar.
  • Depolama ve Tutma: kayıtların tekrar oynatma için ne kadar kalacağını tanımlar.
AWS üzerinde Uygulama Geliştirme

Shard'lar

 

shard'lar

 

  • Shard'lar, throughput ve paralel işlem birimleridir.
  • Bölüm anahtarları kayıtları shard'lara dağıtır.
  • Sıralama yalnızca bir shard içinde garantilidir.
  • Tüketiciler ilerlemeyi izlemek ve hatalardan kurtulmak için checkpointing kullanır.
AWS üzerinde Uygulama Geliştirme

Akış verileri için AWS yönetilen hizmetleri

  • Amazon Kinesis Data Streams.
  • Amazon Data Firehose.
  • Akış veri uygulamalarının temel yapı taşları.

 

aws hizmetleri

AWS üzerinde Uygulama Geliştirme

Kinesis Data Streams

  • Düşük gecikmeli akış.
  • Yapılandırılabilir tutma: 24 saat (varsayılan) - 365 gün.
  • Kalıcı, tekrar oynatılabilir akışlar.
  • Birden çok tüketici paralel okuyabilir.
  • Geliştiriciler ölçeklemeyi shard'larla yönetir.

 

kinesis data streams

AWS üzerinde Uygulama Geliştirme

Kinesis Data Streams ne zaman kullanılır

  • Gerçek zamanlı gecikme gerekiyorsa seç.
  • Kayıtları tekrar oynatman gerekiyorsa.
  • Birden çok bağımsız tüketicin varsa.
  • Özel dönüşüm mantığına ihtiyaç duyuyorsan.

 

kinesis data streams

AWS üzerinde Uygulama Geliştirme

Kayıt yazma

 

istemci kitaplıkları

  • Bölüm anahtarları shard yerleşimini ve sıralamayı kontrol eder.
  • PutRecords isteği başına en fazla 500 kayıt veya 5 MB toplar.
  • Hatalar kayıt bazında raporlanır.
  • FailedRecordCount başarısız kayıtları belirlemene yardım eder.
AWS üzerinde Uygulama Geliştirme

Kayıt tüketimi: klasik

 

klasik

 

  • Tüketiciler talep üzerine Kinesis API'sini yoklar.
  • Yazma sınırları: 1 MB/sn veya 1.000 kayıt/sn.
  • Okuma sınırları: 2 MB/sn veya saniyede 5 GetRecords çağrısı.
AWS üzerinde Uygulama Geliştirme

Kayıt tüketimi: akış başlangıcı

 

akış başlangıcı

  • Tüketiciler akışta nereden okumaya başlayacağını belirtir.
  • TRIM_HORIZON: shard'daki en eski mevcut kayıt.
  • LATEST: bir sonraki yeni kayıt.
  • AT_SEQUENCE_NUMBER veya AFTER_SEQUENCE_NUMBER: belirli bir sıra numarasından.
  • AT_TIMESTAMP: belirtilen zaman damgasında veya sonrasında.
AWS üzerinde Uygulama Geliştirme

Kayıt tüketimi: enhanced fan-out

  • Kayıtlı her tüketici, shard başına ayrılmış 2 MB/sn alır.
  • Kayıtlar HTTP/2 push ile iletilir.
  • Birden çok bağımsız tüketici düşük gecikme istiyorsa kullan.
  • Aynı akışta yüksek throughput gerekiyorsa da.

 

örüntü - geliştirilmiş fan-out

AWS üzerinde Uygulama Geliştirme

Lambda olay kaynağı eşlemesi

  • Lambda, Kinesis'i yoklar ve toplu çağırır.
  • BatchSize ve MaximumBatchingWindow yığın şeklini kontrol eder.
  • ParallelizationFactor: shard başına eşzamanlı çağrılar.
  • BisectBatchOnFunctionError: sorunlu kayıtları ayırmak için hatalı yığını böler.
  • ReportBatchItemFailures: zaten başarılı olan kayıtları yeniden denemekten kaçınır.
  • OnFailure: işlenemeyen yığınları SQS veya SNS DLQ'ya gönderir.

 

lambda olay kaynağı eşlemesi

AWS üzerinde Uygulama Geliştirme

Data Firehose

  • Hedeflere akış verisi ileten yönetilen hizmet.
  • Hedefler: Amazon S3, Redshift ve HTTP uç noktaları.
  • Arabelleğe alma, biçim dönüştürme ve Lambda dönüşümlerini destekler.
  • Daha yüksek gecikme, saniyelerden dakikalara tamponlanır.
  • Tekrar oynatma veya uzun süreli tutma yok.
  • Veriyi basitçe bir hedefe ulaştırmak için idealdir.

 

data firehose

AWS üzerinde Uygulama Geliştirme

Örüntü: sıcak-soğuk

 

örüntü - sıcak/soğuk

 

  • Sıcak-soğuk örüntü, Data Streams ve Data Firehose'u birleştirir.
  • Data Streams, üreticiler için gerçek zamanlı işlemeyi sağlar.
  • Firehose, aynı kaynaktaki kayıtları S3'e arşivler.
AWS üzerinde Uygulama Geliştirme

Kinesis vs SQS

 

sqs vs kinesis

 

  • Birden çok tüketiciyle sıralı, tekrar oynatılabilir akışlar için Kinesis kullan.
  • Kinesis, zaman serisi ve sıralı veriye uygundur.
  • Görev dağıtımı için SQS kullan.
AWS üzerinde Uygulama Geliştirme

Akış verilerini ölçekleme

 

ölçekleme

  • Veri akışları shard'lara bölünür.
  • Bölüm anahtarları kayıtları belirli bir shard'a yönlendirir.
  • Aynı anahtar her zaman aynı shard'a düşer, sıralama korunur.
  • Dengesiz bölüm anahtarları sıcak shard'lara yol açar.
  • Yüksek kartlılıkta anahtarlarla hafiflet.
  • Ölçeği artırmak/azaltmak için yeniden shard'la.
AWS üzerinde Uygulama Geliştirme

Kapasite modları: ayrılmış (provisioned)

  • İki kapasite modu vardır.
  • Ayrılmış mod, elle yönetilen sabit shard sayısı kullanır.
  • Öngörülebilir maliyet ve kapasite sunar.
  • Kısılmayı ve aşırı sağlanmayı önlemek için izleme gerekir.

 

kapasite modları

AWS üzerinde Uygulama Geliştirme

Kapasite modları: isteğe bağlı (on-demand)

  • İsteğe bağlı mod trafiklere göre otomatik ölçeklenir.
  • Elle shard yönetimi yoktur.
  • Öngörülemeyen iş yükleri için işlemleri basitleştirir.
  • Sürekli yoğun trafikte maliyet daha yüksektir.

 

kapasite modları

AWS üzerinde Uygulama Geliştirme

Kinesis Producer Library (KPL)

  • AWS kitaplıkları ölçeklenebilir üretici ve tüketici kurmayı kolaylaştırır.
  • Kinesis Producer Library (KPL) kayıtları toplar ve birleştirir.
  • Ayrıca kayıtları sıkıştırır ve hatada yeniden dener.
  • Üretici throughput'unu en üst düzeye çıkarmak için asenkron arabelleğe alır.

 

istemci kitaplıkları

AWS üzerinde Uygulama Geliştirme

Kinesis Consumer Library (KCL)

 

istemci kitaplıkları

 

  • Kinesis Consumer Library (KCL) shard koordinasyonunu yönetir.
  • Çalışan kiralaması ve checkpointing'i yönetir.
  • Durum, bir DynamoDB tablosunda saklanır.
  • Tüketiciler, nereden devam edeceklerini bulmak için bu durumu kullanır.
AWS üzerinde Uygulama Geliştirme

Hata yönetimi: idempotency

 

hata yönetimi

 

  • Kinesis teslimi en az bir kezdir, bu yüzden kopyalar olabilir.
  • Tüketicileri idempotent tasarla.
  • DynamoDB'de sıra numarası veya bir iş anahtarıyla tekilleştir.
  • Tüketiciler, bir sıra numarası veya zaman damgasından tutulan kayıtları yeniden okuyabilir.
AWS üzerinde Uygulama Geliştirme

Hata yönetimi: throughput hataları

 

hata yönetimi

 

  • ProvisionedThroughputExceededException kısılmayı gösterir.
  • Shard sayısını artırarak çöz.
  • Bölüm anahtarı dağılımını iyileştir.
  • Geri çekilmeli yeniden dene (backoff).
  • Kapasite modunu değiştir.
AWS üzerinde Uygulama Geliştirme
  • CloudWatch'ta IncomingBytes ve IncomingRecords'ı izle.
  • Kısılma için WriteProvisionedThroughputExceeded'e bak.
  • Üretimden yavaş tüketince tüketici gecikmesi oluşur.
  • GetRecords.IteratorAgeMilliseconds'ı izle: yüksek yaş gecikmeyi gösterir.

 

günlükleme ve izleme

AWS üzerinde Uygulama Geliştirme

Güvenlik

  • AWS KMS ile sunucu tarafı durağan şifreleme.
  • TLS ile aktarım sırasında şifreleme.
  • IAM ilkeleri erişimi kontrol eder.

 

güvenlik

AWS üzerinde Uygulama Geliştirme

Hadi pratik yapalım!

AWS üzerinde Uygulama Geliştirme

Preparing Video For Download...