Mesaj simsarlarını anlamak. ActiveMQ ve Kafka ile mesajlaşma mekaniğini öğrenmek. Bölüm 1

Herkese Merhaba!

Küçük bir kitabı çevirmeye başladım:
«Mesaj Aracılarını Anlamak'
yazar: Jakub Korab, yayıncı: O'Reilly Media, Inc., yayın tarihi: Haziran 2017, ISBN: 9781492049296.

Kitabın giriş kısmından:
' ... Bu kitap size iki popüler aracı teknolojisini karşılaştırarak aracı mesajlaşma sistemleri hakkında nasıl düşüneceğinizi öğretecek: Apache ActiveMQ ve Apache Kafka. Geliştiricilerini aynı alana (bir ara komisyoncu ile sistemler arasında mesajlaşma) çok farklı yaklaşımlar benimsemeye yönlendiren kullanım örneklerini ve geliştirme teşviklerini ana hatlarıyla açıklayacaktır. Bu teknolojilere sıfırdan bakacağız ve yol boyunca çeşitli tasarım tercihlerinin etkisini vurgulayacağız. Her iki ürün hakkında da derinlemesine bilgi sahibi olacak, bunların nasıl kullanılması ve kullanılmaması gerektiğine dair bir anlayışa sahip olacak ve gelecekte diğer mesajlaşma teknolojilerini değerlendirirken nelere dikkat etmeniz gerektiğine dair bir anlayış kazanacaksınız. ... "

Şu ana kadar tercüme edilen kısımlar:
Bölüm 1. Giriş
Bölüm 3. Kafka

Tamamlanan bölümleri çevrildikçe yayınlayacağım.

BÖLÜM 1

Giriş

Sistemden sisteme mesajlaşma, BT'nin en az anlaşılan alanlarından biridir. Bir geliştirici veya mimar olarak çeşitli çerçevelere ve veritabanlarına çok aşina olabilirsiniz. Ancak aracı tabanlı mesajlaşma teknolojilerinin nasıl çalıştığına ilişkin geçici bir bilginiz olması muhtemeldir. Eğer böyle hissediyorsanız endişelenmeyin, iyi bir arkadaşsınız.

İnsanların mesajlaşma altyapısıyla genellikle çok sınırlı teması vardır. Genellikle uzun zaman önce oluşturulmuş bir sisteme bağlanırlar veya İnternet'ten bir dağıtım indirip PROM'a yüklerler ve bunun için kod yazmaya başlarlar. Altyapıyı PROM'da çalıştırdıktan sonra sonuçlar karışık olabilir: hatalar nedeniyle mesajlar kayboluyor, gönderim beklediğiniz gibi çalışmıyor veya komisyoncular üreticilerinizi "asıyor" veya tüketicilerinize mesaj göndermiyor.

Tanıdık geliyor?

Yaygın bir senaryo, mesajlaşma kodunuzun şimdilik harika çalıştığı durumdur. Ta ki çalışmayı bırakana kadar. Bu dönem, kişinin gardını yanlış bir güvenlik duygusuna kaptırarak, teknolojinin temel davranışı hakkında yanlış inançlara dayanan daha fazla kod üretilmesine yol açar. İşler ters gitmeye başladığında, rahatsız edici bir gerçekle karşı karşıya kalırsınız: Ürünün temel davranışını veya performansa karşı güvenilirliğe veya işlemselliğe karşı yatay ölçeklenebilirlik gibi yazarlar tarafından seçilen ödünleşimleri gerçekten anlamamışsınızdır. .

Brokerların nasıl çalıştığına dair derinlemesine bir anlayışa sahip olmayan insanlar, mesajlaşma sistemleri hakkında makul görünen beyanlarda bulunurlar, örneğin:

  • Sistem mesajları asla kaybetmez
  • Mesajlar sırayla işlenecek
  • Tüketici eklemek sistemi daha hızlı hale getirecek
  • Mesajlar yalnızca bir kez iletilecektir

Ne yazık ki, bu ifadelerden bazıları yalnızca belirli koşullar altında geçerli olan varsayımlara dayanmaktadır, diğerleri ise tamamen yanlıştır.

