Bölüm 27 / 33
Queue, Cache, Olay ve Gerçek Zamanlı Sistemler
Asenkron işleme, mesajlaşma, cache ve canlı kullanıcı iletişimi kavramları.
3 canlı örnek — seçerek incele
İlgili kavramlar: Queue, Worker, Job, Cron
Job kuyruğu
- email:orderdone
- resize:imagerunning
- sync:stockqueued
Üretici ile tüketici arasında işleri mesaj olarak geçici saklayan sistem.
Mesajların belirli sırayla tüketildiği kuyruk.
Queue veya topic'e mesaj yayınlayan uygulama.
Mesajı alıp işleyen uygulama veya worker.
İş emri, olay veya veri taşıyan mesajlaşma birimi.
Mesajın taşıdığı asıl veri.
Mesaj kimliği, türü ve trace bilgisi gibi metadata.
Mesajları kabul eden, saklayan ve tüketicilere ileten sistem.
Queue, exchange ve routing key kullanan mesaj broker'ı.
Yüksek hacimli olay akışlarını partition'lı kalıcı log olarak saklayan platform.
Redis içinde append-only mesaj akışı ve consumer group sağlayan veri yapısı.
Redis üzerinde Node.js job queue, retry ve schedule özellikleri sunan kütüphane.
- JobT
Worker tarafından asenkron çalıştırılacak görev.
Queue'dan job alıp işlemi gerçekleştiren süreç.
Benzer job'ları ortak kuyruğa yönlendiren isim.
Aynı queue içindeki farklı görev davranışını belirten alan.
Job'ı benzersiz tanımlayıp duplicate önlemeye yardım eden kimlik.
Waiting, active, completed, failed veya delayed gibi görev durumu.
Belirli zaman geçtikten sonra işlenmeye hazır olan görev.
Takvim veya cron kuralıyla oluşturulan iş.
Belirli periyotta tekrar çalışan job.
Normal sıra yerine öncelik değerine göre daha erken işlenen görev.
Başarısız job'ı belirli sayıda tekrar çalıştırma.
Bir job'ın kaçıncı çalışma denemesi.
Retry denemeleri arasında bekleme stratejisi.
Her denemede aynı süre bekleyen retry.
Her denemede bekleme süresini katlayarak artırır.
Belirli deneme sonrası işlenemeyen mesajların taşındığı ayrı kuyruk.
İçeriği veya hatası nedeniyle her denemede consumer'ı başarısız eden mesaj.
Consumer'ın mesajı başarıyla işlediğini broker'a bildirmesi.
Mesajın işlenemediğini ve yeniden kuyruğa alınması/atılması gerektiğini bildirir.
Alınan mesajın başka consumer'a görünmeden işlenebileceği süre.
Mesajların grup üyeleri arasında paylaştırıldığı tüketici grubu.
Aynı queue'dan paralel job alan birden fazla worker.
Tek worker'ın aynı anda işleyebileceği job sayısı.
Consumer'ın acknowledgement öncesi alabileceği mesaj sayısı.
Kuyrukta bekleyen mesaj sayısı.
- LagO
Consumer'ın üretilen mesaj akışının ne kadar gerisinde kaldığı.
Birim zamanda işlenen mesaj sayısı.
Mesajların yayınlandığı sırayla işlenmesi garantisi.
Mesaj akışını anahtara göre paralel alt loglara bölen yapı.
Mesajın hangi partition'a gideceğini belirleyen anahtar.
Kafka partition içindeki mesaj konumu.
Mesajların broker üzerinde ne kadar süre veya boyuta kadar saklanacağı.
Broker yeniden başlasa da queue tanımının korunması.
Broker diske yazarak yeniden başlatmada korumaya çalıştığı mesaj.
Mesajın kaybolmaması için tekrar teslim ihtimalini kabul eden model.
Tekrarı engellerken mesaj kaybı ihtimalini kabul eden model.
Aynı mesaj tekrar gelse bile iş etkisini bir kez oluşturan consumer.
İşlenmiş message id'lerini saklayarak tekrarları engeller.
Database değişikliği ve yayınlanacak olayı aynı transaction'da outbox tablosuna yazma deseni.
Outbox tablosundaki olayları broker'a güvenli biçimde yayınlayan süreç.
Consumer'ın aldığı mesajları işlenmiş kimliklerle kaydedip duplicate etkisini önlemesi.
Servislerin durum değişikliklerini olay olarak yayınlayıp diğerlerinin tepki vermesi.
Geçmişte gerçekleşmiş ve değiştirilemez anlamlı durum değişikliği.
Bir işlemin yapılmasını isteyen niyet mesajı.
Birden fazla consumer'ın abone olabildiği olay kanalı.
Yayıncının mesajı doğrudan tüketiciyi bilmeden topic'e göndermesi.
RabbitMQ'da mesajı routing kurallarıyla queue'lara yönlendiren bileşen.
Mesajın hangi queue veya binding'e yönleneceğini belirleyen anahtar.
Routing key'in tam eşleşmesine göre mesaj yönlendirir.
Noktalı wildcard desenlerine göre routing yapar.
Mesajı bağlı tüm queue'lara kopyalar.
Olay payload alanları ve türlerinin sözleşmesi.
Olay şemasını eski consumer'ları bozmadan değiştirme süreci.
Olay sözleşmesinin sürüm bilgisi.
Yeni producer olayının eski consumer tarafından işlenebilmesi.
Geçmiş olayları yeniden consumer'lara işleterek durum veya analiz üretme.
Olayla güncellenen servislerin kısa süre farklı durumlarda olabilmesi.
Veriyi daha hızlı erişilen geçici depoda saklama.
Cache, session, lock, queue ve geçici veri için kullanılan bellek tabanlı veri deposu.
- KeyT
Redis veya cache kaydını benzersiz tanımlayan metin.
Cache anahtarının karşılığında saklanan veri.
Redis'in metin, sayı veya binary veri saklayan temel türü.
- HashT
Tek Redis key altında alan-değer çifti koleksiyonu.
- ListT
Sıralı string koleksiyonu.
- SetT
Tekrarsız string değerleri koleksiyonu.
Her elemanı skorla sıralanan tekrarsız koleksiyon.
- TTLT
Cache key'inin otomatik silinmesine kalan süre.
Key'in belirli süre veya tarihte geçersiz olması.
İstenen verinin cache'de bulunması.
İstenen verinin cache'de bulunmaması.
Toplam cache istekleri içinde hit oranı.
Uygulamanın cache'i kendisinin okuduğu ve doldurduğu desen.
Kaynak veri değiştiğinde eski cache değerini silme veya yenileme.
tenant:123:product:5 gibi anahtarları anlamlı prefix'lerle gruplama.
Popüler key sona erince çok sayıda request'in aynı anda kaynağa gitmesi.
Cache doldurma sırasında tek worker'ın kaynağa erişmesini sağlayan kilit.
Birden fazla süreç arasında tekil iş yürütmeyi koordinasyonla sağlayan kilit.
Birden fazla Redis node üzerinde dağıtık kilit algoritması.
Redis'te mesajların yalnızca o anda bağlı abonelere yayınlandığı geçici sistem.
Web session kayıtlarının Redis gibi ortak depoda tutulması.
Kullanıcı/IP istek sayısını süre penceresinde Redis ile sayma.
Sabit zaman aralıklarında istek sayısını sınırlayan algoritma.
Mevcut zamandan geriye kayan aralıkta istekleri sayan algoritma.
Belirli hızda dolan token'larla burst trafiğe kontrollü izin veren algoritma.
Dağıtık worker'lardan birini koordinasyon görevi için lider seçme.
Kullanıcıya veri değişikliklerini sayfa yenilemeden kısa gecikmeyle iletme.
İstemci ve sunucu arasında sürekli çift yönlü bağlantı.
HTTP upgrade isteğiyle WebSocket bağlantısına geçiş.
Açık istemci-sunucu iletişim oturumu.
Aktif gerçek zamanlı bağlantının benzersiz kimliği.
- RoomO
Belirli kullanıcı veya konu bağlantılarını mesaj grubu altında toplar.
Gerçek zamanlı mesajların konu veya erişim bazında ayrıldığı kanal.
Kullanıcının çevrim içi, aktif veya yazıyor durumunu takip etme.
Karşı kullanıcının mesaj yazdığını kısa süre gösteren olay.
Mesajın görüldüğünü veya okunduğunu bildiren kayıt.
Kullanıcının aktif bağlantısının olup olmadığını gösteren durum.
Bağlantının canlı olduğunu periyodik ping/pong mesajlarıyla doğrulama.
Bağlantı koptuğunda istemcinin yeniden bağlanması.
Tekrar bağlantı denemeleri arasında artan bekleme.
Mesajların doğru sırada gösterilmesi için sıra numarası.
Bağlantı kesildiğinde kaçırılan olayları son offset veya zamanla tekrar alma.
Sunucudan tarayıcıya tek yönlü olay akışı sağlayan HTTP tabanlı teknoloji.
Sunucunun yeni veri oluşana kadar HTTP isteğini açık tuttuğu iletişim tekniği.
İstemcinin belirli aralıklarla yeni veri olup olmadığını sorması.
Uygulama kapalıyken işletim sistemi veya tarayıcı üzerinden bildirim gönderme.
Service worker ve push subscription ile tarayıcı bildirimi gönderme.
| Kavram | Seviye | Kısa açıklama |
|---|---|---|
| Message Queue | T | Üretici ile tüketici arasında işleri mesaj olarak geçici saklayan sistem. |
| Queue | T | Mesajların belirli sırayla tüketildiği kuyruk. |
| Producer | T | Queue veya topic'e mesaj yayınlayan uygulama. |
| Consumer | T | Mesajı alıp işleyen uygulama veya worker. |
| Message | T | İş emri, olay veya veri taşıyan mesajlaşma birimi. |
| Payload | T | Mesajın taşıdığı asıl veri. |
| Header | O | Mesaj kimliği, türü ve trace bilgisi gibi metadata. |
| Broker | O | Mesajları kabul eden, saklayan ve tüketicilere ileten sistem. |
| RabbitMQ | O | Queue, exchange ve routing key kullanan mesaj broker'ı. |
| Kafka | İ | Yüksek hacimli olay akışlarını partition'lı kalıcı log olarak saklayan platform. |
| Redis Streams | O | Redis içinde append-only mesaj akışı ve consumer group sağlayan veri yapısı. |
| BullMQ | O | Redis üzerinde Node.js job queue, retry ve schedule özellikleri sunan kütüphane. |
| Job | T | Worker tarafından asenkron çalıştırılacak görev. |
| Worker | T | Queue'dan job alıp işlemi gerçekleştiren süreç. |
| Queue Name | T | Benzer job'ları ortak kuyruğa yönlendiren isim. |
| Job Type | T | Aynı queue içindeki farklı görev davranışını belirten alan. |
| Job ID | O | Job'ı benzersiz tanımlayıp duplicate önlemeye yardım eden kimlik. |
| Job Status | T | Waiting, active, completed, failed veya delayed gibi görev durumu. |
| Delayed Job | O | Belirli zaman geçtikten sonra işlenmeye hazır olan görev. |
| Scheduled Job | T | Takvim veya cron kuralıyla oluşturulan iş. |
| Recurring Job | O | Belirli periyotta tekrar çalışan job. |
| Priority Job | O | Normal sıra yerine öncelik değerine göre daha erken işlenen görev. |
| Retry | T | Başarısız job'ı belirli sayıda tekrar çalıştırma. |
| Attempt | T | Bir job'ın kaçıncı çalışma denemesi. |
| Backoff | O | Retry denemeleri arasında bekleme stratejisi. |
| Fixed Backoff | O | Her denemede aynı süre bekleyen retry. |
| Exponential Backoff | O | Her denemede bekleme süresini katlayarak artırır. |
| Dead Letter Queue | O | Belirli deneme sonrası işlenemeyen mesajların taşındığı ayrı kuyruk. |
| Poison Message | O | İçeriği veya hatası nedeniyle her denemede consumer'ı başarısız eden mesaj. |
| Acknowledgement | O | Consumer'ın mesajı başarıyla işlediğini broker'a bildirmesi. |
| Negative Acknowledgement | O | Mesajın işlenemediğini ve yeniden kuyruğa alınması/atılması gerektiğini bildirir. |
| Visibility Timeout | O | Alınan mesajın başka consumer'a görünmeden işlenebileceği süre. |
| Consumer Group | O | Mesajların grup üyeleri arasında paylaştırıldığı tüketici grubu. |
| Competing Consumers | O | Aynı queue'dan paralel job alan birden fazla worker. |
| Concurrency | O | Tek worker'ın aynı anda işleyebileceği job sayısı. |
| Prefetch | O | Consumer'ın acknowledgement öncesi alabileceği mesaj sayısı. |
| Queue Depth | O | Kuyrukta bekleyen mesaj sayısı. |
| Lag | O | Consumer'ın üretilen mesaj akışının ne kadar gerisinde kaldığı. |
| Throughput | O | Birim zamanda işlenen mesaj sayısı. |
| Message Ordering | O | Mesajların yayınlandığı sırayla işlenmesi garantisi. |
| Partition | İ | Mesaj akışını anahtara göre paralel alt loglara bölen yapı. |
| Partition Key | İ | Mesajın hangi partition'a gideceğini belirleyen anahtar. |
| Offset | İ | Kafka partition içindeki mesaj konumu. |
| Retention | O | Mesajların broker üzerinde ne kadar süre veya boyuta kadar saklanacağı. |
| Durable Queue | O | Broker yeniden başlasa da queue tanımının korunması. |
| Persistent Message | O | Broker diske yazarak yeniden başlatmada korumaya çalıştığı mesaj. |
| At-least-once | O | Mesajın kaybolmaması için tekrar teslim ihtimalini kabul eden model. |
| At-most-once | O | Tekrarı engellerken mesaj kaybı ihtimalini kabul eden model. |
| Idempotent Consumer | O | Aynı mesaj tekrar gelse bile iş etkisini bir kez oluşturan consumer. |
| Deduplication Store | O | İşlenmiş message id'lerini saklayarak tekrarları engeller. |
| Transactional Outbox | İ | Database değişikliği ve yayınlanacak olayı aynı transaction'da outbox tablosuna yazma deseni. |
| Outbox Relay | İ | Outbox tablosundaki olayları broker'a güvenli biçimde yayınlayan süreç. |
| Inbox Pattern | İ | Consumer'ın aldığı mesajları işlenmiş kimliklerle kaydedip duplicate etkisini önlemesi. |
| Event-driven Architecture | O | Servislerin durum değişikliklerini olay olarak yayınlayıp diğerlerinin tepki vermesi. |
| Event | T | Geçmişte gerçekleşmiş ve değiştirilemez anlamlı durum değişikliği. |
| Command | O | Bir işlemin yapılmasını isteyen niyet mesajı. |
| Topic | O | Birden fazla consumer'ın abone olabildiği olay kanalı. |
| Publish/Subscribe | O | Yayıncının mesajı doğrudan tüketiciyi bilmeden topic'e göndermesi. |
| Exchange | O | RabbitMQ'da mesajı routing kurallarıyla queue'lara yönlendiren bileşen. |
| Routing Key | O | Mesajın hangi queue veya binding'e yönleneceğini belirleyen anahtar. |
| Direct Exchange | O | Routing key'in tam eşleşmesine göre mesaj yönlendirir. |
| Topic Exchange | O | Noktalı wildcard desenlerine göre routing yapar. |
| Fanout Exchange | O | Mesajı bağlı tüm queue'lara kopyalar. |
| Event Schema | O | Olay payload alanları ve türlerinin sözleşmesi. |
| Schema Evolution | İ | Olay şemasını eski consumer'ları bozmadan değiştirme süreci. |
| Event Version | O | Olay sözleşmesinin sürüm bilgisi. |
| Backward Compatibility | O | Yeni producer olayının eski consumer tarafından işlenebilmesi. |
| Event Replay | İ | Geçmiş olayları yeniden consumer'lara işleterek durum veya analiz üretme. |
| Eventual Consistency | O | Olayla güncellenen servislerin kısa süre farklı durumlarda olabilmesi. |
| Cache | T | Veriyi daha hızlı erişilen geçici depoda saklama. |
| Redis | T | Cache, session, lock, queue ve geçici veri için kullanılan bellek tabanlı veri deposu. |
| Key | T | Redis veya cache kaydını benzersiz tanımlayan metin. |
| Value | T | Cache anahtarının karşılığında saklanan veri. |
| String | T | Redis'in metin, sayı veya binary veri saklayan temel türü. |
| Hash | T | Tek Redis key altında alan-değer çifti koleksiyonu. |
| List | T | Sıralı string koleksiyonu. |
| Set | T | Tekrarsız string değerleri koleksiyonu. |
| Sorted Set | O | Her elemanı skorla sıralanan tekrarsız koleksiyon. |
| TTL | T | Cache key'inin otomatik silinmesine kalan süre. |
| Expiration | T | Key'in belirli süre veya tarihte geçersiz olması. |
| Cache Hit | T | İstenen verinin cache'de bulunması. |
| Cache Miss | T | İstenen verinin cache'de bulunmaması. |
| Hit Ratio | O | Toplam cache istekleri içinde hit oranı. |
| Cache Aside | O | Uygulamanın cache'i kendisinin okuduğu ve doldurduğu desen. |
| Invalidation | O | Kaynak veri değiştiğinde eski cache değerini silme veya yenileme. |
| Key Namespace | T | tenant:123:product:5 gibi anahtarları anlamlı prefix'lerle gruplama. |
| Cache Stampede | İ | Popüler key sona erince çok sayıda request'in aynı anda kaynağa gitmesi. |
| Mutex Lock | O | Cache doldurma sırasında tek worker'ın kaynağa erişmesini sağlayan kilit. |
| Distributed Lock | İ | Birden fazla süreç arasında tekil iş yürütmeyi koordinasyonla sağlayan kilit. |
| Redlock | İ | Birden fazla Redis node üzerinde dağıtık kilit algoritması. |
| Pub/Sub | O | Redis'te mesajların yalnızca o anda bağlı abonelere yayınlandığı geçici sistem. |
| Session Store | T | Web session kayıtlarının Redis gibi ortak depoda tutulması. |
| Rate Limit Counter | O | Kullanıcı/IP istek sayısını süre penceresinde Redis ile sayma. |
| Fixed Window | O | Sabit zaman aralıklarında istek sayısını sınırlayan algoritma. |
| Sliding Window | İ | Mevcut zamandan geriye kayan aralıkta istekleri sayan algoritma. |
| Token Bucket | İ | Belirli hızda dolan token'larla burst trafiğe kontrollü izin veren algoritma. |
| Leader Election | İ | Dağıtık worker'lardan birini koordinasyon görevi için lider seçme. |
| Real-time Communication | T | Kullanıcıya veri değişikliklerini sayfa yenilemeden kısa gecikmeyle iletme. |
| WebSocket | T | İstemci ve sunucu arasında sürekli çift yönlü bağlantı. |
| WebSocket Handshake | O | HTTP upgrade isteğiyle WebSocket bağlantısına geçiş. |
| Connection | T | Açık istemci-sunucu iletişim oturumu. |
| Socket ID | T | Aktif gerçek zamanlı bağlantının benzersiz kimliği. |
| Room | O | Belirli kullanıcı veya konu bağlantılarını mesaj grubu altında toplar. |
| Channel | O | Gerçek zamanlı mesajların konu veya erişim bazında ayrıldığı kanal. |
| Presence | O | Kullanıcının çevrim içi, aktif veya yazıyor durumunu takip etme. |
| Typing Indicator | T | Karşı kullanıcının mesaj yazdığını kısa süre gösteren olay. |
| Read Receipt | T | Mesajın görüldüğünü veya okunduğunu bildiren kayıt. |
| Online Status | T | Kullanıcının aktif bağlantısının olup olmadığını gösteren durum. |
| Heartbeat | O | Bağlantının canlı olduğunu periyodik ping/pong mesajlarıyla doğrulama. |
| Reconnect | T | Bağlantı koptuğunda istemcinin yeniden bağlanması. |
| Reconnection Backoff | O | Tekrar bağlantı denemeleri arasında artan bekleme. |
| Message Sequence | İ | Mesajların doğru sırada gösterilmesi için sıra numarası. |
| Missed Event Recovery | İ | Bağlantı kesildiğinde kaçırılan olayları son offset veya zamanla tekrar alma. |
| Server-Sent Events | O | Sunucudan tarayıcıya tek yönlü olay akışı sağlayan HTTP tabanlı teknoloji. |
| Long Polling | O | Sunucunun yeni veri oluşana kadar HTTP isteğini açık tuttuğu iletişim tekniği. |
| Polling | T | İstemcinin belirli aralıklarla yeni veri olup olmadığını sorması. |
| Push Notification | T | Uygulama kapalıyken işletim sistemi veya tarayıcı üzerinden bildirim gönderme. |
| Web Push | O | Service worker ve push subscription ile tarayıcı bildirimi gönderme. |
Bölüm uygulamaları
Bu bölümü bitirmeden önce şunları deneyin veya açıklayın.
- Domain süresi kontrolü, e-posta gönderimi ve rapor üretimi için ayrı queue/worker yapısı tasarlayın.
- Transactional outbox ve idempotent consumer ile sipariş oluşturuldu olayını güvenilir yayınlayın.
- Chat sistemi için room, message ordering, reconnect ve missed event recovery akışını planlayın.