Hər kəsə salam!
Bir kitabın tərcüməsinə başladım:
««,
müəllif: Jakub Korab, nəşriyyat: O’Reilly Media, Inc., nəşr tarixi: İyun 2017, ISBN: 9781492049296.
Kitabın girişindən:
«… Bu kitab sizə mesaj brokerləri sistemləri haqqında düşünməyi öyrədəcək, iki populyar broker texnologiyasını müqayisə edərək: Apache ActiveMQ və Apache Kafka. Burada istifadə nümunələri və inkişaf stimulları təqdim olunacaq ki, bu da onların istehsalçılarını eyni sahədə — intermediar broker ilə sistemlər arasında mesajlaşma — tamamilə fərqli yanaşmalara sövq etmişdir. Bu texnologiyaları sıfırdan nəzərdən keçirəcəyik və bu yolda fərqli dizayn variantlarının təsirini vurğulayacağıq. Hər iki məhsul haqqında dərindən başa düşmə, onları necə və necə istifadə etməməli olduğunuzu anlamaq, gələcəkdə digər mesajlaşma texnologiyalarını dəyərləndirərkən nəyə diqqət etməli olduğunuzu biləcəksiniz. …»
İndiyə qədər tərcümə edilmiş hissələr:
Tərcümə edilən bölmələri tamamlaya bildikcə paylaşacağam.
BÖLÜM 1
Giriş
Sistemlərarası mesajlaşma, İT-nin ən az başa düşülən sahələrindən biridir. İnkişaf etdirici və ya memar olaraq müxtəlif çərçivələr və verilənlər bazaları ilə yaxşı tanış ola bilərsiniz. Ancaq, mesaj brokerinə əsaslanan mesajlaşma texnologiyalarının necə işlədiyi ilə bağlı yalnız yüzeysel tanışlığınızın olması ehtimalı var. Əgər bu cür hiss edirsinizsə, narahat olmayın, yaxşı bir şirkətdəsiniz.
İnsanlar adətən mesajlaşma infrastrukturuna çox məhdud şəkildə daxil olurlar. Çox vaxt uzun illər əvvəl yaradılan bir sistemə qoşulur və ya internetdən bir paylama yükləyərək onu PRO-da quraşdırır və ona kod yazmağa başlayır. İnfrastruktur PRO-da işə salındıqdan sonra nəticələr birbaşa olmayabilir: mesajların itirilməsi, göndərişlərin gözlənilədiyi kimi işləməməsi və ya brokerlərin istehsalçılarınınızı "saxladaraq" mesajları istehlakçılarınıza göndərməməsi.
Tanış gəlirmi?
Tez-tez rast gəlinən bir senaryo, mesajlaşma kodunuzun əla işləməsidir, bir müddətə qədər. Bu, işləməyi dayandırana qədər. Bu dövr, diqqəti yayındırır və texnologiyanın əsas davranışına dair yanlış təsəvvürlərlə daha çox kod yaratmağa səbəb olur. Nə vaxt ki, nəsə yanlışa döndüyündə, üzləşdiyiniz narahat verici həqiqət budur: siz məhsulun əsas davranışını və müəlliflərin seçdiyi kompromisləri, məsələn, məhsuldarlıq ilə etibarlılıq, ya da tranzaksiya qabiliyyəti ilə üfüqi genişlənmə arasındakı tarazlığı həqiqətən başa düşməmisiniz.
Sistemlərin necə işlədiyini dərin başa düşmədən, insanlar mesajlaşma sistemləri ilə bağlı, görünüşdə məntiqi iddialar irəli sürürlər, məsələn:
- Sistem heç vaxt mesajları itirməyəcək
- Mesajlar ardıcıl olaraq emal edilə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 iddiaların bəziləri yalnız müəyyən vəziyyətlərdə tətbiq edilən fərziyyələrə əsaslanır, bəziləri isə sadəcə yanlışdır.
Bu kitab sizə broker əsaslı mesajlaşma sistemlərini düşünməyi öyrədəcək, Apache ActiveMQ və Apache Kafka kimi iki məşhur broker texnologiyasını müqayisə edərək. Burada istifadə halları və inkişaf stimulları təqdim olunacaq ki, bu da onların inkişaf etdiricilərinin eyni sahəyə - sistemlər arasında broker vasitəsilə mesajlaşmaya - tamamilə fərqli yanaşmalar tətbiq etməsinə səbəb olub. Biz bu texnologiyaları sıfırdan araşdıracağıq və bu yolda müxtəlif dizayn variantlarının təsirini vurğulamaqla çıxış edəcəyik. Siz hər iki məhsul haqqında dərindən başa düşmə əldə edəcəksiniz, onların necə və necə istifadə olunmaması lazım olduğunu anlayacaqsınız, həmçinin gələcəkdə digər mesajlaşma texnologiyalarını nəzərə alarkən nələrə diqqət etməli olduğunuzu 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ə niyə lazımdır
İki tətbiqin bir-birilə ünsiyyət qura bilməsi üçün əvvəlcə interfeysi müəyyən etmələri lazımdır. Bu interfeysin müəyyən edilməsi HTTP, MQTT və ya SMTP kimi nəqliyyat və ya protokolu seçməyi və sistemlər arasında mübadilə olunacaq mesajların formatlarında razılaşmağı əhatə edir. Bu, mesajın yük (payload) tələbləri ilə XML sxeminin müəyyən edilməsi kimi ciddi bir proses ola bilər, ya da HTTP sorğusunun bir hissəsində müştəri identifikatorunun olacağı barədə iki proqramçı arasında razılaşma kimi daha az formal bir şəkildə ola bilər.
Mesaj formatı və sistemlər arasında onların göndərilmə sırası razılaşdırıldığı müddətcə, onlar bir-biri ilə əlaqə saxlaya bilərlər, digər sistemin tətbiqi barədə narahat olmadan. Bu sistemlərin daxili tərkibi, proqramlaşdırma dili və ya istifadə olunan çərçivə zamanla dəyişə bilər. Kontraktın saxlanıldığı müddətcə, əlaqə digər tərəfdən dəyişmədən davam edə bilər. Bu iki sistem effektiv şəkildə bu interfeys ilə ayrılıb.
Mesajlaşma sistemləri, adətən, iki sistem arasında iştirak edən bir vasitəçi istifadəsini nəzərdə tutur ki, bu da göndərəni alıcıdan və ya alıcılardan daha da ayırır. Bu zaman mesajlaşma sistemi göndərənə mesaj göndərməyə imkan verir, alıcının harada olduğunu, aktiv olub-olmamasını və ya onların neçə nüsxəsinin olduğunu bilmədən.
Mesajlaşma sisteminin həll etdiyi problem növlərini izah edən bir neçə analoqu nəzərdən keçirək və bəzi əsas terminləri təqdim edək.
Nöqtədən nöqtəyə
Aleksandra Adam üçün paketi göndərmək üçün poçta gedir. O, pəncərəyə yaxınlaşır və işçiyə paketi təqdim edir. İşçi paketi alır və Aleksandraya qəbz verir. Adamın paketin göndərilməsi zamanı evdə olması lazım deyil. Aleksandra əmin olur ki, paket gələcəkdə bir zamanda Adamın əlində olacaq və öz işlərinə davam edə bilər. Sonrasıda bir zamanda Adam paketi alır.
Bu mesajlaşma modeli nümunəsidir. nöqtə-nöqtə. Poçt şöbəsi burada paketləri dağıtma mexanizması kimi fəaliyyət göstərir, bu da hər bir paketin bir dəfə çatdırılmasını təmin edir. Poçt şöbəsinin istifadəsi paketin göndərilməsi aktını paketin çatdırılmasından ayırır.
Klassik messaging sistemlərində «nöqtə-nöqtə» modeli sırasınavasitəsilə həyata keçirilir. İstifadə sırası, bir və ya bir neçə istehlakçının abunə olacağı FIFO (ilk daxil olan, ilk çıxan) tamponu kimi fəaliyyət göstərir. Hər bir mesaj yalnız abunə olan istehlakçılardan birinə çatdırılır. İstifadə sıraları adətən istehlakçılar arasında mesajların ədalətli paylanmasına çalışır. Verilən mesajı yalnız bir istehlakçı alacaq.
İstifadə sıralarına «etibarlı» («durable») termini tətbiq edilir. Etibar — bu, sistemin abunəçilər aktiv olmadıqda mesajları saxlamasını təmin edən xidmətin bir xüsusiyyətidir, istehlakçı mesajların çatdırılması üçün sıralara abunə olana qədər.
Etibarlı olmağı tez-tez persistensiya ilə qarışdırırlar və, baxmayaraq ki, bu iki termin dəyişdirilə bilər, onlar fərqli funksiyaları icra edir. Persistensiya, mesajın sistem tərəfindən alınıb istehlakçıya göndərilən zaman bir növ saxlamada yazılıb-yazılmadığını müəyyən edir. İstifadəyə verilən mesajlar ya persisten, ya da qeyri-persisten ola bilər.
«Nöqtə-nöqtə» tipli təhqiqatlar istifadə edildikdə, istifadə variantı mesajın bir dəfəlik fəaliyyətini tələb etdi. Məsələn, hesabı doldurmaq və ya çatdırılma sifarişi vermək kimi. Biz daha sonra niyə mesaj ötürmə sisteminin öz-özünə birdəfəlik çatdırma təmin edə bilmədiyini və niyə sıraların ən yaxşı halda çatdırma zəmanəti təmin edə biləcəyini müzakirə edəcəyik ən azı bir dəfə.
Nəşr-Abunə
Gabriela konfrans nömrəsini yığır. O, konfransa qoşularkən, o, spikerin dediklərini bütün zəng iştirakçıları ilə birlikdə eşidir. O, ayrıldıqda, deyilənlərin bir kəsimini qaçırır. Yenidən qoşulduqda, dediyi sözləri eşitməyə davam edir.
Bu mesajlaşma modeli nümunəsidir. nəşr-abunə. Konfrans əlaqəsi geniş yayım mexanizmi kimi fəaliyyət göstərir. Danışan şəxs, zəngə hazırda nə qədər insanın qoşulduğunu maraqlandırmır — sistem, hazırda qoşulmuş hər kəsin nələri eşidəcəyini təmin edir.
Klassik messaging sistemlərində «nəşr-abunə» modeli mövzular vasitəsilə həyata keçirilir.Topic, eyni konfrans əlaqəsi mexanizmi kimi yayma yolu təqdim edir. Mesaj topic-ə göndərildikdə, o, bütün abunəçi istifadəçilərə paylanır..
Topics adətən etibarsızdır (nondurable).Konfrans çağırışında danışılanları eşitməyən dinləyici kimi, offline olduqda, topic abunəçiləri o anda göndərilən mesajları qaçır. Bu səbəbdən, topic-lərin çatdırılma zəmanəti təmin etdiyi deyilir hər istehlakçı üçün bir dəfədən çox olmayaraq. .
«Yayımla-abunə ol» tipli mesajlaşma, mesajların məlumat xarakterli olduğu, bir mesajın itirilməsinin ciddi olmadığı hallarda istifadə olunur. Məsələn, topic, bir qrup sensorun temperatur göstəricilərini bir dəfə bir saniyədə göndərə bilər. Cari temperaturu maraqlandıran bir sistem topic-ə abunə olursa, bu sistem bir mesajı qaçırdığına görə narahat olmayacaq - digər mesaj yaxın zamanda gələcək.
Hibrid modellər
Dükkanın veb saytı, sifariş barədə mesajları «mesaj sırasına» yerləşdirir. Bu mesajların əsas istehlakçısı icra sistemidir. Bundan əlavə, audit sistemi bu mesajların nüsxələrini təqib üçün saxlamalıdır. Hər iki sistem mesajları qaçıra bilməz, hətta sistemlər müəyyən bir müddət ərzində əlçatmaz olduqda belə. Veb saytı digər sistemlərdən xəbərdar olmamalıdır.
İstifadə senariləri, məsələn, bir neçə sistemin bir mesajın nüsxəsinə ehtiyacı olduğu və mesajın itirilməsinin qarşısını almaq üçün həm etibarlılıq, həm də davamlılıq tələb olunur.
Bu hallarda, mesajları əsasən topic kimi paylayan bir adresat (destination) (sıra və topic-lər üçün ümumi termin) tələb olunur, belə ki, hər mesaj bu mesajlarla maraqlanan ayrı-ayrı sistemlərə göndərilir, amma eyni zamanda, hər sistem daxil olan mesajları alan bir neçə istehlakçı təyin edə bilər ki, bu da daha çox sıra kimi görünür. Oxuma növü bu halda - hər maraqlı tərəf üçün bir dəfəyə bərabərdir.Bu hibrid ünvanlar tez-tez etibarlılıq (dayanıqlıq) tələb edir, belə ki, istehlakçı kəsildikdə, bu vaxt göndərilən mesajlar istehlakçı yenidən qoşulduqda qəbul edilir.
Hibrid modellər yeni deyil və əksər mesaj mübadiləsi sistemlərində tətbiq oluna bilər, bunlara ActiveMQ (virtual və ya tərkib hissələri olan ünvanlar vasitəsilə, mövzuları və növbələri birləşdirərək) və Kafka (gizli, onun ünvan dizaynının əsas xüsusiyyəti kimi) daxildir.
İndi biz əsas terminologiyaya və mesaj mübadiləsi sisteminin nə üçün faydalı ola biləcəyinə dair bir anlayışa sahib olduğumuz zaman, detallara keçək.
Tərcümə edildi:
Növbəti tərcümə olunmuş hissə:
Davamı gəlir…
Mənbə: habr.com
