Mesaj ara yazılımı (1) MQ ayrıntılı açıklaması ve dört MQ karşılaştırması

1. Mesaj ara yazılımı bilgisi

1 Genel Bakış

Mesaj kuyrukları, kurumsal BT sistemlerinde giderek iç iletişimin temel aracı haline geldi. Düşük kuplaj, güvenilir teslimat, yayınlama, akış kontrolü ve son tutarlılık gibi bir dizi işlevi vardır ve asenkron RPC'nin ana yöntemlerinden biri haline gelmiştir. Bugün piyasada eski ActiveMQ, RabbitMQ, popüler Kafka ve Alibaba bağımsız olarak geliştirdiği RocketMQ gibi birçok genel mesajlaşma ara yazılımı bulunmaktadır.

2. Mesaj ara yazılımlarının bileşimi

2.1 Komisyoncu

Temel mesaj hizmetleri sağlamak için bir sunucu olarak mesaj sunucusu

2.2 Üretici

İşletmeyi başlatan mesaj üreticisi, mesajı üretmek ve komisyoncuya iletmekten sorumludur,

2.3 Tüketici

Mesaj tüketicileri, iş işlemcileri, aracılardan mesaj almaktan ve iş mantığını işlemekten sorumludur.

2.4 Konu

Konu, yayınlama-abone modundaki birleşik mesaj koleksiyonu, farklı üreticiler konuya mesajlar gönderirler, bunlar mesaj yayınını sağlamak için MQ sunucusu tarafından farklı abonelere dağıtılır

2.5 Sıra

Kuyruk, PTP modunda, belirli bir üretici belirli bir kuyruğa bir mesaj gönderir ve tüketici, belirtilen mesajın alımını tamamlamak için belirli bir kuyruğa abone olur.

2.6 Mesaj

Mesaj gövdesi, iş verilerini kapsüllemek ve mesaj iletimini gerçekleştirmek için farklı iletişim protokolleri tarafından tanımlanan sabit bir formata göre kodlanmış bir veri paketidir.

3 Mesaj ara yazılım modellerinin sınıflandırılması

3.1 Noktadan noktaya

PTP noktadan noktaya: kuyruğu iletişim taşıyıcısı olarak kullanın

Açıklama:

Mesaj üreticisi mesajı üretir ve kuyruğa gönderir ve ardından mesaj tüketicisi mesajı kuyruktan çıkarır ve mesajı tüketir.

Mesaj tüketildikten sonra, artık kuyrukta depolanmaz, dolayısıyla mesaj tüketicisinin halihazırda tüketilmiş olan mesajı tüketmesi imkansızdır. Sıra birden fazla tüketiciyi destekler, ancak bir mesaj için yalnızca bir tüketici tüketebilir.

3.2 Yayınlama / Abone Olma

Pub / Sub yayınla ve abone ol (yayınla): konuyu bir iletişim taşıyıcısı olarak kullanın

Açıklama:

Mesaj üreticisi (yayınlar) konuya yönelik mesajı yayınlar ve birden fazla mesaj tüketicisi (abone) mesajı aynı anda tüketir. Peer-to-peer yönteminden farklı olarak konu ile ilgili yayınlanan mesajlar tüm aboneler tarafından tüketilecektir.

Kuyruk, üretici tarafından üretilen mesajları birden çok tüketici tarafından tüketilmek üzere mesaj kuyruğuna göndererek yük dengeleme uygular. Ancak bir mesaj yalnızca bir tüketici tarafından kabul edilebilir.Mevcut tüketici olmadığında, mesaj, kullanılabilir bir tüketici olana kadar kaydedilir.

Konu yayınlamayı ve abone olmayı uygular.Bir mesaj yayınladığınızda, bu konuya abone olan tüm servisler mesajı alabilir, böylece 1'den N'ye kadar abone mesajın bir kopyasını alabilir.

4 Mesaj ara yazılımının avantajları

