Redis Nedir? Sentinel, Cluster, Hash Slots ve Redis Mimarisi
Redis mimarisinde uzmanlaşın. RDB/AOF kalıcılığından Sentinel'e; Redis Cluster'ın 16.384 Hash Slot mantığı, Resharding ve Gossip protokolüne derin bir bakış.

Problem Durumu: Uygulamanız Neden Yavaşlıyor?
Uygulamanız büyüdükçe, ana veritabanınız (PostgreSQL veya MySQL gibi) zorlanmaya başlar. Bir kullanıcı her veri istediğinde, sistem fiziksel bir disk üzerindeki milyonlarca satır arasında arama yapmak zorunda kalır. Bu bir darboğaz yaratır. Panelinizin neden saniyeler içinde yüklendiğini veya API'nizin yoğun trafik altında neden hata vermeye başladığını hiç merak ettiniz mi? Sorun 'Disk I/O' (Giriş/Çıkış) hızıdır ve çözüm daha hızlı bir katman gerektirir.
Çözüm: Redis
İşte bu noktada Redis devreye girer. Redis, verileriniz için yüksek hızlı bir şerit görevi görür. Yavaş disk işlemlerini beklemek yerine, Redis verileri sistemin RAM'inde (belleğinde) tutarak isteklere milisaniyenin altında yanıt vermenizi sağlar. O sadece bir veritabanı değil, bir performans motorudur.
Redis Nedir?
Redis (Remote Dictionary Server), açık kaynaklı, bellek içi (in-memory) bir veri yapısı deposudur. Veritabanı, önbellek (cache), mesaj kuyruğu (message broker) ve akış motoru olarak kullanılır. Verileri diskte saklayan geleneksel veritabanlarının aksine Redis, her şeyi bellekte tutar; bu yüzden inanılmaz derecede hızlıdır.
Redis'in Başlıca Faydaları:
Cache (Önbellekleme): Veritabanı yükünü azaltmak ve yanıt sürelerini hızlandırmak için sık erişilen verileri bellekte saklar.
Rate Limiting (Hız Sınırlama): Belirli bir kullanıcı veya IP'den gelen istek sayısını sayarak ve sınırlayarak API kötüye kullanımını önler.
Queue (Kuyruk Yönetimi): Listeleri veya Pub/Sub mekanizmalarını kullanarak arka plan işlemlerini etkili bir şekilde yönetir.
Session Management (Oturum Yönetimi): Kullanıcı oturum verilerini (giriş bilgileri gibi) kalıcı ve erişimi son derece hızlı tutar.
Gerçek Zamanlı Analiz: Sayfa görüntülemelerini, beğenileri veya aktif kullanıcıları atomik artırımlarla gerçek zamanlı saymak için mükemmeldir.