Bu kitap size iki popüler aracı teknolojisini karşılaştırarak aracı tabanlı mesajlaşma sistemleri hakkında nasıl düşüneceğinizi öğretecek: Apache ActiveMQ ve Apache Kafka. Geliştiricilerini aynı alana (bir ara komisyoncu ile sistemler arasında mesajlaşma) çok farklı yaklaşımlar benimsemeye yönlendiren kullanım örneklerini ve geliştirme teşviklerini ana hatlarıyla açıklayacaktır. Bu teknolojilere sıfırdan bakacağız ve yol boyunca çeşitli tasarım tercihlerinin etkisini vurgulayacağız. Her iki ürün hakkında da derinlemesine bir anlayışa sahip olacak, bunların nasıl kullanılması ve kullanılmaması gerektiğine dair bir anlayışa sahip olacak ve gelecekte diğer mesajlaşma teknolojilerini değerlendirirken nelere dikkat etmeniz gerektiğine dair bir anlayış kazanacaksınız.

Başlamadan önce temelleri gözden geçirelim.

Mesajlaşma Sistemi nedir ve neden gereklidir?

İki uygulamanın birbiriyle iletişim kurabilmesi için öncelikle bir arayüz tanımlamaları gerekir. Bu arayüzün tanımlanması, HTTP, MQTT veya SMTP gibi bir aktarım veya protokolün seçilmesini ve sistemler arasında alınıp verilecek mesaj formatları üzerinde anlaşmayı içerir. Bu, mesaj yükü maliyeti gereksinimleriyle bir XML şemasının tanımlanması gibi katı bir süreç olabilir veya iki geliştirici arasında, HTTP isteğinin bir kısmının istemci tanımlayıcısını içereceğine dair bir anlaşma gibi çok daha az resmi olabilir.

Mesajların formatı ve gönderilme sırası sistemler arasında tutarlı olduğu sürece, diğer sistemin uygulanmasından endişe duymadan birbirleriyle iletişim kurabilirler. Bu sistemlerin kullanılan programlama dili veya çerçeve gibi iç özellikleri zamanla değişebilir. Sözleşme korunduğu sürece karşı taraftan herhangi bir değişiklik yapılmadan etkileşim devam edebilir. İki sistem bu arayüz tarafından etkili bir şekilde ayrıştırılır (ayrılır).

Mesajlaşma sistemleri tipik olarak göndereni alıcı veya alıcılardan daha da ayırmak (ayırmak) için etkileşime giren iki sistem arasında bir aracıyı içerir. Bu durumda mesajlaşma sistemi, göndericinin, alıcının nerede olduğunu, aktif olup olmadığını veya kaç örneğinin olduğunu bilmeden mesaj göndermesine olanak tanır.

Bir mesajlaşma sisteminin çözdüğü sorun türleri için birkaç analojiye bakalım ve bazı temel terimleri tanıtalım.

Iki nokta arasında yapılan

Alexandra, Adam'a bir paket göndermek için postaneye gider. Pencereye gider ve paketi çalışana uzatır. Çalışan paketi alır ve Alexandra'ya bir makbuz verir. Paket gönderildiğinde Adam'ın evde olmasına gerek yok. Alexandra, paketin gelecekte bir noktada Adam'a teslim edileceğinden ve işine devam edebileceğinden emin. Daha sonra bir noktada Adam bir paket alır.

Bu bir mesajlaşma modeli örneğidir noktadan noktaya. Buradaki postane, her paketin bir kez teslim edilmesini sağlayan bir paket dağıtım mekanizması görevi görüyor. Postanenin kullanılması, paketin gönderilmesi işlemini paketin teslim edilmesinden ayırır.
Klasik mesajlaşma sistemlerinde noktadan noktaya modeli şu şekilde uygulanır: kuyruk. Kuyruk, bir veya daha fazla tüketicinin abone olabileceği bir FIFO (ilk giren ilk çıkar) arabelleği görevi görür. Her mesaj yalnızca iletilir abone olan tüketicilerden birine. Kuyruklar genellikle mesajları tüketiciler arasında adil bir şekilde dağıtmaya çalışır. Bu mesajı yalnızca bir tüketici alacaktır.

Kuyruklara “dayanıklı” terimi uygulanır. Güvenilirlik Bir tüketici mesaj teslimi için kuyruğa abone olana kadar mesajlaşma sisteminin aktif abonelerin yokluğunda mesajları sürdürmesini sağlayan bir hizmet özelliğidir.

Güvenilirlik sıklıkla karıştırılır sebat ve iki terim birbirinin yerine kullanılsa da farklı işlevlere hizmet ederler. Kalıcılık, mesajlaşma sisteminin, mesajı almasıyla tüketiciye göndermesi arasında bir tür depolama birimine mesaj yazıp yazmayacağını belirler. Kuyruğa gönderilen mesajlar kalıcı olabilir veya olmayabilir.
Noktadan noktaya mesajlaşma, kullanım durumu mesaj üzerinde tek seferlik bir eylem gerektirdiğinde kullanılır. Örnekler arasında bir hesaba para yatırmak veya bir teslimat siparişini tamamlamak yer alır. Mesajlaşma sisteminin neden tek başına tek seferlik teslimat sağlayamadığını ve kuyrukların neden en iyi ihtimalle teslimat garantisi sağlayabileceğini daha sonra tartışacağız. en azından bir kere.

