Dövlət və hadisə sistemlərini necə keçmək olar (və Gorillanı döymək)

Parlaq yeni bir CQRS sisteminiz var, tamamlandı və inteqrasiya sınağına başlamaq üzrəsiniz. Domen müzakirələriniz zamanı küncdə yatan 800 kiloluq qorilla oyanır.

Hərtərəfli domen diaqramlarınıza, maraqlı istifadəçi hekayələrinizə, istifadəçi interfeysi modellərinizə və ya yaxşı sənədləşdirilmiş qəbul meyarlarınıza bir dəfə də baxmadan geri çəkməli olduğunuz nöqtəli "kontekst sərhədini" pozur.

Qorilla binaların ətrafında qəzəblənir, dəyəri sarsıdır, aqreqatları kökündən çıxarır və ümumiyyətlə layihə ilə bağlı bir fikir birliyini məhv edir. Gorilla, adın Legacy Integration.

Salam uşaqlar! RESTful mikro xidmət tətbiqetməyinizin bu 30 illik sifarişli ERP sistemi ilə necə birləşdiyini görmək üçün səbirsizliklə gözləyirəm! COBOL'u bəyəndiyinizi ümid edirəm. (Qorilla olmayan makakanın

Əvvəlki sistemlərin və proseslərin inteqrasiyası, əksinə mükəmməl şəkildə həyata keçirilmiş bir layihəni dayanma vəziyyətinə gətirə bilər. Yalnız sərt döymək məktəbində öyrədilən bir problemin canavar migrenidir. Bu, həm də yaxşı qurulmuş şirkətlər və etki alanları ilə işləyərkən bir geliştirici karyeranızda qarşılaşacağınız bir problemdir (hələ yoxsa).

Əlbətdə ki, şanslı olsanız, qorillə oyandıqda kodlamağa başlamazsınız - və ya ən azından bu prosesin başlanğıcındadır. Yoxsa ağıllısınızsa, köşedəki abajurun altına qoyulmuş qorillaya baxın və əvvəldən arxitekturanıza daxil edərək qaçılmaz qəzəbin qarşısını almaq üçün son görüşünüzdəki izləri ovuşdurun.

Əvvəlki sistemlərlə məşğul olmaq

UCLA-nın Tədqiqat İnformasiya Sistemləri Ofisində Memarlıq direktorunun müavini kimi bir çox sistem və məlumat boşluğunun bağlanmasından cavabdehəm. UCLA bu ənənəvi yanaşmaları yeni texnologiyalarla “pozmaq” cəhdinin əksinə olan tədqiqatlardan onilliklər boyu davam edən iş prosesləri və sistemlərindən ibarət bir boru kəmərinə malikdir.

Ən qorxulu şəkildə, bu boru kəməri, tez-tez real vaxtda mübahisələr tələb edən irəliləyən məlumatlarla bəzən keçilməz aysberqlə doludur.

Aman Tanrım! Məlumat dağı! Xeyr, gözlə, bu sadəcə bir Fatbergdir. Gigiyena deyil, kod sahəsində bir karyera seçdiyim üçün sevindim. (Şəkil krediti: Associated Press)

Mənim ofisimdə vəzifəmiz bu irsi sistemlərə artan sürətlə inteqrasiyanı təmin etməkdir. Kiçik ticarət proseslərini idarə etmək üçün sifarişli əməliyyat sistemlərimizi də genişləndiririk.

Öz sistemlərimiz üçün ümumiyyətlə mikroservis nümunəsini izləyirik. Lazım gələrsə daha mürəkkəbliyi birləşdiririk, məs. B. Domain idarəolunan dizayn (DDD) və hadisə mənbəyi. Bu sistemlər üçün ən böyük problemimiz, mövcud sistemlərin dövlət davamlılığı sistemlərinə inteqrasiyasıdır.

İnteqrasiyaya yaxınlaşırıq

Növbəti bir neçə bənddə yanaşma tərzimizi izah edəcəyəm. Bu şəkildə bir hadisə sistemini, xüsusən hibrid hadisə sistemini köprüdən çıxardığımız problemlərdən birini sırf vəziyyət probleminə həll etdik.

Tətbiq edənlərin tez-tez görməməzlikdən gəldiyi vacib bir şərt, hadisə mənbəyinin hər yerdə tətbiq edilməməsidir. Bu, "hadisə tədarükü" proqramı arxitekturası modelini təqdim etməkdə geniş yayılan Greg Young-a görədir.