Redis Temel Mantık (System Flow)
Redis'in en önemli özelliği Bellek İçi (In-Memory) yapısıdır. Standart bir veritabanı 'Uygulama → Disk' şeklinde çalışırken, Redis akışı 'Uygulama → RAM' şeklinde çalışır.
Uçuculuk Sorunu: RAM doğası gereği uçucudur (volatile). Yani sunucu kapandığında veya çöktüğünde bellek içindeki tüm veriler anında silinir. Bunu engellemek için Redis, verileri diskte saklamamızı sağlayan Persistence (Kalıcılık) mekanizmaları sunar.
Redis Persistence (Veriyi Diskte Saklama)
Redis, verilerinizin bir yeniden başlatma sonrası hayatta kalması için iki ana yöntem sunar: RDB ve AOF.
1. RDB (Redis Database Snapshot)
RDB'nin mantığı, belirli zaman aralıklarıyla verilerinizin bir 'fotoğrafını' çekmektir. RAM'deki tüm verinin o anki halini alır ve diske sıkıştırılmış bir dosya olarak yazar.
Akış (Flow): Redis Memory → Snapshot Alınması →
dump.rdbdosyası
Örnek Zaman Çizelgesi:
10:00 → Snapshot alındı
10:05 → Snapshot alındı
10:10 → Snapshot alındı
Problem Senaryosu: Eğer 10:05'te snapshot alındıysa ve sunucu 10:06'da çökerse, 10:05 ile 10:06 arasındaki tüm veriler kaybolur; çünkü henüz yeni bir snapshot çekilmemiştir.
Avantajları: Disk dosyası küçüktür, veriyi geri yüklemek (restore) çok hızlıdır ve işlemciyi (CPU) yormaz.
Dezavantajları: Snapshot aralıklarında veri kaybı yaşanma riski yüksektir.
2. AOF (Append Only File)
Snapshot almak yerine, AOF her şeyi bir günlüğe kaydeder. Redis'e gelen her 'yazma' (write) komutu, anlık olarak bir log dosyasına eklenir.
// Günlüğe Kaydedilen Örnek Komutlar:
SET user:1 "Ali"
INCR views
LPUSH messages "hello"Sunucu yeniden başlatıldığında Redis bu günlüğü en baştan okur ve komutları sırayla tekrar çalıştırır.
Akış (Flow): Redis Restart → AOF Dosyası Okunur → Komutlar Tekrar Çalıştırılır → Memory Yeniden İnşa Edilir
Avantajları: Veri kaybı neredeyse sıfırdır, çok daha güvenlidir.
Dezavantajları: Log dosyası zamanla çok büyüyebilir ve her komut tek tek tekrar çalıştırıldığı için geri yükleme süreci RDB'ye göre daha yavaştır.
Kıyaslama: RDB vs AOF
Doğru yöntemi seçmek ihtiyaçlarınıza bağlıdır. İşte hızlı bir karşılaştırma tablosu:
Özellik | RDB | AOF |
|---|---|---|
Yöntem | Snapshot (Anlık Görüntü) | Command Log (Komut Günlüğü) |
Performans | Çok Hızlı | Biraz Daha Yavaş |
Veri Kaybı | Olabilir | Çok Az |
Geri Yükleme | Hızlı | Daha Yavaş |
Production Tavsiyesi: Gerçek hayat senaryolarında (Production ortamı) genellikle RDB + AOF birlikte kullanılır. RDB hızlı geri yükleme ve felaket kurtarma için kullanılırken, AOF veri güvenliğini sağlar.

