Fəsil 02 · 6 dəq oxu

Quality attribute-lər hər şeyi müəyyən edir

Quality attribute-lər hər şeyi müəyyən edir

sistemin nə etdiyini deyir. isə bunu nə qədər yaxşı etdiyini, hansı şəraitdə etdiyini və bu şərait pozulanda nə baş verdiyini deyir. Eyni feature-lərə malik iki sistem architecture baxımından kökündən fərqli ola bilər, çünki fərqli keyfiyyətləri prioritetləşdirirlər.

Bu fəsildə geniş yayılmış attribute-lər adlandırılır, onları konkretləşdirməyin yolu göstərilir və niyə mütləq sıralanmalı olduqları izah edilir.

Adi şübhəlilər

AttributeCavab verdiyi sual
PerformanceTək bir request nə qədər tez tamamlanır və saniyədə nə qədər iş görə bilərik?
Load on dəfə artanda cost və ilə nə baş verir?
Sistem vaxtın hansı hissəsində istifadəyə yararlıdır və nə qədər davam edir?
Reliability daxil olmaqla, nəticələri ardıcıl olaraq düzgün verirmi?
SecurityKim nə edə bilər və biz bunu haradan bilirik?
MaintainabilityNövbəti dəyişiklik, eləcə də yüzüncü dəyişiklik nəyə başa gəlir?
"Merge olundu"dan "production-dadır"a qədər nə qədər vaxt keçir və bu nə dərəcədə risklidir?
Nəsə səhv gedəndə nəyin və niyə baş verdiyini nə qədər tez anlaya bilirik?
TestabilityProduction-a etmədən əminlik qazana bilərikmi?
Costİşlətmək nəyə başa gəlir və istifadə artdıqca bu necə dəyişir?

Siyahı tam deyil. , portability, accessibility və konkret domain-lərdə əhəmiyyət daşıyır. Məqsəd ortaq lüğətə malik olmaqdır ki, söhbət "yaxşı olmalıdır" əvəzinə bu sözlər üzərində getsin.

Qeyri-müəyyən attribute-lər faydasızdır

"Sistem olmalıdır" cümləsi nə design üçün əsas ola bilər, nə test oluna bilər, nə də mübahisə mövzusu ola bilər. Standart həll sabit formaya malik -dur:

  • Source: şərti kim və ya nə trigger edir
  • Stimulus: nə baş verir
  • Environment: hansı şəraitdə (normal load, peak, degraded)
  • : sistemin hansı hissəsi təsirlənir
  • Response: sistem nə etməlidir
  • Measure: uğurlu olduğunu haradan biləcəyik

Bu formada yazılmış scenario-su belə görünür:

Məhsulun launch-ının ilk saatında (environment) web client-lərdən (source) gələn traffic catalogue service-ə () qarşı saniyədə 500 request-dən 5 000 request-ə yüksəlir (stimulus). Service request-lərə xidmət göstərməyə davam edir (response), 300 ms-dən aşağı qalır və heç bir manual müdaxilə tələb olunmur (measure).

İndi əleyhinə design edəcəyiniz, load test aparacağınız və kimsə onu pozacaq dəyişiklik təklif edəndə göstərə biləcəyiniz konkret bir şey var.

Onları mütləq sıralamalısınız

Hər attribute arzuolunandır. Məhz buna görə onları sadəcə sadalamaq kifayət deyil. Architecture sıradan doğur.

Faydalı məşq: məhsula sahib olan insanları bir otağa yığın və ilk beşini sıralamağa məcbur edin. Qiymətləndirmək yox, sıralamaq. " consistency-dən üstündür" — bu, qərardır. "Hər ikisi vacibdir" — bu, məsuliyyətdən qaçmaqdır.

Dəfələrlə qarşılaşacağınız bəzi ziddiyyətlər:

  • Consistency vs. . Network partition zamanı hər ikisinə sahib ola bilməzsiniz. teoremi tez-tez yanlış sitat gətirilir, amma praktik dərs qüvvədədir: hər data set üçün işlər pis gedəndə hansından imtina edəcəyinizi qərarlaşdırın.
  • Performance vs. maintainability. , denormalized cədvəllər və əllə tune edilmiş query path-lər sistemi həm daha sürətli, həm də dəyişməsi daha çətin edir.
  • Security vs. . pipeline-dakı hər gate həm security control-dur, həm də gecikməsidir.
  • Flexibility vs. simplicity. Configuration, plugin nöqtələri və abstraction layer-lər heç vaxt gəlməyə bilən gələcəklərə hazırlaşır və bu gün xərc çıxarır.

Prioritetlər haradan gəlir

Əvvəlki bölmə attribute-ləri sıralamağı tələb etdi. Təbii sual yaranır: hansı əsasla? Cavab budur ki, sıranı architect öz zövqünə görə seçmir. Sıra məhsulun öz vəziyyətindən çıxır və onu tapmaq üçün dörd sual vermək kifayətdir.