4.1 Sistem ayırma

Etkileşimli sistemler arasında doğrudan arama ilişkisi yoktur, ancak yalnızca mesaj iletimi yoluyla, bu nedenle sistem çok müdahaleci değildir ve bağlantı derecesi düşüktür.

4.2 Sistem yanıt süresini iyileştirin

Örneğin, orijinal mantık seti, ödemenin tamamlanması, sipariş durumunun değiştirilmesini, üye puanlarının hesaplanmasını ve mantığı tamamlamadan önce lojistik ve dağıtımı bildirmeyi içerebilir; MQ mimari tasarımı sayesinde, acil ve önemli iş (hemen yanıt verilmesi gerekir) bu çağrıya yerleştirilebilir. Yöntemde, mesaj kuyruğu düşük yanıt gereksinimleri ile kullanılır ve tüketici işlemesi için MQ kuyruğuna yerleştirilir.

4.3 Büyük veri işleme mimarisi için hizmetler sağlayın

Entegrasyon olarak mesajla, büyük veri bağlamında mesaj kuyrukları, veri işleme için performans desteği sağlamak üzere gerçek zamanlı işleme mimarisiyle de entegre edilir.

4.4 Java Mesaj Servisi-JMS

Java Message Service (Java Message Service, JMS) uygulama programı arayüzü, iki uygulama arasında veya asenkron iletişim için dağıtılmış bir sistemde mesaj göndermek için kullanılan Java platformundaki mesaj odaklı bir ara yazılım (MOM) API'sidir. .

JMS'deki P2P ve Pub / Sub mesaj modları: noktadan noktaya (kuyruk) ve yayınlama / abone olma (yayınlama / abone olma, konu) orijinal olarak JMS tarafından tanımlanmıştır. Bu iki mod veya çözdükleri problem arasındaki temel fark, kuyruğa gönderilen mesajların tekrar tekrar tüketilip tüketilemeyeceğidir (çoklu abonelik).

5 Message Middleware Uygulama Senaryosu

5.1 Eşzamansız iletişim

Bazı işletmeler mesajları hemen işlemeyi istemez veya buna ihtiyaç duymaz. Mesaj kuyruğu, kullanıcıların bir mesajı kuyruğa koymasına izin veren, ancak hemen işlemeyen bir asenkron işlem mekanizması sağlar. Sıraya istediğiniz kadar mesaj koyun ve ardından gerektiğinde işleyin.

5.2 Ayrıştırma

Projeler arasındaki güçlü bağımlılığı azaltın ve heterojen sistemlere uyum sağlayın. Projenin başlangıcında, projenin gelecekteki ihtiyaçlarını tahmin etmek son derece zordur. İleti sistemi aracılığıyla işleme sürecine örtük bir veri tabanlı arayüz katmanı eklenir. Her iki taraftaki işlem bu arabirimi uygulamalıdır. Uygulama değiştiğinde, her iki taraftaki işlem, sağladığınız sürece bağımsız olarak genişletilebilir veya değiştirilebilir. Aynı arayüz kısıtlamalarını takip ederler.

5.3 Yedeklilik

Bazı durumlarda, veri işleme süreci başarısız olur. Veriler kalıcı olmadıkça kaybolacaktır. Mesaj kuyrukları, tamamen işlenene kadar verileri saklayarak bu şekilde veri kaybı riskini ortadan kaldırır. Kuyruktan bir mesajı silmeden önce, birçok mesaj kuyruğu tarafından benimsenen "ekle-sil" paradigmasında, işlem sisteminizin verilerinizin güvenli bir şekilde saklandığından emin olmak için mesajın işlendiğini açıkça belirtmesi gerekir. Sen onu kullanmayı bitirene kadar.

5.4 Ölçeklenebilirlik

