Mesaj brokerlərini başa düşmək. ActiveMQ və Kafka ilə mesajlaşma mexanikasını öyrənmək. Fəsil 1

Hello!

Kiçik bir kitabı tərcümə etməyə başladım:
«Mesaj Brokerlərini Anlamaq",
müəllif: Jakub Korab, naşir: O'Reilly Media, Inc., nəşr tarixi: iyun 2017, ISBN: 9781492049296.

Kitabın girişindən:
"... Bu kitab sizə broker mesajlaşma sistemləri haqqında düşünməyi, iki məşhur broker texnologiyasını: Apache ActiveMQ və Apache Kafka-nı müqayisə və müqayisə etməyi öyrədəcək. Bu, onların tərtibatçılarını eyni sahəyə çox fərqli yanaşmalar - ara broker ilə sistemlər arasında mesajlaşmaya səbəb olan istifadə hallarını və inkişaf təşviqlərini təsvir edəcəkdir. Biz bu texnologiyalara sıfırdan baxacağıq və yol boyu müxtəlif dizayn seçimlərinin təsirini vurğulayacağıq. Siz hər iki məhsul haqqında dərin anlayış əldə edəcəksiniz, onlardan necə istifadə edilməli və istifadə edilməməlidir, və gələcəkdə digər mesajlaşma texnologiyalarını nəzərdən keçirərkən nələrə diqqət etməli olduğunuzu başa düşəcəksiniz. ... "

İndiyə qədər tərcümə edilmiş hissələr:
Fəsil 1. Giriş
Fəsil 3. Kafka

Tamamlanmış fəsilləri tərcümə etdikcə dərc edəcəm.

Fəsil 1

Giriş

Sistemdən sistemə mesajlaşma İT-nin ən az başa düşülən sahələrindən biridir. Bir tərtibatçı və ya memar olaraq, müxtəlif çərçivələr və verilənlər bazası ilə çox tanış ola bilərsiniz. Bununla belə, çox güman ki, siz yalnız broker əsaslı mesajlaşma texnologiyalarının necə işlədiyi ilə yaxından tanışsınız. Əgər belə hiss edirsinizsə, narahat olmayın, yaxşı bir şirkətdəsiniz.

İnsanlar adətən mesajlaşma infrastrukturu ilə çox məhdud əlaqəyə malikdirlər. Onlar tez-tez uzun müddət əvvəl yaradılmış sistemə qoşulurlar və ya İnternetdən paylama yükləyirlər, onu PROM-da quraşdırırlar və onun üçün kod yazmağa başlayırlar. PROM-da infrastrukturu işə saldıqdan sonra nəticələr qarışdırıla bilər: uğursuzluqlar səbəbindən mesajlar itirilir, göndərmə gözlədiyiniz kimi işləmir və ya brokerlər istehsalçılarınızı “asdırırlar” və ya istehlakçılara mesaj göndərmirlər.

Tanış səs?

Ümumi bir ssenari, mesajlaşma kodunuzun hələlik əla işlədiyi yerdir. İşini dayandırana qədər. Bu dövr insanın mühafizəçini yalançı təhlükəsizlik hissinə salır və texnologiyanın əsas davranışı ilə bağlı yanlış inanclara əsaslanan daha çox kodun yaranmasına səbəb olur. İşlər yanlış getməyə başlayanda, əlverişsiz bir həqiqətlə qarşılaşırsınız: məhsulun əsas davranışını və ya müəlliflər tərəfindən seçilən mübadilələri, məsələn, etibarlılığa qarşı performans və ya tranzaksiyaya qarşı üfüqi miqyaslılığı həqiqətən başa düşməmisiniz. .

Brokerlərin necə işlədiyini dərindən dərk etmədən insanlar mesajlaşma sistemləri haqqında ağlabatan görünən bəyanatlar verirlər, məsələn:

  • Sistem heç vaxt mesajları itirməyəcək
  • Mesajlar ardıcıllıqla işlənəcək
  • İstehlakçıların əlavə edilməsi sistemi daha sürətli edəcək
  • Mesajlar yalnız bir dəfə çatdırılacaq

Təəssüf ki, bu ifadələrin bəziləri yalnız müəyyən şərtlərdə tətbiq olunan fərziyyələrə əsaslanır, digərləri isə sadəcə olaraq yanlışdır.

Bu kitab sizə iki məşhur broker texnologiyasını: Apache ActiveMQ və Apache Kafka-nı müqayisə və təzad qoyaraq, broker əsaslı mesajlaşma sistemləri haqqında düşünməyi öyrədəcək. Bu, onların tərtibatçılarını eyni sahəyə çox fərqli yanaşmalar - ara broker ilə sistemlər arasında mesajlaşmaya səbəb olan istifadə hallarını və inkişaf təşviqlərini təsvir edəcəkdir. Biz bu texnologiyalara sıfırdan baxacağıq və yol boyu müxtəlif dizayn seçimlərinin təsirini vurğulayacağıq. Siz hər iki məhsulu dərindən başa düşəcəksiniz, onlardan necə istifadə edilməli və necə istifadə edilməməli olduğunu başa düşəcəksiniz və gələcəkdə digər mesajlaşma texnologiyalarını nəzərdən keçirərkən nələrə diqqət yetirəcəyinizi başa düşəcəksiniz.

