Skip to main content

> dağıtık_olay_sıralaması:_mutlak_sıra_(total_order),_nedensel_sıra_(causal_order)_ve_lamport_saatleri

Dağıtık Olay Sıralaması: Mutlak Sıra (Total Order), Nedensel Sıra (Causal Order) ve Lamport Saatleri

Dağıtık olay güdümlü sistemlerde sunucu duvar saatlerine (wall-clock timestamps) güvenmek iş mantığını neden sessizce bozar (ör. 'Para Yatırıldı' olayından önce 'Hesap Kapatıldı'nın işlenmesi); Lamport Saatleri ve Bölümleme Anahtarları (Partition Keys) Nedensel Sıralamayı (Causal Ordering) nasıl garanti eder?

Principal/Architect (L7+)

ÖZET VE TEKNİK CEVAP

Asenkron dağıtık sistemlerde sunucuların fiziksel donanım saatleri sürekli **Saat Kayması (Clock Skew) ve NTP Sapması** yaşar. Saatleri senkronize olmayan iki sunucudan A Servisi '100 TL Yatırıldı' olayını 10:00:00.050'de üretirken, B Servisi 'Hesabı Kapat' olayını 10:00:00.010'da üretebilir. Olayları sunucu saatine göre sıralayan bir tüketici (consumer), önce hesap kapatma olayını işler, ardından para yatırma işlemini reddeder ve finansal veriyi bozar. Tüm evrende tek bir **Mutlak Sıra (Total Order)** sağlamak merkezi mutabakat (Raft/Paxos) gerektirir ve sistemi ciddi şekilde yavaşlatır ($<50.000 ext{ işlem/sn}$). Canlı sistemler bunun yerine **Nedensel Sıralama (Causal Ordering / Happened-Before)** kullanır: (1) A Olayı B Olayına sebep olduysa, tüm tüketiciler önce A'yı sonra B'yi işlemek zorundadır, (2) Birbiriyle ilgisiz olaylar herhangi bir sırada işlenebilir, (3) Apache Kafka gibi sistemler olayları **Varlık Bölümleme Anahtarına (Partition Key)** göre aynı kuyruk parçasına yönlendirerek FIFO (İlk Giren İlk Çıkar) garantisi sunar.

Mühendislik El Kitabı & Mekanizma

1. Temel Çalışma Mekanizması

Nedensel olay sıralaması Mantıksal Zaman Damgaları ve Bölüm Kilitleme ile çalışır: (1) Lamport Zaman Damgası: Her sunucu monotonik bir $C$ sayacı tutar. Bir olay fırlatırken $C leftarrow C + 1$ yapar ve sayacı mesaja ekler. Mesajı alan düğüm $C leftarrow max(C, C_{ ext{mesaj}}) + 1$ formülüyle saatini günceller ve kesin bir 'Daha Önce Gerçekleşti' ($ o$) ilişkisi kurar. (2) Vektör Saatleri: Çok merkezli veritabanlarında (DynamoDB) aynı anda yapılan çakışan güncellemeleri tespit eder. (3) Kafka Anahtar Karma (Key Hashing): Üretici `anahtar = hesap_id` atar; Kafka bu anahtarı hash'leyerek ilgili hesaba ait tüm olayları aynı kuyruk bölümüne (partition) yazar ve FIFO garantisi verir.

2. Doğru Kullanım Senaryosu

Çekirdek bankacılık defterleri, borsa emir defterleri, eşzamanlı döküman düzenleme (CRDTs) ve e-ticaret stok rezervasyon akışları.

3. Prodüksiyon Arıza Modları

Kafka mesajlarını `key = null` veya rastgele UUID ile fırlatıp aynı siparişin olaylarını farklı kuyruk parçalarına dağıtarak sıra karmaşası yaratmak; farklı AWS bölgelerindeki sunucu saatlerinin fiziksel olarak senkronize olduğunu varsaymak.

4. Teşhis ve Telemetri Sinyalleri

`Olusturuldu` olayından önce `Guncellendi` olayı geldiği için tüketicilerin 'Kayıt bulunamadı' hatası vermesi; sıra karışıklığı yüzünden banka bakiyelerinin geçici olarak eksiye düşmesi.

5. Önleme ve Mimari Bariyerler