Mesaj kuyruğu işleme sürecinizi ayırdığı için, işleme sürecini artırdığınız sürece mesaj kuyruğunun ve işlemenin sıklığını artırmak kolaydır. Kodu değiştirmeye veya parametreleri ayarlamaya gerek yoktur. Dağıtılmış genişlemeyi kolaylaştırın.

5.5 Aşırı yük koruması

Trafikte bir artış olması durumunda, uygulamaların yine de bir rol oynamaya devam etmesi gerekir, ancak bu tür ani trafik öngörülemez; standart olarak bu tür anlık en yüksek erişimi idare edebilmek için kaynakları beklemeye almak kuşkusuz büyük bir israftır. Mesaj kuyruklarının kullanılması, ana bileşenlerin ani erişim baskısına dayanmasını sağlar ve ani aşırı yüklenme talepleri nedeniyle tamamen çökmez.

5.6 Kurtarılabilirlik

Sistemin bir parçası arızalandığında, tüm sistemi etkilemeyecektir. Mesaj kuyruğu, işlemler arasındaki eşleşme derecesini azaltır, böylece bir mesaj işleme süreci kapatılsa bile, kuyruğa eklenen mesajlar sistem geri yüklendikten sonra da işlenebilir.

5.7 Sipariş garantisi

Çoğu kullanım senaryosunda, veri işleme sırası önemlidir. Çoğu ileti kuyruğu doğaya göre sıralanır ve verilerin belirli bir sırada işleneceği garanti edilir.

5.8 Tampon

Herhangi bir önemli sistemde, farklı işlem süresi gerektiren unsurlar olacaktır. Mesaj kuyruğu, sistemdeki veri akış hızını kontrol etmeye ve optimize etmeye yardımcı olan bir tampon katmanı aracılığıyla görevlerin en verimli şekilde yürütülmesine yardımcı olur. Sistem yanıt süresini ayarlamak için.

5.9 Veri akışı işleme

İş günlükleri, izleme verileri, kullanıcı davranışları gibi dağıtılmış sistemler tarafından oluşturulan toplu veri akışları, bu veri akışları için gerçek zamanlı veya toplu olarak toplanır ve özetlenir ve ardından büyük veri analizi, mevcut İnternet için sahip olunması gereken bir teknolojidir. Bu, mesaj kuyrukları aracılığıyla yapılır. Sınıf veri toplama en iyi seçimdir.

6 Mesaj ara yazılımı için ortak protokoller

6.1 AMQP protokolü

AMQP, birleşik mesajlaşma hizmetleri sağlayan bir uygulama katmanı standardı gelişmiş mesaj sıralama protokolü olan Advanced Message Queuing Protocol'dür. Uygulama katmanı protokolleri için açık bir standarttır ve mesaj odaklı ara yazılımlar için tasarlanmıştır. Bu protokole dayalı istemciler ve mesaj ara yazılımı, farklı istemci / ara yazılım ürünleri ve farklı geliştirme dilleri tarafından kısıtlanmadan mesaj iletebilir.

Avantajlar: güvenilir ve evrensel

6.2 MQTT protokolü

MQTT (Message Queuing Telemetri Aktarımı), IBM tarafından geliştirilen bir anlık ileti protokolüdür ve Nesnelerin İnternetinin önemli bir parçası olabilir. Bu protokol, tüm platformları destekler ve neredeyse tüm ağa bağlı nesneleri dış dünyaya bağlayabilir ve sensörler ve aktüatörler için bir iletişim protokolü olarak kullanılır (örneğin, Twitter aracılığıyla evleri bağlamak).

Avantajlar: basit format, az kullanılan bant genişliği, mobil iletişim, PUSH, gömülü sistem

6.3 STOMP protokolü

STOMP (Akan Metin Yönelimli Mesaj Protokolü), MOM (Mesaj Yönlendirmeli Ara Yazılım, mesaj yönelimli ara yazılım) için tasarlanmış basit bir metin protokolü olan akış metnine yönelik bir mesaj protokolüdür. STOMP, istemcilerin herhangi bir STOMP ileti aracısı (Broker) ile etkileşime girmesine olanak tanıyan birlikte çalışabilir bir bağlantı biçimi sağlar.