Yayıncı-Abone

Gabriella konferans numarasını çeviriyor. Konferansa bağlıyken, diğer çağrı katılımcılarıyla birlikte konuşmacının söylediği her şeyi duyar. Konuşmayı bıraktığında söylenenleri kaçırıyor. Tekrar bağlandığında söylenenleri duymaya devam eder.

Bu bir mesajlaşma modeli örneğidir yayınla-abone ol. Konferans görüşmesi bir yayın mekanizması görevi görür. Konuşan kişinin o anda kaç kişinin görüşmede olduğu umrunda değil; sistem, o anda bağlı olan herkesin söylenenleri duymasını sağlar.
Klasik mesajlaşma sistemlerinde yayınla-abone ol mesajlaşma modeli şu şekilde uygulanır: üstler. Konu, konferans mekanizmasıyla aynı yayın yöntemini sağlar. Bir konuya mesaj gönderildiğinde dağıtılır tüm abone kullanıcılar için.

Konular genellikle güvenilmez (dayanıksız). Tıpkı bir konferans görüşmesinde dinleyicinin bağlantısı kesildiğinde söylenenleri duyamayan bir dinleyici gibi, konu aboneleri de çevrimdışıyken gönderilen mesajları kaçırır. Bu nedenle konuların teslimat garantisi sağladığını söyleyebiliriz. bir kereden fazla değil her tüketici için.

Yayınla-abone ol mesajları genellikle mesajların doğası gereği bilgilendirici olduğu ve bir mesajın kaybının özellikle önemli olmadığı durumlarda kullanılır. Örneğin bir konu, bir grup sensörden gelen sıcaklık değerlerini saniyede bir kez iletebilir. Mevcut sıcaklıkla ilgilenen ve bir konuya abone olan bir sistem, bir mesajı kaçırırsa endişelenmeyecektir; yakın gelecekte bir başkası gelecektir.

hibrit modeller

Mağazanın web sitesi sipariş mesajlarını bir "mesaj kuyruğuna" yerleştirir. Bu mesajların ana tüketicisi yürütme sistemidir. Ayrıca denetim sistemi daha sonraki takip için bu sipariş mesajlarının kopyalarına sahip olmalıdır. Her iki sistem de, sistemler bir süreliğine kullanılamasa bile mesajların iletilmesine izin veremez. Web sitesi diğer sistemlerden haberdar olmamalıdır.

Kullanım durumları genellikle yayınlama-abone olma ve noktadan noktaya mesajlaşma modellerinin bir kombinasyonunu gerektirir; örneğin, birden fazla sistemin bir mesajın bir kopyasını gerektirdiği ve mesaj kaybını önlemek için hem güvenilirliğin hem de kalıcılığın gerekli olduğu durumlar.

Bu durumlar, mesajları temel olarak bir konu olarak dağıtan bir hedef (kuyruklar ve konular için genel bir terim) gerektirir; böylece her mesaj, bu mesajlarla ilgilenen ayrı bir sisteme gönderilir, ancak aynı zamanda her sistem, gelen mesajları alan birden fazla tüketiciyi tanımlayabilir. daha çok kuyruğa benzeyen mesajlar. Bu durumda okuma türü her paydaş için bir kez. Bu karma hedefler genellikle dayanıklılık gerektirir; böylece bir tüketici çevrimdışı olduğunda, o anda gönderilen mesajlar tüketici yeniden bağlandıktan sonra alınır.

Hibrit modeller yeni değildir ve hem ActiveMQ (konuları ve sıraları birleştiren sanal veya bileşik hedefler aracılığıyla) hem de Kafka (örtük olarak hedef tasarımının temel bir özelliği olarak) dahil olmak üzere çoğu mesajlaşma sisteminde kullanılabilir.

Artık bazı temel terminolojiye ve mesajlaşma sistemini ne için kullanabileceğimize dair bir anlayışa sahip olduğumuza göre, ayrıntılara inelim.

Çeviri yapıldı: tele.gg/middle_java

Aşağıdaki çevrilmiş kısım: Bölüm 3. Kafka

Devam edecek ...

Kaynak: habr.com

Yorum ekle