Olay kaynak eşlemeleri ve akış işleme

AWS Lambda ile Sunucusuz Uygulamalar

Claudio Canales

Senior DevOps Engineer

Olay kaynak eşlemeleri nereye oturur

  • Kuyruklar ve akışlar genelde toplu olarak yoklanır.
  • Olay kaynak eşlemeleri yoklama ve toplu davranışı yönetir.

Olay kaynak eşleme konumu

AWS Lambda ile Sunucusuz Uygulamalar

Olay kaynak eşleme nedir?

  • Bir kaynağı işlevinize bağlayan kaynak.
  • Lambda, kaynaktaki kayıtları yoklar.
  • Lambda, işleyicinizi bir toplu ile çağırır.

Olay kaynak eşleme akışı

AWS Lambda ile Sunucusuz Uygulamalar

İtme vs yoklama (neden önemli)

İtme modeli

  • İtme kaynakları olayları anında gönderir.
  • Örnek: Amazon S3'e yükleme.

Yoklama modeli

  • Yoklama kaynakları Lambda tarafından kontrol edilir.
  • Lambda bir toplu oluşturur ve işleyicinizi çağırır.
  • Bu, gecikme ve yeniden deneme davranışını değiştirir.

İtme vs yoklama modelleri

AWS Lambda ile Sunucusuz Uygulamalar

Kuyruk vs akış

Kuyruk (Amazon SQS)

  • Gelen kutusu gibi, yönetilen bir mesaj kuyruğu.

Akış (DynamoDB Streams)

  • Bir DynamoDB tablosu için değişiklik günlüğü.
  • Her ikisi de Record olarak gelir; anlamları farklıdır.

Kuyruk ve akış karşılaştırması

AWS Lambda ile Sunucusuz Uygulamalar

Toplu olay şekli (basitleştirilmiş)

{
  "Records": [{
    "messageId": "abc-123",
    "body": "{\"order_id\": \"A-42\"}"
  }]
}
  • Çoğu eşleme olayı Records ile başlar.
  • Her kaydın bir messageId ve body dizesi vardır.
  • body'yi kendi yükünüze ayrıştırın.
AWS Lambda ile Sunucusuz Uygulamalar

Adım adım: her kaydı işleme

def lambda_handler(event, context):
    records = event.get("Records", [])
    for record in records:
        body = record.get("body", "")
        print("BODY:", body)
    return {"statusCode": 200}
  • Varsayılan bir liste ile Records'u okuyun.
  • Her kaydı döngüleyin ve body'yi güvenli okuyun.
  • Gerekeni günlüğe yazın, sonra döndürün.
AWS Lambda ile Sunucusuz Uygulamalar

Adım adım: JSON gövdesini ayrıştırma

import json

def lambda_handler(event, context):
    record = event.get("Records", [])[0]
    payload = json.loads(record.get("body", "{}"))
    order_id = payload.get("order_id")
    print("ORDER_ID:", order_id)
    return {"statusCode": 200}
  • json içe aktarın ve body'yi güvenli varsayılanla okuyun.
  • json.loads ile ayrıştırıp bir dict alın.
  • Gerekli alanları çıkarın; önce doğrulayın.
AWS Lambda ile Sunucusuz Uygulamalar

Toplama: toplu boyutu ve pencere

  • Toplu boyutu: çağrı başına kayıt sayısı.
  • Toplu penceresi: Lambda'nın bir topluluğu doldurmak için beklediği süre.
  • Daha büyük toplular verimi artırır, ancak her çalışmada işi büyütür.
  • SQS için yığılma adına ApproximateAgeOfOldestMessage'ı izleyin.

Toplu boyutu ödün diyagramı

AWS Lambda ile Sunucusuz Uygulamalar

Toplu boyutu ödünleri

  • Büyük toplular verimli ama gecikmeyi artırabilir.
  • Küçük toplular ilk işleme süresini düşürür ama çağrıları artırır.
  • İş yükünüze göre seçin.

Toplu boyutu vs gecikme grafiği

AWS Lambda ile Sunucusuz Uygulamalar

Eşzamanlılık ile ölçekleme

  • Birden çok toplu aynı anda işlenir.
  • Daha yüksek eşzamanlılık verimi artırır.
  • Ancak alt sistem yükünü de artırır.

Eşzamanlı toplu işleme

AWS Lambda ile Sunucusuz Uygulamalar

Alt sistemleri koruyun

  • Aşırı eşzamanlılık bir veritabanını veya API'yi zorlayabilir.
  • Yükü sınırlamak için kısıtlar kullanın.
  • Küçük, güvenli iş birimlerini tercih edin.

Alt sistem yük koruması

AWS Lambda ile Sunucusuz Uygulamalar

Kısmi toplu hataları

  • Bir toplu iyi ve kötü kayıtlar içerebilir.
  • Kısmi hata yoksa, tek kötü kayıt tüm topluyu yeniden dener.
  • Kısmi hata işleme, sadece hatalı öğeleri yeniden denetir.

Kısmi toplu hata akışı

AWS Lambda ile Sunucusuz Uygulamalar

Adım adım: kısmi hataları raporlama (SQS)

def lambda_handler(event, context):
    failures = []
    for record in event.get("Records", []):
        try:
            process(record)
        except Exception:
            failures.append({"itemIdentifier": record["messageId"]})
    return {"batchItemFailures": failures}
  • Başarısız kayıtların messageId'lerini batchItemFailures içinde toplayın.
  • Lambda yalnızca bu öğeleri yeniden dener.
  • Başarıyla işlenen kayıtlar yeniden gönderilmez.
AWS Lambda ile Sunucusuz Uygulamalar

Önemli çıkarımlar

  • Olay kaynak eşlemeleri kuyrukları ve akışları yoklar.
  • Kayıtları toplu halde işleyicinize teslim ederler.
  • Toplu boyutu ve pencere, gecikme/verim dengesidir.
  • Kısmi hatalar, başarılıların yeniden işlenmesini önler.

Eşleme özet diyagramı

AWS Lambda ile Sunucusuz Uygulamalar

Hadi pratik yapalım!

AWS Lambda ile Sunucusuz Uygulamalar

Preparing Video For Download...