Mesaj ara yazılımı, platformdan bağımsız veri alışverişi için verimli ve güvenilir bir mesajlaşma mekanizması kullanan ve veri iletişimine dayalı dağıtık sistemleri entegre eden, mesaj iletim mekanizması veya mesaj kuyruğu modundan oluşan bir ara yazılım teknolojisidir. Şu anda sektörde RabbitMQ, ActiveMQ, ZeroMQ gibi birçok MQ ürünü var ve bunlar mükemmel mesaj ara yazılımıdır, ancak projede hangisini seçmeliyiz? Bu makale, aşağıdaki mesaj kuyruğu ürünlerini değerlendirir ve karşılaştırır: RabbitMQ, ZeroMQ, ActiveMQ, MSMQ, Redis ve memcacheQ
Sapma: Burada önce küçük bir soruyu düşünebiliriz: "Web uygulamalarında neden mesaj kuyruğu hizmetlerine ihtiyacımız var?" ” Örneğin, MySQL'e aynı anda çok sayıda ekleme, güncelleme ve diğer istek gelir; bu da doğrudan sayısız satır kilidi ve tablo kilidi ile hatta sonunda çok fazla isteğe yol açar ve böylece çok fazla bağlantı hatası tetiklenir. Mesaj kuyrukları kullanarak, istek asenkron olarak işleyebilir ve sistemdeki yükü azaltabiliriz.
RabbitMQ Erlang dilinde yazılmış açık kaynaklı bir mesaj kuyruğudur ve AMQP, XMPP, SMTP, STOMP gibi birçok protokolü destekler; bu da onu çok ağır ve kurumsal düzeyde geliştirme için daha uygun hale getirir. AMQP protokolünün önde gelen bir uygulamasıdır; bu protokol, aracı mimarisi uygulayarak mesajların istemciye gönderilmeden önce merkezi bir düğümde sıraya alınabileceği anlamına gelir. Yönlendirme, yük dengeleme veya veri kalıcılığı için iyi bir destek var. Bu özellik, RabbitMQ'yu kolay kullanmayı ve dağıtmayı sağlar, yönlendirme, yük dengeleme veya mesaj kalıcılığı gibi birçok senaryo için uygundur ve mesaj kuyruklarıyla sadece birkaç satır kodla yapılabilir. Ancak bu, merkezi düğümün gecikmeyi artırması ve mesaj kapsülasyonundan sonra daha büyük olması nedeniyle onu daha az ölçeklenebilir ve yavaşlatıcı kılar. RabbitMQ'yu yapılandırmak için hedef makineye Erlang ortamını yüklemeniz gerekir. Bu görseli yeni pencerede görüntülemek için tıklayın
? MQ(ZeroMQ) Özellikle yüksek veri taşıyıcılığı olan talep senaryoları için en hızlı mesaj kuyrtma sistemi olarak bilinir. Yüksek verimlilik/düşük gecikme senaryoları için özel olarak geliştirilmiş çok hafif bir mesajlaşma sistemidir ve genellikle finans dünyasındaki uygulamalarda bulunabilir. RabbitMQ ile karşılaştırıldığında, ZeroMQ birçok gelişmiş mesaj senaryosunu destekler, ancak ZeroMQ çerçevesinde bireysel bloklar (örneğin soketler veya cihazlar vb.) uygulamanız gerekir.
? MQ (ZeroMQ), RabbitMQ'nun iyi olmadığı ileri seviye/karmaşık kuyrukları uygulayabilir, ancak geliştiricilerin birden fazla teknik çerçeveyi tek başına birleştirmesi gerekir ve teknik karmaşıklık, bu MQ'nun başarılı uygulanması için bir meydan okumadır. ZeroMQ, mesaj sunucusu veya ara yazılım kurup çalıştırmanıza gerek olmadığı benzersiz bir ara yazılım olmayan modele sahiptir çünkü uygulamanız bu hizmet rolünü üstlenir. Tek yapmanız gereken ZeroMQ kütüphanesine başvurmak, NuGet ile kurulabilir ve uygulamalar arasında mesajları memnuniyetle gönderebilirsiniz. Ancak ZeroMQ yalnızca kalıcı olmayan kuyruklar sağlar, bu da makine kapanırsa verilerin kaybolacağı anlamına gelir. Bunlar arasında Twitter'ın Storm platformu, veri akışlarının iletimi olarak ZeroMQ kullanıyor. ZeroMQ çok esnek, ancak 80 sayfalık el kitabını öğrenmeniz gerekiyor (dağıtık bir sistem hakkında yazıyorsanız, mutlaka okuyun).
ZeroMQ'nun ara yazılım mimarisi yoktur ve herhangi bir servis süreci ve çalıştırma gerektirmez. Aslında, uygulama uç noktanız bu hizmet rolünü üstlenir. Bu, kurulumu çok basit hale getiriyor, ancak endişe şu ki, bir şeyler ters giderse izleyecek bir yerin olmaması. Bildiğimiz kadarıyla, ZeroMQ sadece kalıcı olmayan kuyruklar sunuyor. İhtiyacınız olduğunda kendi denetim ve veri kurtarma yeteneklerinizi uygulayabilirsiniz. Bu görseli yeni pencerede görüntülemek için tıklayın
MSMQ Bu, Microsoft'un ürününde değerli görülen tek şey. MSMQ bu tür bir görevi başarabileceğini kanıtlayabilirse, bunu kullanmayı seçecekler. Önemli olan, bu şeyin karmaşık olmaması, sadece almak ve göndermek; Bazı sert sınırlamaları vardır, örneğin maksimum mesaj boyutu 4MB. Ancak, bu sorunları MassTransit veya NServiceBus gibi bazı yazılımlara bağlanarak çözebilir. Bu görseli yeni pencerede görüntülemek için tıklayın
Jafka/Kafka Kafka (mesajları farklı düğümler arasında dağıtan), LinkedIn tarafından Aralık 2010'da geliştirilen ve açık kaynak olarak geliştirilen dağıtık bir MQ sistemidir ve şu anda Apache'nin kuluçka projesidir; bu sistem yüksek performanslı, diller arası dağıtılmış Yayın/Abone mesaj kuyruğu sistemidir ve Jafka, Kafka'nın geliştirilmiş bir versiyonu olan Kafka'nın üzerinde kuluçka aşamasında yer almaktadır. Aşağıdaki özelliklere sahiptir: O(1) sistem yükü altında mesajları sürebilen hızlı süreklilik; Yüksek veri kapasitesi, sıradan bir sunucuda 10W/s hızına ulaşabilen; Tamamen dağıtık sistem, Broker, Üretici ve Tüketici tamamen dağıtıklığı yerel olarak destekler ve otomatik olarak karmaşık dengeyi sağlarlar. Hadoop verilerinin paralel yüklenmesini destekler; bu, günlük verileri ve Hadoop gibi çevrimdışı analiz sistemleri için geçerli bir çözümdür, ancak gerçek zamanlı işleme sınırlamaları vardır. Kafka, Hadoop'un paralel yükleme mekanizması aracılığıyla çevrimiçi ve çevrimdışı mesaj işlemeyi birleştirir; bu mekanizma da bu konuda incelenen sistem için önemlidir. Apache Kafka, ActiveMQ'ya kıyasla çok hafif bir mesajlaşma sistemidir ve çok iyi performansının yanı sıra iyi çalışan dağıtık bir sistemdir. Bu görseli yeni pencerede görüntülemek için tıklayın
Apache ActiveMQ ActiveMQ, ZemoMQ'ya benzer şekilde ikisi (RabbitMQ ve ZeroMQ) arasında bir yerde yer alıyor ve hem proxy hem de P2P modlarında konuşlandırılabiliyor. RabbitMQ'ya benzer şekilde, gelişmiş senaryoları uygulamak kolaydır ve düşük tüketim gerektirir. ActiveMQ, Java dünyasının omurgası olarak bilinir. Uzun bir geçmişi vardır ve yaygın olarak kullanılmaktadır. Ayrıca platformlar arası bir platform, Microsoft platformunda olmayan ürünler için doğal bir entegrasyon erişim noktası sağlıyor. Ancak, yalnızca MSMQ'dan geçmişse dikkate alınabilir. ActiveMQ'yu yapılandırmak için hedef makineye Java ortamını yüklemeniz gerekir. Bu görseli yeni pencerede görüntülemek için tıklayın ActiveMQ'nun yeni nesil ürününün Apollo olduğunu, ActiveMQ prototipine dayanan ve daha hızlı, daha güvenilir ve bakımı daha kolay bir mesaj aracı olduğunu belirtmek önemlidir. Apache, Apollo'yu en hızlı ve en sağlam STOMP (Streaming Text Orientated Message Protocol) sunucusu olarak nitelendirir. Apollo'nun özellikleri şunlardır: Stomp 1.0 ve Stomp 1.1 protokolleri desteklenmektedir Konular ve kuyruklar Kuyruk Tarayıcısı Tema kalıcı abonelikler Ayna kuyruğu Güvenilir mesajlaşma Mesajın süresi dolması ve değişmesi Mesaj seçici JAAS doğrulandı ACL tabanlı yetkilendirme SSL/TLS ve sertifika doğrulamasını destekleyin REST Management API'si Bu görseli yeni pencerede görüntülemek için tıklayın
Redis Bu, aktif olarak geliştirilen ve bakımı yapılan bir Key-Value NoSQL veritabanıdır; ancak Key-Value veritabanı depolama sistemidir, ancak MQ fonksiyonlarını desteklediği için hafif bir kuyruk hizmeti olarak kullanılabilir. RabbitMQ ve Redis'in işe alım ve çıkış operasyonları için her biri 1 milyon kez ve uygulama süresi her 100.000 kez kaydedilir. Test verileri dört farklı boyuta ayrılmıştır: 128 Bayt, 512 Bayt, 1K ve 10K. Deneyler, ekibe katıldıklarında, veri karşılaştırması küçük olduğunda Redis'in performansının RabbitMQ'dan daha yüksek olduğunu ve veri boyutu 10K'yı azarsa Redis'in dayanılmaz derecede yavaş olduğunu gösteriyor. Takımdan ayrıldığında, Redis verilerin büyüklüğüne bakılmaksızın çok iyi performans sergilerken, RabbitMQ'nun performansı Redis'ten çok daha düşüktü.
MemcacheQ Kalıcı mesaj kuyruğu Memcacheq (kısaca MCQ) hafif bir mesaj kuyruğudur ve MemcacheQ'nun özellikleri şunlardır: 1 Basit ve kullanımı kolay 2 Hızlı işleme 3 Çoklu kuyruk 4 İyi eşzamanlı performans 5 Memcache protokolüyle uyumlu. Bu, sadece memcache uzantını kurmanız gerektiği anlamına gelir, ek eklenti gerekmez. 6 Ayrıca zend çerçevesinde kullanımı da oldukça uygundur.
Sonuç olarak, bu ürünler: 1. Her ikisinin de kendi istemci API'leri vardır veya birden fazla programlama dilini destekler; 2. Çok fazla belge var; 3. Olumlu destek sağlandı. 4. ActiveMQ, RabbitMQ, MSMQ, Redis hizmet süreçlerini başlatmak zorunda, bunlar izlenebilir ve yapılandırılabilir, diğerleri ise sorunludur 5. Hepsi nispeten iyi güvenilirlik (tutarlılık), ölçeklenebilirlik ve yük dengesi sağlar, tabii ki performans
Burada saçmalama yapmayacağım, aşağıda internetten ele geçirilen test sonuçları eklenmiş bir dizi yer var. Saniyede gönderilen ve alınan mesaj sayısı gösterilir. Tüm süreç toplamda 1 milyon 1K mesaj üretti. Test Windows Vista bağımsız bir makinede gerçekleştirildi.
Gördüğünüz gibi, ZeroMQ diğer hiçbir seviye gibi değil. Performansı şaşırtıcı derecede yüksek. Buna rağmen, bu ürün mesaj kalıcılığı sağlamaz, ara süreçleri kolayca depolayıp izleyemez ve kendi kendine denetim ile veri kurtarma gerektirir, bu nedenle kullanım kolaylığı ve HA açısından tatmin edici değildir. Sonuç açık: Bir uygulamanın mümkün olan en hızlı mesaj göndermesini istiyorsanız, ZeroMQ'yu seçersiniz. Bazı mesajları tesadüfen kaybetmeyince daha değerli.
Bu makaledeki blog yazarı Rabbit kullanmayı umuyor (ama pek umut etmiyor), Rabbitmq'nin yerleşik bir özelliği var, eğer bir küme oluşturursanız, yük dengeleme gibi sorunlar için endişelenmenize gerek yok ve bir kuyruk aynası kurabilirsiniz. Ama bu tür şeyler daha fazla test yapılması gerektiği ve sonunda favori bir oyun ortaya çıktığı ve Rabbit hakkında duyduğum ve okuduklarım bana onun en iyi seçim olması gerektiğini düşündürüyor.
|