1. Pul nədən gəlir və nəyi itirmək olmaz? Bu, biznes modeli sualıdır. Payment şirkəti üçün itmiş bir write itmiş puldur, ona görə consistency və reliability siyahının başındadır. Sosial şəbəkə üçün isə itmiş bir like-ı heç kim fərq etməz, amma feed yavaş açılsa istifadəçilər gedər. Orada performance və öndədir.

2. Ən pis gün necə görünür? Özünüzdən soruşun: hansı xəbərlərə düşərdi? Bank üçün bu, müştərinin yanlış balans görməsidir. Bilet satışı üçün satış açılan dəqiqədə saytın çökməsidir. Cavab ən çox qorunmalı olan attribute-ü birbaşa göstərir.

3. Sistem nə qədər böyüyəcək? Əlli əməkdaşın istifadə etdiyi daxili alət üçün demək olar ki, vacib deyil, maintainability və cost isə vacibdir. Milyonlarla istifadəçi gözləyən məhsul üçün yuxarı qalxır. Burada bir xəbərdarlıq var: bu gün on istifadəçiniz varsa, on milyon üçün design etmək, gəlməyə bilən gələcək üçün indi pul ödəmək deməkdir.

4. Sistemi kim quracaq və kim işlədəcək? İki nəfərlik komanda mürəkkəb multi-region sistemi gecə saat üçdə təmir edə bilməz. Belə komanda üçün sadəlik və asan operate edilmə siyahıda yuxarı qalxır. Yalnız iki nəfərin başa düşdüyü sistem diaqram nə deyirsə desin, highly available deyil.

Eyni "sifariş vermək" feature-i bu suallara verilən cavablardan asılı olaraq fərqli sıra alır:

Online bankDaxili inventory alətiBilet satışı platforması
1-ci yerReliabilityMaintainability
2-ci yerSecurityCost
3-cü yerPerformance

Prioritet bu dörd mənbədən birinə bağlana bilmirsə, o, çox güman ki, kiminsə şəxsi seçimidir və onu yenidən müzakirə etmək lazımdır.

Architecture "-ility"lərin təqibi kimi

çoxunun ingilis dilində adı -ility ilə bitir: , , maintainability, . Ona görə mühəndislər onları qısaca "-ility"lər adlandırır.

Bölmənin əsas fikri sadədir: architecture-dakı hər struktur hansısa -ility-ni yaxşılaşdırmaq üçün oradadır. Belə struktura tactic deyilir, yəni konkret bir keyfiyyət məqsədinə çatmağın konkret vasitəsi. Bina ilə müqayisə etmək olar: qalın divar istiliyi saxlamaq üçün, geniş qapı əlçatanlıq üçün, yanğın pilləkəni təhlükəsizlik üçündür. Heç biri təsadüfən orada deyil.

StrukturHansı attribute-ə xidmət edirNecə kömək edirQiyməti
Bir nüsxə xarab olanda digəri cavab verirƏlavə xərc, nüsxələri sinxron saxlamaq çətinliyi
PerformanceTez-tez istənən cavab yaxında saxlanırKöhnəlmiş data riski
Modular boundary-lərMaintainabilityDəyişiklik bir module-un içində qalırƏvvəlcədən düşünülmüş dizayn tələb edir
QueueReliabilityConsumer dayananda producer işləməyə davam edirDaha çox hərəkətli hissə, nəticə gec görünür

Son sütun vacibdir: hər tactic bir attribute-ü yaxşılaşdırır və adətən başqasını pisləşdirir. Əvvəlki bölmələrdəki ziddiyyətlər də buradan gəlir.

Bu modeli iki istiqamətdə işlətmək olar:

  • Yuxarıdan aşağı. Sıralanmış prioritet siyahınız var. Siyahının başındakı attribute-lər üçün tactic-lər seçirsiniz. birinci yerdədirsə, və haqqında düşünürsünüz.
  • Aşağıdan yuxarı. Kimsə yeni struktur təklif edir. Soruşursunuz: bu hansı attribute-ə xidmət edir və o attribute bizim siyahımızda yuxarıdadırmı?

İkinci sualın cavabı yoxdursa, bu, xəbərdarlıq işarəsidir. Gündə yüz mesaj göndərən sistemə Kafka əlavə etmək və ya üç nəfərlik komanda üçün on qurmaq "böyük şirkətlər belə edir" deyə seçilirsə, bu, : formanı təkrarlamaq, amma onu lazımlı edən problemin özü olmadan.

Bu düşüncə tərzi kitabın ikinci yarısında dəfələrlə qayıdır. Fəsil 6 attribute-ləri capacity rəqəmlərinə, Fəsil 7 SLO-lara çevirir. Fəsil 9 və 11 isə tanış komponentləri və pattern-ləri məhz hansı attribute-ə xidmət etdikləri sualı ilə nəzərdən keçirir.

Hazırkı sisteminiz haqqında suallar

  1. Sisteminizin ən vacib davranışı üçün bir yazın. Sabah test oluna bilərmi?
  2. İlk beş attribute-nizi sıralayın. Hazırkı architecture sizin sıranızla razılaşırmı?
  3. Sisteminizdə heç bir attribute ilə əlaqələndirə bilmədiyiniz bir struktur tapın. O niyə oradadır?