Xüsusi, hədəflənmiş tələblərə cavab vermək üçün sistemlərimizdə hadisə mənbəyindən istifadə edirik. Bəzən bu, tətbiqlərimizin hadisələr axınından kənarda ola biləcəyi bir vəziyyətdə olması ilə nəticələnir. Bundan əlavə, bəzi hadisə tetikleyicilerimiz, qaynaq sistemindəki etibarsız status dəyişikliklərindən qaynaqlanır. Bu hadisə axınından asılı olsaydıq, bunun üçün bir çox post hoc düzəliş və "geri sarma" tələb olunur.

Şübhəli bir həll

Buna tapdığımız həll yolu "şübhəçi abunəçi" adlandırdığım şeydir. Şübhə edən abunəçi, sistemin hadisə tərəfindəki "etibarsızlıq" problemini ən azından əvvəlki dövlət maşını baxımından həll edir. Köhnə məlumatlarla əlaqədar problemlər səbəbindən hadisə istehsalının uğursuz ola biləcəyi sistemlərə də müraciət edir:

  1. Tədbir mənbəyi, keçmiş dövlət maşını üçün uyğun olan dövlət dəyişikliklərinə səbəb olmayan hadisələr yarada bilər. Onun nöqteyi-nəzərindən bunlar “saxta müsbət” hadisələrdir
  2. Tədbir mənbəyi, əvvəlki dövlət maşını ilə əlaqəli vəziyyət dəyişiklikləri üçün hadisələr yarada bilməz. Onun nöqteyi-nəzərindən bunlar "qaçırılan" və ya "qaçırılan" hadisələrdir
  3. Hadisələrin orijinal mənbəyindəki səhvlər və ya səhvlər səbəbindən hadisələr ümumiyyətlə yarana bilməz. Bu, xüsusilə köhnə məlumat anbarlarından ETL axınlarında (Extract-Tranform-Load) baş verir. Hər mənada bunlar həqiqətən atlanan hadisələrdir

Şübhəli abunəçi yanaşması hadisələrin axınına inamsızlıq edərək bu narahatlıqları aradan qaldırır. Hadisələr axını, mümkün bir tetikleyici və ya vəziyyətin dəyişdirildiyi barədə bildiriş olaraq qəbul edilir, lakin digər mümkün tetikleyiciler də qəbul edilir. Vəziyyət dəyişikliyi hesabatlarının doğruluğuna da şübhə edir.

İştirakçıya statusun dəyişə biləcəyi barədə məlumat verildikdən sonra hadisə əsaslı sistemin vəziyyətini soruşan bir status qapısına xəbər verir.

Bu status keçidi vəziyyəti son bilinən vəziyyətə əsasən qiymətləndirir (abunə sistemi tərəfindən məlum olduğu kimi).

Dəyişiklik aktualdırsa, abunə sisteminin vəziyyətini yeniləyir və lazım olduqda abunə sisteminin əlaqəli iş proseslərini başlatır.

Şübhə edən abunə xanımlar və mikroblar!

Bəzi tələblər

Bu yanaşmanı istifadə etmək üçün abunə sisteminiz:

  1. Sözügedən status atributları hadisə axtarış sistemində onsuz da davam edirmi və ya etdiklərindən əldə edilə bilərmi?
  2. Vəziyyət dəyişikliyi məlumatlarını yenidən yapışdırmaqla eyni şeyi etməyə imkan verir

Tədbir təchizatı sisteminiz:

  1. Sistem vəziyyətini etibarlı şəkildə təmsil edən və abunə sistemi tərəfindən tələb olunan bütün status xüsusiyyətlərini ehtiva edən bir sorğu xidməti təqdim edin
  2. Sorğu xidmətində müvafiq qeydləri tapmaq üçün hadisə axınına kifayət qədər məlumat daxil edin
  3. Sorğu xidmətindən bir "siyahı" ya da digər toplu sorğunu dəstəkləyin

Tətbiq etdiyiniz şübhəçi abunəçi aşağıdakıları daxil etməlidir:

  1. Sorğu xidmətini müəyyən bir məlumat dəsti üçün (hadisəyə əsaslanan) və ya məlumat dəstlərinin siyahısı üçün sorğu edə bilən dövlət qapısı ("buraxılmış" hadisələri tutmaq üçün başqa bir tetikleyici).
  2. Vəziyyət şlüzündə abunə sistemi ilə əlaqəli dəyişmədikləri təqdirdə qeydləri atan abunə sistemi kontekstindən domen müqayisəsi məntiqi olmalıdır.
  3. Hadisələrdən qeyd başına keçid çağırmaq üçün bir hadisə abunə tətbiqi
  4. Abunə sisteminin davamlılıq qatını dəyişikliklərlə yeniləmək bacarığı (eyni qeyd növbəti dəfə yenilənməməsi üçün), məsələn. B. bir depo vasitəsilə

