

Discover more from Tural Əsgər
Kod yazmaq və software yaratmaq fərqli şeylərdir
Kod yazmaq üçün xeyli resurs var, lakin bütöv software yaratmaq haqqında isə yox dərəcəsindədir.
Dokumentasiyanı oxuyaraq müəyyən proqramlaşdırma dilinin və texnologiyanın necə işlədiyini başda müəyyən qədər öyrənə bilərsən.
Amma onların milyonlarla istifadəçi tərəfindən istifadə edilən proqramda tətbiqi ilə bağlı məhdud sayda informasiyaya rast gəlirsən.
"React"ın necə öyrənilməsi ilə bağlı çoxlu "Reacta necə başlamalı" başlıqlı məqalələr tapa bilərsən, lakin irimiqyaslı bir proqramın strukturunu necə qurmaqla bağlı çox az məlumat tapa biləcəksən.
Express freymvörkü haqqında yüzlərlə resurs var, lakin onların hamısı eyni MVC strukturuna fokuslanıb.
Serverless istifadə edərək hansısa kiçik problemi həll etməklə bağlı çoxlu məqalə tapa bilərsən, lakin bütöv “cloud application” yaratmaqla bağlı demək olar ki, yox kimidir.
Beləliklə ən yaxşı arxitekturanı axtarıb tapmaq hər şirkətin öz üzərinə düşür.
Hər problem bir-birindən bu və ya digər şəkildə fərqləndiyinə görə bir şirkət üçün işləyən həll, digəri üçün işə yaramaya bilir.
Bütün bunlara baxmayaraq hər bir texniki komandanın üzləşdiyi ortaq problemlər var ki, bunlar arasında scalability, code structure, state management, abstraction və s. var.
Təəssüf ki, hansısa səbəbdən biz bütün bu sadaladıqlarıma bir-bir toxunaraq sonda hamısını bir yerə cəmləyib bütöv bir “software”nin necə ərsəyə gətirildiyini izah edən resursa demək olar ki, rast gəlmirik.
Dövriyyəsi milyardlarla olan kompüter istehsalçısı şirkət 18 ay müddətində yazılan proqramı tullamalı oldu.
Başda sistem bir-biri ilə fərqli və qarışıq formada əlaqə yaradan ayrı-ayrı monolit proqramlardan - sales, CRM, catalog, orders, shipment, returns və s. ibarət idi.
ASP.NET Web Forms ilə yazılan bu sistem 15 il idi ki, prodakşnda idi və il ərzində milyardlarla dollar dövriyyə edirdi.
Hətta “Black friday” vaxtı bir günə milyonlarla sifarişi həyata keçirirdi.
Bütün modullar bir-biri ilə çox qarışıq formada əlaqə yaratdığına görə hansısa kiçik dəyişikliyi belə etmək mümkünsüz idi.
Həmin dövrdə trend olan “service-oriented approach” və “microservices” haqqında bəh-bəhli bloqlardan məlumat əldə edən şirkət qərara gəlir ki, yeni “software” yaratmağın vaxtı gəlib.
Çox çək-çevirdən sonra “Netflix-oriented architecture” şirkətin üzərində dayandığı yanaşma oldu.
Yəni, sorğu bir nöqtədən daxil olur və çoxlu kiçik servislər hərəsi öz işini görür.
Nəzəriyyədə hər şey əla görünürdü.
18 ay qızğın işin sonunda hamı bir araya gəlib servisləri bir yerə yığıb proqramı işə saldılar və sifariş yerləşdirməyə çalışdılar.
Proqram ümumiyyətlə işləmirdi.
Bu necə ola bilərdi?
Bu mikroservis arxitekturasını hazırlamağa 18 ay vaxt sərf olunmuşdu, baxmayaraq ki, 18 ay və mikro sözləri bir-birinə çox yaddır.
200-ə yaxın servis var idi.
Servislər biri o birini çağırırdı, o servis də başqa birini, o isə öz növbəsində başqa birini və bu minvalla davam edirdi.
Ən yaxşı halda bir sorğunun 150 ms çəkdiyini götürsək və 200 * 150ms = 30 saniyə, anormal da olsa 30 saniyəyə proqram cavab verməli idi.
Lakin bu belə baş vermirdi, çünki servislər bir-birindən asılı idi və ehtimal nəzəriyyəsinə görə bütün servislərin eyni anda düzgün işləməsi mümkünsüz kimi idi.
Ona görə də 1 servisdə belə problem olsa, bütün sistem işləmirdi.
Problem onda idi ki, hər bir developerin notbukunda öz yazdığı servislər çox yaxşı işləyirdi.
Çünki onlar üzərində işlədiyi servisin asılı olduğu digər servislərin fake formasını düzəldib ona sorğu göndərib cavabı alıb işlərinə davam edirdilər.
Reallıqda isə bir servisin asılı olduğu digər servis işləməyə və beləliklə ondan asılı olan servis sonsuza qədər gözləyə bilər.
Təbii ki, burada dövrəqırıcı, SLA və s. istifadə olunmalı idi.
Bu hekayə mənə köhnə Azərbaycan filmlərindən bir epizodu xatırlatdı. 🙂
— Başa düşdün?
— Ayrı-ayrılıqda hə, amma bir yerdə yox.
Beləliklə, hər möhtəşəm görünən həll bütün hallarda keçərli olmaya bilər.
Bir hal üçün ideal olan yanaşma, digər hal üçün ümumiyyətlə işləməyə bilər.
Hər yeni yanaşmanı dərinliyini bilmədən dəbdədir deyə kor-koranə tətbiq etmək isə sonda bu cür fəlakətlə nəticələnə bilər.
Sizə maraqlı gəldisə, dostlarınıza da maraqlı gələ bilər.
Bülleteni onlarla paylaşsanız, məni sevindirmiş olarsınız.
Haqqımda öyrənmək və əlaqə saxlamaq üçün 👉 www.turalasgar.com
Kod yazmaq və software yaratmaq fərqli şeylərdir
Məqalə üçün çox sağolun. Düşünürəm ki, rəy yazıb təşəkkür etmək növbəti məqalələr üçün sizə motivasiya olacaq. Uğurlar.
👍