RabbitMQ ve Redis Arasındaki Fark Nedir?
RabbitMQ bir mesaj aracısı iken Uzak Sözlük Sunucusu (Redis) bir bellek içi anahtar-değer veri deposudur. Ancak her ikisini de bir yayınla-abone ol (pub/sub) mesajlaşma sistemi oluşturmak için kullanabileceğinizden bu iki teknolojiyi karşılaştırabilirsiniz. Modern bulut mimarisinde uygulamalar, hizmetler adı verilen daha küçük ve bağımsız yapı taşlarına ayrılır. Pub/sub mesajlaşma, bu dağıtılan sistemler için anlık olay bildirimleri sağlar. RabbitMQ, işlenmek üzere farklı hedeflere yönlendirmek için birden fazla kaynaktan akış verilerini toplayan dağıtılmış bir mesaj aracısıdır. Redis, bir olay gerçekleştiğinde yayıncının mesajları tüm abonelere dağıttığı gönderme tabanlı bir sistemi destekler.
Çalışma yöntemleri: RabbitMQ ve Redis
Hem RabbitMQ hem de Redis; uygulamaların, mikro hizmetlerin ve yazılım bileşenlerinin farklı şekillerde mesaj alışverişinde bulunmasına izin verir.
RabbitMQ iş akışı
RabbitMQ, mesaj aracıları aracılığıyla mesajları güvenli bir şekilde göndermek için Gelişmiş Mesaj Kuyruğu Protokolü'nü (AMQP) kullanır. Bir mesaj aracısı, değişimlerden ve kuyruklardan oluşur. Süreç şu şekilde işler:
- Veri üreticisi, RabbitMQ'ya mesaj gönderir
- Bir değiş tokuş merkezi verileri alır ve bağlama adı verilen bir dizi kurala göre ilgili kuyruğa yönlendirir
- Mesaj, bir RabbitMQ tüketicisi onu alana kadar kuyrukta bekler
Kuyruk maksimum kapasiteye ulaştığında RabbitMQ, tüketiciler okunmamış mesajları işleyene kadar üreticilerin mesaj yayınlamasını engeller. Ayrıca RabbitMQ, tüketiciler okumadan önce değiş tokuş başarısız olursa mesajları geri yükleyebilir.
Redis iş akışı
Redis; listeler, kümeler, karmalar ve bit eşlemler gibi çeşitli veri yapılarını destekleyen bir veri yapısı sunucusu olarak tasarlanmıştır. İstemci uygulamalarının hemen hemen her veri türünü depolamasına, almasına ve işlemesine olanak tanır. Redis, depolanan verileri, anahtar-değer çiftleri halinde düzenler. Bu, abone olan istemci uygulamaları için yapılandırılmış bir düzen sunar.
Örneğin, e-ticaret verilerini müşteri adına, e-postaya, satın alınan öğelere ve geri bildirim anahtarlarına ayırabilirsiniz. Daha sonra, her anahtar için ilgili verileri yayınlarsınız.
Redis, kısa süre saklanan mesajların gerçek zamanlı alışverişini sağlar. Şu şekilde çalışır:
- Veri üreticisi Redis'e mesaj gönderir
- Redis düğümü, ilgilenen aboneleri belirlemek için mesaj anahtarını kontrol eder
- Redis, mesajı bağlı tüm abonelere teslim eder
Mesaj işleme: RabbitMQ ve Redis pub/sub
Hem Redis hem de RabbitMQ, uygulamaların mesajları bulut ortamında dağıtması için yayınla-abone ol (pub/sub) mekanizmaları sağlar. Ancak mesaj işleme önemli ölçüde farklılık gösterir.
Pub/sub mesajlaşma hakkında bilgi edinin »
Mesaj teslimi
RabbitMQ, karmaşık yönlendirme mantığını desteklemek için Gelişmiş Mesaj Kuyruğu Protokolü'nü (AMQP) kullanır. Mesajları noktadan noktaya veya bir üreticiden birçok tüketiciye teslim edebilir. Yöntemlerden bağımsız olarak, tüm tüketiciler başarılı bir okumayı onaylamak için üreticiye mesaj onayları gönderir. Üretici bir onay almazsa farklı aralıklarla birkaç yeniden deneme yapar.
Bu arada, Redis sadece bağlı tüm abonelere mesaj gönderir. Mesaj teslimini garanti etmez. Bir abonenin, gelen mesajları almak için Redis sunucusuna bağlanması gerekir. Redis'in bağlantısı kesilirse hiçbir mesajı almak mümkün olmayabilir.
Mesaj boyutu
RabbitMQ, performansta önemli bir düşüş yaşamadan daha büyük mesajlar gönderebilir. Başlangıçta 2 GB'a kadar olan mesajları işlemek için tasarlanmış ancak daha sonra sınır 128 MB'a düşürülmüştür.
Diğer yandan, Redis depolanan mesajlar için bir sınır tanımlamaz ancak 1 MB'tan büyük mesajlarda kayda değer bir gecikme yaşar. Bu nedenle, geliştiriciler genellikle dizeler, karmalar, listeler ve kümeler gibi veri kümelerini işlemek için Redis'i önbellek olarak kullanır.
Mesaj kalıcılığı
RabbitMQ, kalıcı mesajları ve geçici mesajları destekler. Kalıcı kuyruğa mesaj gönderdiğinde, verileri gelir gelmez kalıcı depolamaya yazar. RabbitMQ, yalnızca belleğin kapasitesini aşmaları durumunda diske geçici mesajlar yazar.
Öte yandan Redis, varsayılan olarak kalıcı mesajları desteklemez. Geliştiriciler, RAM'in düzenli anlık yedeklerini almak ve bunları diskte saklamak için Redis Veritabanı (RDB) adlı bir özelliği etkinleştirmelidir. Redis'te veri kalıcılığını etkinleştirmek, veri işlemlerine ek yük ekler. Bu da mesaj teslimini yavaşlatır. Başka bir alternatif, zaman uyumsuz çoğaltma gibi kurtarma tekniklerini kullanmaktır.
Mesaj şifreleme
RabbitMQ; üreticiler, aracılar ve tüketiciler arasında taşınan verileri şifrelemek için SSL kullanır. Mesajları şifrelemek, kuruluşların gizli bilgileri korumasına ve veri risklerini azaltmasına yardımcı olur.
Bu arada Redis, SSL'yi yerel olarak desteklemez. Yalnızca Redis 6.0 ve sonraki sürümler, SSL desteği sağlar. SSL'yi etkinleştirmek için geliştiricilerin Redis kümesinden SSL sertifikaları alması ve veritabanlarına yönelik bir istemci sertifikası oluşturması gerekir.
Performans: RabbitMQ ve Redis pub/sub
Mesaj işleme farklılıkları, farklı senaryolarda RabbitMQ ve Redis'in performansını etkiler.
Hız
Redis, mesajları öncelikle bellekte işlediği için RabbitMQ'dan çok daha hızlıdır. Ancak Redis sunucusu başarısız olursa okunmamış mesajları kaybetme riski vardır.
Buna karşılık RabbitMQ, kalıcı modda çalışırken bir sonraki mesajı göndermeden önce her tüketiciden onay bekler. Ayrıca RabbitMQ mesajları diskte saklamak için ek zaman harcar. Bu da ortalama mesaj alışveriş hızını yavaşlatır.
Karşılaştırmak gerekirse Redis, saniyede on milyonlarca mesaj gönderebilirken RabbitMQ saniyede on binlerce mesajı işler.
Erişilebilirlik
Mesaj aracısı sistemlerinin düğümleri çoğaltmasına izin veren kümeleme, RabbitMQ ve Redis'te farklı şekilde ele alınır.
RabbitMQ'da, ilgili verileri ve işlevleri içeren birden çok düğüm bir kümede çoğaltılır. Ancak bir eş ilişkisini paylaşan bu düğümler arasında mesaj kuyrukları çoğaltılmaz. Bunu yapmak için geliştiriciler, çoğaltmayı destekleyen özel bir mesaj kuyruğu kullanır.
Bu arada Redis Kümesi, Redis'in sonraki sürümlerinde tanıtılan bir özelliktir. Her lider düğümdeki verileri bir veya daha fazla takipçiye kopyalar. Bir lider düğüm başarısız olduğunda takipçi, yüksek kullanılabilirliğe sahip mesaj teslimi sağlamak için devralır.
Kullanım zamanı: RabbitMQ ve Redis pub/sub
RabbitMQ birçok alanda Redis'ten daha iyi performans gösterir ancak bu, RabbitMQ'nun tüm uygulamalar için daha iyi mesaj dağıtım sistemi olduğu anlamına gelmez.
Redis, gerçek zamanlı veri işleme ve düşük gecikmeli önbelleğe alma gerektiren kurumsal uygulamalarda daha iyi çalışır. Bellek içi veri deposu ve çeşitli veri yapıları desteği ile Redis, düşük seviyeli veri hesaplaması yapmak için uygundur. Örneğin finans kurumları, gerçek zamanlı dolandırıcılık algılamayı mümkün kılmak üzere işlemsel verileri önbelleğe almak için Redis kullanır.
Bu arada, kod ve sistem oluşturmayı desteklemek için zaman uyumsuz iletişim mekanizmalarına sahip özel bir mikro hizmet mesaj aracısı gerekiyorsa RabbitMQ'yu seçin. RabbitMQ, uygulamalar arasında büyük dosyaları aktarmak için Redis'ten daha uygundur. Örneğin, birçok mikro hizmet arasında güvenilir bir şekilde veri göndermesi gereken bir sistem RabbitMQ'yu seçebilir. Sistem, RabbitMQ'nun hata toleransından, daha büyük dosya işleme kapasitesinden ve garantili mesaj teslim mekanizmalarından yararlanacaktır.
Farklılıkların özeti: RabbitMQ ve Redis pub/sub
RabbitMQ |
Redis |
|
Mesaj teslimi |
Garantili mesaj teslimi. Karmaşık mantığı destekler. |
Mesaj teslimini garanti etmez. Abonelerden aktif bağlantı gerektirir. |
Mesaj boyutu |
Mesaj boyutu 128 MB ile sınırlıdır. Büyük mesajları işleyebilir. |
Mesaj sınırı yoktur ancak büyük mesajlar (1 MB'tan büyük) için performans düşer. |
Mesaj kalıcılığı |
Kalıcı ve geçici mesajları destekler. Kalıcı mesajları diske yazar. |
Varsayılan olarak kalıcı mesajları desteklemez. |
Mesaj şifreleme |
SSL şifrelemesini destekler. |
Redis 6.0 ve üzeri sürümlerde SSL şifrelemesi mevcuttur. |
Hız |
Saniyede on binlerce mesaj. |
Saniyede milyonlarca mesaj. |
Erişilebilirlik |
Bir kümede birden çok eşler arası düğüm oluşturur. |
Kümelemede lider-takipçi modelini kullanır. |
AWS size RabbitMQ ve Redis gereksinimleriniz konusunda nasıl yardımcı olabilir?
Amazon Web Services (AWS), açık kaynaklı mesaj aracısı sistemlerinizi geniş ölçekte çalıştırmak için yönetilen hizmetler sunar. Yayınla-abone ol (pub/sub) hizmetlerinizi kolayca ayarlayabilir ve diğer AWS hizmetleriyle entegre edebilirsiniz.
Redis ve RabbitMQ ile kullanabileceğiniz AWS teklifleri şunlardır:
- Amazon MemoryDB sayesinde Redis'te mesaj teslim ederken dayanıklılık sağlayabilirsiniz. Kullanıcı etkinliğini almak ve medya ile eğlence uygulamaları için günde milyonlarca isteği desteklemek üzere yüksek eş zamanlı akış verilerini çalıştırabilirsiniz.
- Amazon MQ ile RabbitMQ aracılarınızı zaman alan kurulumlar olmadan tedarik edebilirsiniz. Bu, taşınan ve bekleyen RabbitMQ mesajlarını şifreleyerek AWS Erişilebilirlik Alanları genelinde yüksek erişilebilirliğe sahip veri işlem hatlarının sağlanmasına yardımcı olur.
Bir pub/sub mesajlaşma sistemi oluşturmak için Redis veya RabbitMQ yerine Amazon Basit Bildirim Hizmeti'ni (SNS) de kullanabilirsiniz. Uygulamalarınızdan doğrudan müşterilerinize veya diğer uygulamalara ölçeklenebilir ve uygun maliyetli bir şekilde mesajlar gönderebilirsiniz.
Amazon SNS birkaç farklı özellik sunar:
- Dağıtılmış sistemler, mikro hizmetler ve olay tabanlı sunucusuz uygulamalar arasında yüksek aktarım hızlı, gönderme tabanlı, çoğa çok mesajlaşma
- Mesaj şifreleme ve trafik gizliliği
- Analiz, işlem, container'lar, veritabanları, nesnelerin interneti (IoT), makine öğrenimi, güvenlik ve depolama gibi AWS kategorileri arasında yayma özellikleri
Hemen bir hesap oluşturarak AWS'de pub/sub, Redis ve RabbitMQ'yu kullanmaya başlayın.