Başlamazdan əvvəl gəlin əsasları nəzərdən keçirək.

Mesajlaşma sistemi nədir və nə üçün lazımdır?

İki tətbiqin bir-biri ilə əlaqə saxlaması üçün əvvəlcə interfeys müəyyən etməlidirlər. Bu interfeysin müəyyən edilməsi HTTP, MQTT və ya SMTP kimi nəqliyyat və ya protokolun seçilməsini və sistemlər arasında mübadilə ediləcək mesaj formatlarının müzakirəsini əhatə edir. Bu, mesaj yükü dəyəri tələbləri ilə XML sxeminin müəyyən edilməsi kimi ciddi proses ola bilər və ya HTTP sorğusunun bəzi hissəsinin müştəri identifikatorunu ehtiva etməsi ilə bağlı iki tərtibatçı arasında razılaşma kimi daha az rəsmi ola bilər.

Mesajların formatı və göndərilmə ardıcıllığı sistemlər arasında uyğunlaşdıqca, digər sistemin həyata keçirilməsindən narahat olmadan bir-biri ilə əlaqə saxlaya bilərlər. Bu sistemlərin daxili elementləri, məsələn, proqramlaşdırma dili və ya istifadə olunan çərçivə zamanla dəyişə bilər. Müqavilənin özü saxlanıldıqca qarşılıqlı əlaqə digər tərəfdən dəyişiklik olmadan davam edə bilər. Bu interfeys vasitəsilə iki sistem effektiv şəkildə ayrılır (ayrır).

Mesajlaşma sistemləri, adətən, göndəricini alıcıdan və ya alıcılardan daha da ayırmaq (ayrımaq) üçün qarşılıqlı əlaqədə olan iki sistem arasında vasitəçini əhatə edir. Bu halda mesajlaşma sistemi göndərənə alıcının harada olduğunu, aktiv olub-olmadığını və ya neçə instansiyanın olduğunu bilmədən mesaj göndərməyə imkan verir.

Mesajlaşma sisteminin həll etdiyi problem növləri üçün bir neçə analogiyaya baxaq və bəzi əsas terminləri təqdim edək.

Nöqtədən Nöqtəyə

Alexandra Adəmə bir paket göndərmək üçün poçt şöbəsinə gedir. Pəncərəyə yaxınlaşır və paketi işçiyə verir. İşçi bağlamanı götürür və Aleksandra qəbz verir. Paket göndərilərkən Adamın evdə olması lazım deyil. Aleksandra əmindir ki, paket gələcəkdə nə vaxtsa Adəmə çatdırılacaq və öz işini davam etdirə bilər. Daha sonra bir anda Adəm bir paket alır.

Bu mesajlaşma modelinin bir nümunəsidir nöqtədən nöqtəyə. Burada poçt şöbəsi bağlamaların paylanması mexanizmi kimi çıxış edərək, hər bir bağlamanın bir dəfə çatdırılmasını təmin edir. Poçt şöbəsindən istifadə bağlamanın göndərilməsi aktını bağlamanın çatdırılmasından ayırır.
Klassik mesajlaşma sistemlərində nöqtədən nöqtəyə model vasitəsilə həyata keçirilir növbələr. Növbə bir və ya bir neçə istehlakçı tərəfindən abunə oluna bilən FIFO (ilk girən, ilk çıxan) buferi kimi çıxış edir. Hər mesaj yalnız çatdırılır abunə olan istehlakçılardan birinə. Növbələr adətən mesajları istehlakçılar arasında ədalətli şəkildə yaymağa çalışır. Yalnız bir istehlakçı bu mesajı alacaq.

“Dayanıqlı” termini növbələrə tətbiq olunur. Etibarlılıq istehlakçı mesajın çatdırılması üçün növbəyə abunə olana qədər aktiv abunəçilər olmadıqda mesajlaşma sisteminin mesajları saxlamasını təmin edən xidmət mülkiyyətidir.

Etibarlılıq tez-tez qarışdırılır əzmkarlıq və bu iki termin bir-birini əvəz etsə də, fərqli funksiyaları yerinə yetirir. Davamlılıq mesajlaşma sisteminin mesajın qəbulu ilə istehlakçıya göndərilməsi arasında bir növ yaddaşa yazıb-yazmamasını müəyyən edir. Növbəyə göndərilən mesajlar davamlı ola bilər, olmaya da bilər.
Nöqtədən-nöqtəyə mesajlaşma istifadə halı mesajda birdəfəlik hərəkət tələb etdikdə istifadə olunur. Nümunələrə hesaba vəsait qoymaq və ya çatdırılma sifarişini tamamlamaq daxildir. Mesajlaşma sisteminin niyə təkbaşına birdəfəlik çatdırılma təmin edə bilmədiyini və nə üçün növbələrin ən yaxşı halda çatdırılma zəmanəti verə biləcəyini daha sonra müzakirə edəcəyik. ən azı bir dəfə.