Redis Sentinel: Failover Yöneticisi
Modern uygulamalarda yüksek erişilebilirlik (High Availability) esastır. Eğer tek bir Redis sunucunuz (Primary) varsa ve o çökerse, tüm sisteminiz durur. İşte Redis Sentinel, bu noktada cluster yapınızın nöbetçisi olarak devreye girer.
Sentinel'in Amacı: Redis sunucularınızı sürekli izlemek ve bir sorun oluştuğunda kurtarma sürecini (failover) otomatik olarak yönetmektir.
Sentinel Nasıl Çalışır? (Sistem Akışı)
Sentinel düğümleri sürekli olarak Primary düğümü izler. Eğer Primary yanıt vermeyi keserse, şu otomatik akış başlar:
Tespit: Bir Sentinel düğümü Primary'nin çöktüğünü fark eder.
Quorum (Çoğunluk) Kararı: Sentinel'ler kendi aralarında haberleşir. Eğer belirlenen çoğunluk (Quorum) sunucunun gerçekten çöktüğüne karar verirse failover süreci başlar.
Promote (Yükseltme): Sentinel, sağlıklı olan Replica (yedek) düğümlerden birini seçer ve onu Yeni Primary olarak ilan eder.
Yapılandırma: Diğer yedek düğümlere yeni Primary'yi takip etmeleri söylenir ve uygulama (Client) yeni adrese yönlendirilir.
Sentinel'in 3 Temel Görevi:
1. Monitoring (İzleme): Primary ve Replica sunucularınızın beklenen şekilde çalışıp çalışmadığını sürekli kontrol eder.
2. Automatic Failover (Otomatik Kurtarma): Primary çöktüğünde, insan müdahalesi olmadan bir Replica'yı Primary yapar.
3. Service Discovery (Hizmet Keşfi): Uygulamanız için tek doğru kaynaktır. Uygulamanız Sentinel'e sorar: "Şu anki Primary kim?" Sentinel de ona güncel IP adresini verir.
Redis Cluster: Hash Slot ve Sharding Mantığı
Tek bir sunucunun RAM kapasitesi yetmediğinde (örneğin 1TB veriniz olduğunda) devreye giren Redis Cluster, veriyi sunucular (Node'lar) arasında nasıl paylaştıracağını harika bir sistemle yönetir.
1. Hash Slots (Çekmece Mantığı)
Redis, verinin hangi sunucuda olduğunu bilmek için 16.384 adet Hash Slot (parça) kullanır. Bunu 16.384 çekmeceli dev bir dolap gibi düşünebilirsiniz. Kaydettiğiniz her anahtar (key), matematiksel bir formülle bu çekmecelerden birine yerleşir:
Formül:
hash(key) % 16384
Örnek: user:1 anahtarını kaydettiğinizde Redis bunun hash değerini hesaplar; sonuç 9000 çıkarsa, bu anahtar 9000 numaralı slotu barındıran sunucuya (örneğin Node 2) gider.
2. Resharding (Yeni Sunucu Ekleme)
Sisteminiz büyüdüğünde Node 4'ü cluster'a ekleyebilirsiniz. Redis, 16.384 slotu sunucular arasında yeniden dağıtır (Resharding). Eskiden 3 sunucu bu slotları paylaşırken, artık 4 sunucu paylaşır. Bu sayede sonsuz bir Yatay Ölçekleme sağlanır.
3. Gossip Protocol: Sunucuların Dedikodusu
Cluster içindeki sunucular sürekli birbirleriyle konuşurlar. Buna Gossip Protocol denir. Birbirlerine "Sen hayatta mısın? Node 3'ten haberin var mı?" diye sorarlar.
Sağlık Kontrolü: Eğer düğümlerin çoğunluğu bir sunucunun öldüğüne karar verirse, sistem otomatik olarak müdahale eder.
Kendi Kendini Onarma: Ölen Primary yerine bir Replica (yedek) anında Primary ilan edilir ve sistem hiç durmadan çalışmaya devam eder.

Redis Veri Tipleri: Ne Zaman Hangisini Kullanmalı?
Redis sadece basit bir anahtar-değer deposu değildir. İşte sunduğu esnek veri yapıları:
Strings: En temel tip. Metin, sayı veya binary veri saklar. Sayaçlar için idealdir.
Hashes: Alan-değer çiftlerinden oluşur. Kullanıcı profilleri gibi nesneleri saklamak için mükemmeldir.
Lists: Sıralı metin koleksiyonları. Kuyruk (Queue) sistemleri için kullanılır.
Sets: Benzersiz ve sırasız öğeler. Tekil ziyaretçileri takip etmek veya etiketleme (tagging) için kullanılır.
Sorted Sets (ZSets): Her öğenin bir 'skoru' vardır. Liderlik tabloları (Leaderboards) için otomatik sıralama sağlar.
Bitmaps: Bit düzeyinde işlemler yapar. Kullanıcıların günlük aktifliğini çok az bellekle takip etmenizi sağlar.
HyperLogLog: Çok büyük verilerde benzersiz öğe sayısını tahmin etmek için kullanılır.
Özet ve Sonuç
Redis, basit bir önbellek çözümünden çok daha fazlasıdır. Milisaniyelik hızı, Persistence seçenekleriyle sunduğu güvenliği, Sentinel ile sağladığı yüksek erişilebilirliği ve Cluster yapısıyla sunduğu sonsuz ölçeklenebilirliği sayesinde modern mimarilerin kalbinde yer alır. İster gerçek zamanlı bir oyunun skor tablosunu yönetin, ister API trafiğinizi sınırlayın; Redis doğru veri tipi ve doğru mimari kurguyla performans darboğazlarını ortadan kaldırır. Bu rehberdeki temel kavramları anlamak, hem daha hızlı hem de daha dayanıklı uygulamalar geliştirmenize yardımcı olacaktır.


Yorumlar
Henüz yorum yok. İlk yorumu sen bırak.
Sende bir yorum gönder