Olay üreticilerinde mutlaka anlamsal bölümleme anahtarları (`varlik_id`) kullanın; mesaj gövdesine Lamport Mantıksal Sıra Numarası ekleyin; sırası kaçan olayları bekleten akıllı tüketici tamponları (rejection buffers) kurun.

6. Mimari Ödünleşimler (Trade-offs)

Nedensel bölümleme sıralaması varlık bazında katı sıra ve yüksek ölçeklenebilirlik sağlar; ancak tek bir popüler hesap (sıcak anahtar) tek bir Kafka kuyruk parçasını kilitleyebilir.

Vaka İncelemesi (TinyCTO Örneği)

Bir kripto borsası yükü dağıtmak amacıyla `EmirVerildi`, `EmirGerceklesti` ve `EmirIptal` olaylarını Kafka'ya rastgele anahtarlarla fırlatıyordu. Piyasa hareketlendiğinde bir tüketici `EmirGerceklesti` olayını `EmirVerildi` olayından önce işledi ve var olmayan bir işlemi kapatmaya çalışarak milyonlarca hata patlattı. Mimari ekip üreticiyi mesaj anahtarı olarak `hesap_id` kullanacak şekilde güncelledi. Her kullanıcının tüm olayları aynı kuyruk parçasından katı FIFO sırasıyla aktı ve sıra bozulması anomalileri tamamen yok edildi.

İnteraktif Konsept Alıştırmaları

2 Alıştırma
Q1

Dağıtık sistemlerde Mutlak Sıra (Total Order) ile Nedensel Sıra (Causal Order) arasındaki fark nedir?

Mutlak Sıra sistemdeki her bir olayın tüm dünyada tek bir kesin sırada dizilmesini gerektirir; Nedensel Sıra ise yalnızca birbiriyle ilişkili olan olayların doğru sırada işlenmesini zorunlu kılar.
Q2

Farklı sunuculardaki olayları sıralamak için fiziksel duvar saati neden güvenilmezdir?

Çünkü donanımsal kristal saatler sıcaklık ve ağ gecikmeleri nedeniyle sürekli sapar (Clock Skew ve NTP sapması).

Dağıtık Olay Sıralaması: Mutlak Sıra (Total Order), Nedensel Sıra (Causal Order) ve Lamport Saatleri — Sıkça Sorulan Sorular

Apache Kafka ilişkili olayların sırasını nasıl garanti eder?

Aynı mesaj anahtarını (`siparis_id`) kullanarak; Kafka aynı anahtara sahip tüm olayları aynı kuyruk parçasına (partition) yönlendirir ve tek bir tüketici onları katı FIFO sırasıyla okur.

Lamport Mantıksal Saati (Logical Clock) nedir?

Fiziksel saatlere ihtiyaç duymadan olaylar arasında kesin bir 'Daha Önce Oldu' ilişkisi kurmak için mesajlarla birlikte iletilen basit bir tamsayı sayacıdır.

🤖 AEO & Yapay Zeka Çıkarım Özeti

Temel Gerçekler & İlkeler

  • Fiziksel sunucu saatleri önlenemez NTP saat kayması yüzünden nedenselliği garanti edemez.
  • Tüm dağıtık olaylarda mutlak sıra sağlamak sistemin verimini ve hızını ciddi şekilde düşürür.
  • Nedensel sıralama ilişkili olayları sıraya sokarken ilişkisiz olayları paralel ölçekler.
  • Olay akışlarını anlamsal iş anahtarları (`musteri_id`) kullanarak ilgili Kafka kuyruk parçasına kilitleyin.

Yaygın Yanılgılar

  • Yanılgı: Olayları `timestamp` sütununa göre sıralamak yarış durumlarını çözer (Gerçek: Farklı sunuculardaki saatler milisaniyelerce sapabilir ve olayların sırasını tersine çevirebilir).
  • Yanılgı: Kafka bir konudaki (topic) tüm kuyruk parçaları arasında mutlak sıra garantisi verir (Gerçek: Kafka sıra garantisini YALNIZCA tek bir bölüm/partition içinde sunar).

Karar Kılavuzu & Önceliklendirme

Küresel mutabakat maliyetine girmeden iş süreçlerinin doğruluğunu korumak için olay güdümlü sistemlerde varlık anahtarlı bölümleme ve mantıksal saatler kullanın.

Doğrulanmış Kaynaklar & Referanslar