Şübhə edən abunəçi, abunə sistemində iş proseslərinin başlanmasını da həyata keçirə bilər.

Yalnız bir vəziyyətdirsə, bununla əlaqəli proseslərə başlamaq üçün yeni proses qeydləri aparılaraq edilə bilər. Əks təqdirdə, məruz qalmış proses API-yə zəng etmək olar.

Bu iş proseslərini başlatarkən, ETL prosesi zamanı bir hadisə tetikleyicisi meydana gəldiyi təqdirdə proses başlanğıcını təkrarlamamaq üçün şlüzün kilidlənməsini də həyata keçirməlisiniz.

Müsbət nəticələr

Əvvəlki sistemlərin inteqrasiyası ilə əlaqəli bir çox problem var, xüsusən hadisə ilə əlaqəli və vəziyyətlə əlaqəli kontekstlər arasında keçid edilərkən. Bununla birlikdə, bu model, irsi (və ləkəli məlumatlar) istehlak edildiyi üçün hadisə baxımıyla əlaqəli texniki xərcləri minimuma endirməyimizə kömək edir.

Bu qanunauyğunluqla getməmişdən əvvəl, ciddi şəkildə tədbir yönümlü işlədik. Birbaşa düzəldilə bilən bir statusun təklif etdiyi dəstək seçimlərinə sürətli girişimiz olmadı. Bu nümunə ilə bu imkanları yenidən qazandıq. Miras sistemi qəbul etdiyi hadisələri "bəyənmədiyi" üçün pis davranırsa, hadisələrin axınını dəyişdirməkdən yükü sadəcə dəyişən vəziyyətə keçirdik.

Ümumiyyətlə abunə sistemini hadisələrlə birbaşa təmasdan qorumaq üçün boş bir birləşmə təbəqəsi də əlavə etdik. Bu, iştirak edən sistemin digər tetikleyicilərinin istiqamətini dəyişdirməyə imkan verir.

Məsələn, bir hadisə axınına keçməyə hazır olana qədər köhnə bir ETL ilkin vəziyyət üçün bir keçid tetikleyicisi kimi çıxış edə bilər. Bu da Interstitial Skeptical Abonenti müstəqil bir vahid kimi tətbiq edərək CQRS xidmətini çətinləşdirmədən.

Burada məlumat alimi və bunları idarə edən texniklər üçün bir tövsiyə var: abunə anbarında poliqlot əzmkarlığı tətbiq edərkən, mənalı bir iş prosesini əks etdirən məlumat dəyişikliklərini avtomatik olaraq süzəcək sənədlər mağazası da yarada bilərsiniz.

Bir tədbirin "atlandığı" və ya "qaçırıldığı" halda, zəng edərkən sadə bir dəstək kanalımız var. Bu qeyd barədə abunəçini yenidən xəbərdar edirik (hansı bir qeydin hadisəni buraxdığını bilsək) və ya bütün sistem üçün "əminik" sualını veririk.

Bunu hadisələrin axınına toxunmadan da edə bilərik. Bu, digər abunə tətbiqlərin dəstək fəaliyyətindən təsirlənmədiyi deməkdir.

Son fikirlər

Hər problem üçün deyil (və ya əksər problemlər üçün). Fəqət keçmiş məlumat axınlarında problem giderme dəstəyini minimuma endirərkən, hadisə qaynağının və CQRS-in boş birləşməsindən və digər aşağı axın üstünlüklərindən faydalanmaq üçün əla bir həlldir. Bu, inkişaf etdiricilərimizə yeni tətbiqetmələr yazmaq üçün daha çox vaxt sərf etməyə imkan verir və müştərilərimizə dəyər qatır.

Bu yazını bəyəndinizsə, xahiş edirəm aşağıdakı düyməni vurun və mənə bir neçə dəfə çırpın ki, daha çox insan görsün. Çox təşəkkür edirik!

Jonathan UCLA-nın tədqiqat informasiya sistemləri şöbəsinin memarlıq və əməliyyatlar üzrə direktor köməkçisidir. Stanford Universitetinin fizika fakültəsini bitirdikdən sonra 10 ildən çox müddətdir informasiya sistemlərinin memarlığı, iş proseslərinin məlumatlara əsaslanan təkmilləşdirilməsi və təşkilati idarəetmə sahələrində çalışmışdır. Həm də qeyri-kommersiya təşkilatları üçün məlumat həlləri qurmağa yönəlmiş Peach Pie Apps Workshop şirkətinin qurucusudur.