Nəşriyyat-Abunəçi

Qabriella konfrans nömrəsini yığır. O, konfransa qoşulduqda, digər zəng iştirakçıları ilə birlikdə natiqin dediyi hər şeyi eşidir. O, səslənəndə deyilənləri qaçırır. Yenidən qoşulduqda o, deyilənləri eşitməyə davam edir.

Bu mesajlaşma modelinin bir nümunəsidir dərc et - abunə ol. Konfrans zəngi yayım mexanizmi kimi çıxış edir. Danışan şəxs hazırda zəngdə neçə nəfərin olmasının vecinə deyil - sistem hazırda bağlı olan hər kəsin deyilənləri eşitməsini təmin edir.
Klassik mesajlaşma sistemlərində dərc et-abunə mesajlaşma modeli vasitəsilə həyata keçirilir zirvələr. Mövzu konfrans mexanizmi ilə eyni yayım metodunu təqdim edir. Mövzuya mesaj göndərildikdə o, yayılır bütün abunə olan istifadəçilər üçün.

Mövzular adətən etibarsız (davamsız). Dinləyici əlaqəni kəsdikdə konfrans zəngində deyilənləri eşidə bilməyən dinləyici kimi, mövzu abunəçiləri oflayn olduqda göndərilən mesajları qaçırırlar. Bu səbəbdən mövzuların çatdırılma zəmanəti verdiyini söyləyə bilərik bir dəfədən çox olmayaraq hər bir istehlakçı üçün.

Nəşr et-abunə mesajlaşması adətən mesajlar informasiya xarakterli olduqda və bir mesajın itirilməsi xüsusilə əhəmiyyətli olmadıqda istifadə olunur. Məsələn, bir mövzu saniyədə bir dəfə bir qrup sensordan temperatur göstəricilərini ötürə bilər. Cari temperaturla maraqlanan və mövzuya abunə olan bir sistem mesajı qaçırsa narahat olmayacaq - yaxın gələcəkdə başqası gələcək.

hibrid modellər

Mağazanın internet saytında sifariş mesajları "mesaj növbəsi"nə yerləşdirilir. Bu mesajların əsas istehlakçısı icra sistemidir. Bundan əlavə, audit sistemində sonrakı izləmə üçün bu sifariş mesajlarının surətləri olmalıdır. Sistemlərin özləri bir müddət əlçatan olmasa belə, hər iki sistem mesajların keçməsinə icazə verə bilməz. Veb sayt digər sistemlərdən xəbərdar olmamalıdır.

İstifadə halları tez-tez dərc et-abbunə və nöqtədən-nöqtə mesajlaşma modellərinin birləşməsini tələb edir, məsələn, birdən çox sistem mesajın surətini tələb etdikdə və mesaj itkisinin qarşısını almaq üçün həm etibarlılıq, həm də davamlılıq tələb olunduqda.

Bu hallar mesajları əsasən mövzu kimi paylayan təyinat (növbələr və mövzular üçün ümumi termin) tələb edir ki, hər bir mesaj həmin mesajlarla maraqlanan ayrıca sistemə göndərilir, həm də hər bir sistem daxil olanları qəbul edən bir neçə istehlakçı müəyyən edə bilər. mesajlar, bu daha çox növbəyə bənzəyir. Bu vəziyyətdə oxu növü hər bir maraqlı tərəf üçün bir dəfə. Bu hibrid istiqamətlər tez-tez davamlılıq tələb edir ki, istehlakçı oflayn olarsa, həmin vaxt göndərilən mesajlar istehlakçı yenidən qoşulduqdan sonra qəbul edilir.

Hibrid modellər yeni deyil və həm ActiveMQ (mövzuları və növbələri birləşdirən virtual və ya kompozit təyinatlar vasitəsilə) və Kafka (dolaylı olaraq təyinat dizaynının əsas xüsusiyyəti kimi) daxil olmaqla, əksər mesajlaşma sistemlərində istifadə edilə bilər.

İndi bəzi əsas terminologiyaya və mesajlaşma sistemindən nə üçün istifadə edə biləcəyimizə dair anlayışımız olduğuna görə, təfərrüatlara keçək.

Tərcümə edildi: tele.gg/middle_java

Aşağıdakı tərcümə edilmiş hissə: Fəsil 3. Kafka

Davam etmək üçün ...

Mənbə: www.habr.com

Добавить комментарий