Avantajlar: komut modu (konu dışı \ kuyruk modu)

6.4 XMPP protokolü

XMPP (Genişletilebilir Mesajlaşma ve Durum Protokolü), çoğunlukla anlık mesajlaşma (IM) ve çevrimiçi alan tespiti için kullanılan Genişletilebilir Biçimlendirme Diline (XML) dayalı bir protokoldür. Sunucular arasında neredeyse anlık işlem için uygundur. Çekirdek XML akışına dayalıdır Bu protokol, işletim sistemleri ve tarayıcıları farklı olsa bile, İnternet kullanıcılarının İnternetteki herhangi birine anlık mesaj göndermesine izin verebilir.

Avantajlar: evrensel açıklık, güçlü uyumluluk, ölçeklenebilirlik ve yüksek güvenlik, ancak XML kodlama formatı çok fazla bant genişliği kaplar

6.5 TCP / IP özelleştirmesine dayalı diğer protokoller

Bazı özel çerçeveler (redis, kafka, zeroMq, vb. Gibi) kendi ihtiyaçlarına göre MQ spesifikasyonunu sıkı bir şekilde takip etmez, ancak TCP \ IP'ye dayalı bir dizi protokolü içerir ve MQ işlevini gerçekleştirmek için ağ soketi arabirimi üzerinden iletir.

7 Ortak mesaj ara yazılımına giriş MQ

7.1 RocketMQ

Alibaba departmanı altında, orijinal olarak Metaq olarak adlandırılan ve 3.0 sürümünün adı RocketMQ olarak değiştirilen dağıtılmış, kuyruk modeli mesaj ara yazılımı. Alibaba tarafından, Kafka'nın java tasarım felsefesine dayalı olarak uygulanan bir mq setidir. Aynı zamanda, Ali departmanının birden fazla dahili mq ürününü (Notify, metaq) entegre eder, yalnızca temel işlevleri korur, diğer tüm çalışma zamanı bağımlılıklarını kaldırır ve en basitleştirilmiş temel işlevleri sağlar.Bu temelde, farklı senaryolara ulaşmak için Ali'nin diğer açık kaynaklı ürünleriyle işbirliği yapar. Mq mimarisi şu anda esas olarak sipariş ticaret sistemlerinde kullanılmaktadır.

Aşağıdaki özelliklere sahiptir:

  • Sıkı mesaj sırasını garanti edebilir
  • Mesajlar için filtreleme işlevi sağlayın
  • Zengin mesaj çekme modu sağlayın
  • Verimli abone yatay genişletme yeteneği
  • Gerçek zamanlı haber abonelik mekanizması
  • Milyar düzeyinde mesaj biriktirme yeteneği

Yetkili, kafka'dan farklı bazı kontrast farklılıkları sağlar:

https://rocketmq.apache.org/docs/motivation/

7.2 RabbitMQ

Erlang'da yazılan açık kaynaklı bir mesaj kuyruğu birçok protokolü destekler: AMQP, XMPP, SMTP, STOMP. Bu da doğrudur, bu da onu çok ağır ve kurumsal düzeyde geliştirme için daha uygun hale getirir. Aynı zamanda, Broker mimarisi de uygulanmaktadır: Temel fikir, üreticinin mesajı doğrudan kuyruğa göndermeyeceği ve mesaj müşteriye gönderildiğinde merkezi kuyrukta kuyruğa alınacaktır. Yönlendirme, yük dengesi ve veri kalıcılığı için iyi destek. Çoğunlukla kurumsal düzeyde ESB entegrasyonu için kullanılır.

7.3 ActiveMQ

