AWS Kinesis ve Lambda ile Gerçek Zamanlı Akış Katmanı Oluşturma
AWS üzerinde sağlam bir veri platformu oluşturmak, hem zamanlanmış veri işlemeyi hem de anlık olay odaklı tepkileri anlamayı gerektirir. Toplu (batch) veri işleme ardışık düzenleri (pipeline) ağır analiz görevlerini üstlenirken, gerçek zamanlı akış (streaming) kritik olaylar için acil bir duman dedektörü görevi görür.
Bu kılavuzda, Amazon Kinesis Data Streams ve AWS Lambda kullanarak mevcut bir telematik platformuna gerçek zamanlı bir akış katmanının nasıl ekleneceğini inceleyeceğiz.
Toplu (Batch) ve Akış (Stream) İşleme Karşılaştırması
Toplu işleme ile akış işleme arasındaki farkı anlamak çok önemlidir. Bunlar rakip yaklaşımlar değil, eksiksiz bir mimaride birbirini tamamlayan ritimlerdir.
- Toplu (Batch) İşleme: Çekme (pull) tabanlıdır ve bir zamanlamaya göre çalışır. Büyük hacimli verileri kapsamlı bir şekilde işlemede, yetkili raporlar ve derinlemesine analizler sağlamada mükemmeldir. "Geçtiğimiz gün ne oldu?" sorusuna yanıt verir.
- Akış (Stream) İşleme: İtme (push) tabanlıdır ve olay odaklıdır. Sistem, bir zamanlamayı beklemeden kayıtlar ulaştıkça anında tepki verir. "Şu anda kritik bir şey oluyor mu?" sorusuna yanıt verir.
İyi tasarlanmış bir platform, veri gölleri için Amazon S3 ile birlikte AWS Glue ve Athena gibi araçları kullanarak doğruluğun kaynağı (source of truth) olarak hizmet veren bir toplu işleme katmanı kullanırken, akış katmanı anlık uyarıları ve hızlı yanıtları yönetir.
Gerçek Zamanlı Mimariye Genel Bakış
Gerçek zamanlı bir bileşen eklemek, bir veri kaynağını doğrudan bir akışa ve bir tüketiciye (consumer) bağlamayı içerir.
- Ping Kaynağı: Uygulamalar, API'ler (örneğin AWS API Gateway) veya IoT cihazları veri gönderir.
- Kinesis Data Stream: Gelen veri akışı için dayanıklı, sıralı bir günlük (log) görevi görür.
- Olay Kaynağı Eşlemesi (Event Source Mapping): Akışı sürekli olarak okuyan ve kayıtları yığınlar (batch) halinde gruplayan AWS tarafından yönetilen bir yoklayıcıdır (poller).
- AWS Lambda: Olay Kaynağı Eşlemesi tarafından yığını analiz etmek ve tepki vermek (örneğin aşırı hız veya sert frenleme için uyarılar tetiklemek) üzere tetiklenen tüketici fonksiyonu.
Olay Kaynağı Eşlemesinin Rolü
Olay kaynağı eşlemesi, bu sunucusuz (serverless) mimaride önemli bir bileşendir. Bir Kinesis akışını bir Lambda fonksiyonuna bağladığınızda, AWS akışı sürekli yoklama (polling) karmaşık görevini üstlenir. Kayıtları toplar ve yığın boyutu (batch size) veya yığınlama penceresi (batching window) gibi önceden tanımlanmış eşiklere göre Lambda fonksiyonunuzu çağırır. Bu, özel bir yoklama altyapısını yönetmeniz gerekmediği anlamına gelir.
Tüketici Lambda Fonksiyonu
Lambda fonksiyonu, akışa alınan olayları işler. Kinesis, verileri base64 kodlu baytlar olarak teslim ettiğinden, ilk adım her zaman yükü (payload) JSON gibi kullanılabilir bir formata çözmektir.
import json
import base64
def handler(event, context):
alerts = 0
for record in event.get("Records", []):
# Kinesis veri yükünün kodunu çöz
payload = base64.b64decode(record["kinesis"]["data"]).decode('utf-8')
ping = json.loads(payload)
speed = float(ping.get("speed_kph", 0))
reasons = []
# İş kurallarını uygula
if speed > 100:
reasons.append(f"Aşırı Hız: {speed} kph")
if ping.get("harsh_event"):
reasons.append(f"Sert Olay: {ping['harsh_event']}")
if reasons:
alerts += 1
print(f"UYARI vehicle={ping.get('vehicle_id')} :: {', '.join(reasons)}")
return {"processed": len(event.get("Records", [])), "alerts": alerts}
Bu fonksiyon, gelen telematik verileri üzerinde kuralların ne kadar hızlı değerlendirilebileceğini gösterir.
Dağıtım ve Maliyet Hususları
Gerçek zamanlı mimariyi dağıtırken, tamamen sunucusuz toplu işleme kurulumlarına kıyasla önemli operasyonel farklar vardır.
Kinesis Maliyetleri
Kesinlikle kullanım başına ödeme olan API Gateway veya standart Lambda çağrılarının aksine, bir Kinesis Data Stream'in shard başına saatlik bir maliyeti vardır. Shard her zaman sağlanır ve bekler durumdadır, bu da veri veriminden bağımsız olarak ücrete tabi olduğu anlamına gelir. Bunu mimari kararlarınızda hesaba katmalısınız.
Terraform gibi Kod Olarak Altyapı (IaC) araçlarını kullanarak, akış bileşenlerini özellik bayraklarının (feature flags) arkasına yerleştirerek bunu verimli bir şekilde yönetebilirsiniz.
resource "aws_kinesis_stream" "telematics_stream" {
count = var.enable_streaming ? 1 : 0
name = "${var.project}-stream"
shard_count = 1
}
Bu, kullanılmadığında altyapıyı kolayca yıkmanıza (tear down) olanak tanır.
Soğuk Başlatmalar (Cold Starts)
AWS Lambda'yı kullanırken, "soğuk başlatmalar" (cold starts) gecikmeye (latency) neden olabilir. Bir soğuk başlatma, AWS'nin kodunuzu çalıştırmadan önce yürütme ortamını başlatması gerektiğinde meydana gelir. Milisaniyelerin önemli olduğu akış mimarilerinde, bu ilk gecikme (örneğin 80-100 ms) önemli olabilir. Ancak, birçok uyarı kullanım senaryosu için bu ara sıra görülen gecikme kabul edilebilirdir.
Sonuç
Derinlemesine analizler için zamanlanmış bir toplu işleme (batch processing) katmanını, gerçek zamanlı uyarılar için bir Kinesis ve Lambda akış (streaming) katmanıyla birleştirmek, eksiksiz, üretim düzeyinde bir veri platformu oluşturur. Akış katmanı, kritik olaylara meydana geldikleri anda tepki veren hayati bir erken uyarı sistemi görevi görür.