Redis vs Apache Kafka vs RabbitMQ Hangisi
Üzeyir AYDIN
03 OcaMikro Hizmetler için eşzamansız iletişim kullanırken, bir ileti aracısı kullanmak yaygındır. Bir aracı, farklı mikro hizmetler arasındaki iletişimin güvenilir ve istikrarlı olmasını, mesajların sistem içinde yönetilmesini ve izlenmesini ve mesajların kaybolmamasını sağlar. Ölçek ve veri yeteneklerine göre değişen, aralarından seçim yapabileceğiniz birkaç mesaj aracısı vardır. Bu blog yazısı en popüler üç brokeri karşılaştıracak: RabbitMQ, Kafka ve Redis.
Mikro Hizmetler İletişimi: Senkron ve Asenkron
Mikro hizmetlerin birbiriyle iletişim kurmasının iki yaygın yolu vardır: Eşzamanlı ve Eşzamansız. Senkronize bir iletişimde, arayan bir sonraki mesajı göndermeden önce bir yanıt bekler ve HTTP'nin üstünde bir REST protokolü olarak çalışır. Aksine Asenkron iletişimde mesajlar cevap beklenmeden gönderilir. Bu, dağıtılmış sistemler için uygundur ve genellikle mesajları yönetmek için bir mesaj aracısı gerektirir.
Seçtiğiniz iletişim türü, Mikro Hizmetlerinizi nasıl yapılandırdığınız, hangi altyapıya sahip olduğunuz, gecikme süresi, ölçek, bağımlılıklar ve iletişimin amacı gibi farklı parametreleri dikkate almalıdır. Eşzamansız iletişim kurmak daha karmaşık olabilir ve yığına daha fazla bileşen eklenmesini gerektirir, ancak Mikro Hizmetler için Eşzamansız iletişim kullanmanın avantajları eksilerinden daha ağır basar.
Asenkron İletişim Avantajları
Her şeyden önce, asenkron iletişim tanım gereği engelleyici değildir. Ayrıca Senkronize işlemlerden daha iyi ölçeklendirmeyi destekler. Üçüncüsü, Mikro hizmet çökmesi durumunda, Eşzamansız iletişim mekanizmaları çeşitli kurtarma teknikleri sağlar ve genellikle çökmeyle ilgili hataları ele almada daha iyidir. Ayrıca, REST protokolü yerine aracılar kullanıldığında, iletişim alan servislerin gerçekten birbirlerini tanımaları gerekmez. Yeni bir hizmet, eski bir hizmet uzun süre çalıştırıldıktan sonra bile sunulabilir, yani daha iyi ayrıştırma hizmetleri.
Son olarak, Eşzamansız işlemleri seçerken, gelecekte merkezi bir keşif, izleme, yük dengeleme ve hatta politika uygulayıcısı oluşturma yeteneğinizi artırırsınız. Bu size kod ve sistem oluşturmanızda esneklik, ölçeklenebilirlik ve daha fazla yetenek için yetenekler sağlayacaktır.
Doğru Mesaj Aracısını Seçme
Zaman uyumsuz iletişim genellikle bir ileti aracısı aracılığıyla yönetilir. Aysncio gibi başka yollar da var, ancak bunlar daha kıt ve sınırlı.
Eşzamansız işlemlerinizi yürütmek için bir komisyoncu seçerken birkaç şeyi göz önünde bulundurmalısınız:
- Aracı Ölçeği — Sistemde saniyede gönderilen mesaj sayısı.
- Veri Kalıcılığı — Mesajları kurtarma yeteneği.
- Tüketici Yeteneği - Aracının bire bir ve/veya bire çok tüketiciyi yönetip yönetemeyeceği.
Teklil
Bu üç kategoride hangi sağlayıcının en güçlü olduğunu bulmak için en yeni ve en iyi hizmetleri kontrol ettik.
Farklı Mesaj Aracılarını Karşılaştırma
RabbitMQ (AMQP)
Ölçek : yapılandırmaya ve kaynaklara dayalı olarak, buradaki basketbol sahası saniyede yaklaşık 50K msg'dir.
Kalıcılık : hem kalıcı hem de geçici mesajlar desteklenir.
Bire bir ve bire çok tüketici : ikisi de.
RabbitMQ 2007'de piyasaya sürüldü ve yaratılan ilk yaygın mesaj brokerlerinden biridir. Gelişmiş Message Queuing Protokollerini (AMQP) uygulayarak mesajları hem noktadan noktaya hem de pub-sub yöntemleriyle ileten bir açık kaynaktır. Karmaşık yönlendirme mantığını desteklemek için tasarlanmıştır.
Bunu bir SaaS olarak kullanmanıza izin veren bazı yönetilen hizmetler vardır, ancak bunlar yerel ana bulut sağlayıcı yığınının bir parçası değildir. RabbitMQ, Python, Java, .NET, PHP, Ruby, JavaScript, Go, Swift ve daha fazlası dahil olmak üzere tüm ana dilleri destekler.
Kalıcı moddayken bazı performans sorunları bekleyin.
Apache Kafka
Ölçek : saniyede bir milyona kadar mesaj gönderebilir.
Kalıcılık : evet.
Bire bir tüketicilere karşı bire çok tüketiciler : sadece bire çok (ilk bakışta garip görünüyor, değil mi?!).
Kafka, Linkedin tarafından 2011 yılında yüksek verim ve düşük gecikmeli işlemeyi işlemek için oluşturuldu. Dağıtılmış bir akış platformu olarak Kafka, bir yayınla-abone ol hizmetini çoğaltır. Veri sürekliliği sağlar ve kaliteli mesajları değiş tokuş edebilmesini sağlayan kayıt akışlarını depolar.
Kafka, Azure, AWS ve Confluent üzerinde SaaS'ı yönetti. Hepsi Kafka projesinin yaratıcıları ve ana katkıda bulunanlarıdır. Kafka, Python, Java, C/C++, Clojure, .NET, PHP, Ruby, JavaScript, Go, Swift ve daha fazlası dahil olmak üzere tüm ana dilleri destekler.
Redis
Ölçek : saniyede bir milyona kadar mesaj gönderebilir.
Kalıcılık : temelde hayır - bu bir bellek içi veri deposudur.
Bire bir ve bire çok tüketici : ikisi de.
Redis, diğer mesaj brokerlerinden biraz farklıdır. Redis, özünde, yüksek performanslı bir anahtar/değer deposu veya bir ileti aracısı olarak kullanılabilen bir bellek içi veri deposudur. Diğer bir fark, Redis'in kalıcılığı olmaması, bunun yerine belleğini bir Disk/DB'ye boşaltmasıdır. Aynı zamanda gerçek zamanlı veri işleme için mükemmeldir.
Başlangıçta, Redis bire bir ve bire çok değildi. Ancak Redis 5.0, pub-sub'ı tanıttığından, yetenekler arttı ve birden çoğa gerçek bir seçenek haline geldi.
Kullanım Durumuna Göre Mesaj Aracıları
RabbitMQ, Kafka ve Redis'in bazı özelliklerini ele aldık. Üçü de kendi kategorilerinde canavardır, ancak tanımlandığı gibi oldukça farklı çalışırlar. İşte farklı kullanım durumlarına göre kullanmak için doğru mesaj komisyoncusu için önerimiz.
Kısa Ömürlü Mesajlar: Redis
Redis'in bellek içi veritabanı, kalıcılığın gerekli olmadığı kısa ömürlü mesajların olduğu kullanım durumları için neredeyse mükemmel bir uyum sağlar. Son derece hızlı hizmet ve bellek içi yetenekler sağladığı için Redis, kalıcılığın çok önemli olmadığı ve bir miktar kaybı tolere edebileceğiniz kısa saklama mesajları için mükemmel bir adaydır. 5.0'da Redis akışlarının piyasaya sürülmesiyle, aynı zamanda, sınırlamalar ve eski pub-sub yetenekleri nedeniyle kesinlikle gerekli olan bire çok kullanım durumları için bir adaydır.
Büyük Miktarda Veri: Apache Kafka
Kafka, büyük miktarda veriyi uzun süreler boyunca depolamak için oluşturulmuş, yüksek verimli dağıtılmış bir kuyruktur. Kafka, kalıcılığın gerekli olduğu birden çok kullanım durumu için idealdir.
Karmaşık Yönlendirme: RabbitMQ
RabbitMQ, karmaşık yönlendirmeyi destekleyen birçok özellik ve yeteneğe sahip daha eski, ancak olgun bir aracıdır. Gerekli hız yüksek olmadığında (birkaç on binlerce msg/sn'den fazla) karmaşık yönlendirme iletişimini bile destekleyecektir.
Yazılım Yığınınızı Düşünün
Son değerlendirme, elbette, mevcut yazılım yığınınızdır. Nispeten kolay bir entegrasyon süreci arıyorsanız ve bir yığında farklı aracıları tutmak istemiyorsanız, yığınınız tarafından zaten desteklenen bir aracıyla çalışmaya daha yatkın olabilirsiniz.
Örneğin, sisteminizde RabbitMQ'nun üzerinde Görev Kuyruğu için Kereviz kullanıyorsanız, desteklenmeyen ve biraz yeniden yazma gerektiren Kafka'nın aksine RabbitMQ veya Redis ile çalışmak için bir teşvikiniz olur.
Otonom'da bizler, yukarıdakilerin hepsini platform gelişimimiz ve büyümemiz boyunca kullandık ve ardından bazılarını kullandık! Her aracın kendi artıları ve eksileri olduğunu ve bunları anlamak ve iş için doğru aracı ve o belirli an, durum ve gereksinimler için doğru aracı seçmekle ilgili olduğunu hatırlamak önemlidir.
Müşteri Girişi
Hesabınızı yönetmek için giriş yapın