Apache altında bir alt proje. JMS Sağlayıcısı'nın JMS 1.1 ve J2EE 1.4 standart uygulamasını tam olarak desteklemek için Java'yı kullanarak, az miktarda kod gelişmiş uygulama senaryolarını verimli bir şekilde uygulayabilir. Tak-çıkar aktarım protokolü desteği, örneğin: VM içi, TCP, SSL, NIO, UDP, multicast, JGroups ve JXTA aktarımları. RabbitMQ, ZeroMQ, ActiveMQ, yaygın olarak kullanılan çok dilli istemcileri destekler C ++, Java, .Net, Python, Php, Ruby, vb.

7.4 Redis

C dilinde geliştirilmiş bir Anahtar-Değer NoSQL veri tabanı geliştirme ve bakımda çok aktiftir.Anahtar-Değer veri tabanı depolama sistemi olmasına rağmen, MQ fonksiyonlarını desteklediği için hafif bir kuyruk servisi olarak kullanılabilir. RabbitMQ ve Redis'in kuyruğa alma ve kuyruğundan çıkarma işlemleri her biri 1 milyon kez gerçekleştirilir ve yürütme süresi her 100.000 seferde kaydedilir. Test verileri dört farklı boyutta 128Byte, 512Byte, 1K ve 10K olarak bölünmüştür. Deneyler, ekibe girerken, veriler nispeten küçük olduğunda Redis'in performansının RabbitMQ'dan daha yüksek olduğunu ve veri boyutu 10K'yı aştığında Redis'in dayanılmaz derecede yavaş olduğunu; verilerin boyutundan bağımsız olarak ekipten ayrılırken Redis'in çok iyi performans gösterdiğini gösteriyor. , Ve RabbitMQ'nun kuyruktan çıkarma performansı Redis'ten çok daha düşük.

7.5 Kafka

Scala kullanılarak uygulanan yüksek performanslı, dağıtılmış bir Yayınlama / Abone Olma mesaj kuyruğu sistemi olan Apache altındaki bir alt proje aşağıdaki özelliklere sahiptir:

  • Hızlı kalıcılık: Disk sıralı okuma ve yazma ve sıfır kopyalama mekanizması sayesinde, mesaj kalıcılığı O (1) sistem ek yükü altında gerçekleştirilebilir;
  • Yüksek verim: Sıradan bir sunucuda 10 W / sn'lik bir iş hacmi oranına ulaşılabilir;
  • Yüksek birikim: Tüketiciler konu altında uzun süre çevrimdışıdır ve mesaj birikimi büyüktür;
  • Tamamen dağıtılmış sistem: Broker, Producer ve Consumer, otomatik olarak karmaşık dengeyi elde etmek için zookeeper'a güvenerek dağıtımı yerel olarak otomatik olarak destekler;
  • Hadoop verilerinin paralel yüklenmesi için destek: Günlük verileri ve Hadoop gibi çevrimdışı analiz sistemleri için, ancak gerçek zamanlı işlemenin sınırlamalarıyla bu, uygulanabilir bir çözümdür.

7.6 ZeroMQ

En hızlı mesaj kuyruklama sistemi olarak bilinen bu sistem, yüksek verim / düşük gecikme senaryoları için özel olarak geliştirilmiştir.Genellikle finansal uygulamalarda kullanılır ve gerçek zamanlı veri iletişim senaryolarına odaklanır. ZMQ, RabbitMQ'nun iyi olmadığı gelişmiş / karmaşık kuyrukları uygulayabilir, ancak geliştiricilerin birden fazla teknik çerçeveyi kendi başlarına birleştirmeleri gerekir ve geliştirme maliyeti yüksektir. Bu nedenle, ZeroMQ, daha çok bir soket kitaplığı gibi benzersiz bir ara yazılım olmayan modele sahiptir.Uygulamanızın kendisi mantıksal hizmetlerin rolünü tamamlamak için ZeroMQ API'sini kullandığından, bir mesaj sunucusu veya ara yazılım kurmanıza ve çalıştırmanıza gerek yoktur. Bununla birlikte, ZeroMQ yalnızca kalıcı olmayan kuyruklar sağlar.Makine çalışmazsa veriler kaybolur. Örneğin ZeroMQ, Twitter'ın Storm'da veri akışı aktarımı olarak kullanılır.

ZeroMQ soketinin taşıma katmanıyla ilgisi yoktur: ZeroMQ soketi, tüm taşıma katmanı protokolleri için birleşik bir API arabirimi tanımlar. İşlem içi (inproc), işlemler arası (IPC), çok noktaya yayın ve TCP protokolleri varsayılan olarak desteklenir Farklı protokoller arasında geçiş yapmak için bağlantı dizesinin önekini değiştirmeniz yeterlidir. Minimum maliyetle istediğiniz zaman süreçler arasında yerel iletişimden dağıtılmış TCP iletişimine geçiş yapabilirsiniz. ZeroMQ, perde arkasında bağlantı kurma, bağlantı kesme ve yeniden bağlantı mantığını yönetir.

karakteristik:

  • Kilitsiz kuyruk modeli: Çapraz iş parçacığı etkileşimi (kullanıcı tarafı ve oturum) arasındaki veri alışverişi kanalı borusu için, kilitsiz kuyruk algoritması CAS benimsenir; eşzamansız olaylar borunun her iki ucunda kaydedilir ve mesajlar boruya okunur veya yazılır Okuma ve yazma etkinlikleri otomatik olarak tetiklenecektir.
  • Toplu işlem algoritması: Toplu mesajlar için uyarlamalı optimizasyon gerçekleştirilir ve mesajlar gruplar halinde alınabilir ve gönderilebilir.
  • Çok çekirdekli iş parçacığı bağlama, CPU değiştirme yok: geleneksel çok iş parçacıklı eşzamanlılık modundan, semafor veya kritik bölümden farklı olarak zeroMQ, çok çekirdekliğin avantajlarından tam olarak yararlanır, her bir çekirdek, çoklu iş parçacığını önlemek için bir çalışan iş parçacığı çalıştırmaya mecburdur CPU anahtarlama ek yükü.

2. Ana mesaj ara yazılımlarının karşılaştırılması

Ünlü Hong Kong kadın sanatçı aynı zamanda çok satan bir yazardır.
önceki
Lüksün sokağa gelemeyeceğini kim söylüyor? GUCCI bel çantası resmi olarak satışta!
Sonraki
Glory V20 Shenzhen gece çekimi: 48 milyon AI ultra net fotoğrafçılık performansı oldukça iyi!
TVB Sonbahar Ortası Festivali'nin hikayeleri "Kalbin Kalbinin Evi ve Dolunay" dan başlıyor.
Honor Tablet 5 (8 inç): Neden "güzel görünümlü ve pratik" bir tablet olabilir?
2018 Chengdu Otomobil Fuarı: Yeni Dongfeng Peugeot 408 tanıtıldı
JeeSpringCloud-Internet bulut hızlı geliştirme çerçevesi
Honor V20 fotoğraf deneyimi: Bu kadar çok fotoğrafı nasıl oynayacağınızı biliyor musunuz?
Tarım 1.0'dan Tarım 4.0'a
Gizli Adam Li Yichao: Başarılı bir yerli marka, kalite ve tasarım açısından olağanüstü olmalıdır.
63 yaşındaki adam 87 yaşındaki baba 20 yıl sonra sadece memleketi için 28 saatlik tren
Mercedes-Benz V260 AMG 668 bin yuan için satışa çıkıyor
Huawei telefonlarıyla nasıl daha doğal selfieler çekilir? Bir grup fotoğrafı için doğru duruş nedir?
Uçuş kontrol operasyonları sırasında pestisit karıştırdığınızda tepki verdiniz mi?
To Top