Slack-də istifadə olunan layihə yerləşdirmə metodologiyası

Yeni layihə buraxılışını istehsala gətirmək yerləşdirmə sürəti və həllin etibarlılığı arasında diqqətli balans tələb edir. Slack, sürətli iterasiyaları, qısa geribildirim dövrlərini və istifadəçi sorğularına operativ cavabı qiymətləndirir. Bundan əlavə, şirkətdə mümkün qədər məhsuldar olmağa çalışan yüzlərlə proqramçı var.

Slack-də istifadə olunan layihə yerləşdirmə metodologiyası

Tərcüməsini bu gün dərc etdiyimiz materialın müəllifləri deyirlər ki, bu cür dəyərlərə sadiq qalmağa çalışan və eyni zamanda böyüyən bir şirkət öz layihələrinin yerləşdirilməsi sistemini daim təkmilləşdirməlidir. Şirkət bu proseslərin layihənin miqyasına uyğun olmasını təmin etmək üçün iş proseslərinin şəffaflığına və etibarlılığına sərmayə qoymalıdır. Burada Slack-də inkişaf etmiş iş axınları və şirkətin bu gün mövcud olan layihə yerləşdirmə sistemindən istifadə etməsinə səbəb olan bəzi qərarlar haqqında danışacağıq.

Layihənin yerləşdirilməsi prosesləri bu gün necə işləyir

Slack-də hər bir PR (çəkmə sorğusu) kod nəzərdən keçirilməli və bütün testlərdən uğurla keçməlidir. Yalnız bu şərtlər yerinə yetirildikdən sonra proqramçı öz kodunu layihənin master filialına birləşdirə bilər. Bununla belə, bu kod yalnız Şimali Amerika vaxtı ilə iş saatlarında yerləşdirilir. Nəticədə əməkdaşlarımız öz iş yerlərində olduqları üçün gözlənilməz problemləri həll etməyə tam hazırıq.

Hər gün təxminən 12 planlaşdırılmış yerləşdirmə həyata keçiririk. Hər yerləşdirmə zamanı yerləşdirmə rəhbəri kimi təyin edilmiş proqramçı yeni quruluşun istehsala daxil olması üçün məsuliyyət daşıyır. Bu, montajın rəvan şəkildə istehsala gətirilməsini təmin edən çoxmərhələli bir prosesdir. Bu yanaşma sayəsində səhvləri bütün istifadəçilərimizə təsir etməzdən əvvəl aşkar edə bilərik. Çox səhvlər varsa, montajın yerləşdirilməsi geri qaytarıla bilər. Sərbəst buraxıldıqdan sonra müəyyən bir problem aşkar edilərsə, bunun üçün asanlıqla düzəliş buraxıla bilər.

Slack-də istifadə olunan layihə yerləşdirmə metodologiyası
Layihələri yerləşdirmək üçün Slack-də istifadə olunan Checkpoint sisteminin interfeysi

Yeni buraxılışın istehsala yerləşdirilməsi prosesi dörd addımdan ibarət hesab edilə bilər.

▍1. Buraxılış filialının yaradılması

Hər buraxılış Git tariximizdə bir nöqtə olan yeni buraxılış filialı ilə başlayır. Bu, buraxılışa teqlər təyin etməyə imkan verir və buraxılışın istehsala buraxılması üçün hazırlanması prosesində aşkar edilmiş səhvlər üçün canlı düzəlişlər edə biləcəyiniz yer təmin edir.

▍2. Hazırlıq mühitində yerləşdirmə

Növbəti addım montajı quruluş serverlərində yerləşdirmək və layihənin ümumi performansı üçün avtomatik sınaq (tüstü testi) həyata keçirməkdir. Səhnə mühiti xarici trafik qəbul etməyən istehsal mühitidir. Bu mühitdə biz əlavə əl testi həyata keçiririk. Bu, dəyişdirilmiş layihənin düzgün işlədiyinə bizə əlavə əminlik verir. Bu inam səviyyəsini təmin etmək üçün təkcə avtomatlaşdırılmış testlər kifayət deyil.

▍3. Sınaq və kanareyka mühitlərində yerləşdirmə

İstehsala yerləşdirmə daxili Slack iş sahələrimizə xidmət edən hostlar dəsti ilə təmsil olunan sınaq mühiti ilə başlayır. Biz çox aktiv Slack istifadəçiləri olduğumuz üçün bu yanaşmadan istifadə etmək bizə yerləşdirmənin əvvəlində çoxlu səhvləri tutmağa kömək etdi. Sistemin əsas funksionallığının pozulmadığına əmin olduqdan sonra montaj kanarya mühitində yerləşdirilir. İstehsal trafikinin təxminən 2%-ni təşkil edən sistemləri təmsil edir.

▍4. Tədricən istehsala buraxılması

Yeni buraxılış üçün monitorinq göstəriciləri sabit olarsa və layihəni kanarya mühitində yerləşdirdikdən sonra heç bir şikayət almamışıqsa, istehsal serverlərini tədricən yeni buraxılışa köçürməyə davam edirik. Yerləşdirmə prosesi aşağıdakı mərhələlərə bölünür: 10%, 25%, 50%, 75% və 100%. Nəticədə, istehsal trafikini yavaş-yavaş sistemin yeni buraxılışına köçürə bilərik. Eyni zamanda, hər hansı anomaliya aşkar edilərsə, vəziyyəti araşdırmaq üçün vaxtımız var.

▍Yerləşdirmə zamanı nə isə səhv olarsa?

Koda dəyişikliklər etmək həmişə riskdir. Ancaq yeni buraxılışın istehsala gətirilməsi prosesini idarə edən, monitorinq göstəricilərinə nəzarət edən və kod buraxan proqramçıların işini koordinasiya edən yaxşı təlim keçmiş “yerləşdirmə liderlərinin” olması sayəsində bunun öhdəsindən gəlirik.

Həqiqətən bir şey səhv olarsa, problemi mümkün qədər tez aşkar etməyə çalışırıq. Problemi araşdırırıq, səhvlərə səbəb olan PR-ı tapırıq, onu geri qaytarırıq, hərtərəfli təhlil edirik və yeni bir quruluş yaradırıq. Düzdür, bəzən layihə istehsala keçənə qədər problem diqqətdən kənarda qalır. Belə bir vəziyyətdə ən başlıcası xidməti bərpa etməkdir. Buna görə də, problemi araşdırmağa başlamazdan əvvəl dərhal əvvəlki iş quruluşuna qayıdırıq.

Yerləşdirmə sisteminin tikinti blokları

Layihə yerləşdirmə sistemimizin əsasında duran texnologiyalara baxaq.

▍Sürətli yerləşdirmələr

Yuxarıda təsvir olunan iş prosesi, geriyə baxdıqda, bir qədər aydın görünə bilər. Lakin bizim yerləşdirmə sistemimiz dərhal belə olmadı.

Şirkət daha kiçik olanda bizim bütün tətbiqimiz 10 Amazon EC2 nümunəsində işləyə bilərdi. Layihəni bu vəziyyətdə yerləşdirmək bütün serverləri tez sinxronlaşdırmaq üçün rsync-dən istifadə etmək demək idi. Əvvəllər yeni kod istehsaldan yalnız bir addım uzaqda idi, səhnə mühiti ilə təmsil olunurdu. Montajlar belə bir mühitdə yaradılıb sınaqdan keçirildi və sonra birbaşa istehsala keçdi. Belə bir sistemi başa düşmək çox asan idi, o, istənilən proqramçıya yazdığı kodu istənilən vaxt yerləşdirməyə imkan verirdi.

Lakin müştərilərimizin sayı artdıqca layihəni dəstəkləmək üçün tələb olunan infrastrukturun miqyası da artdı. Tezliklə, sistemin davamlı böyüməsini nəzərə alaraq, serverlərə yeni kodun ötürülməsinə əsaslanan yerləşdirmə modelimiz artıq öz işini görmürdü. Məhz, hər bir yeni serverin əlavə edilməsi yerləşdirməni tamamlamaq üçün tələb olunan vaxtı artırmaq demək idi. Hətta rsync-in paralel istifadəsinə əsaslanan strategiyalar da müəyyən məhdudiyyətlərə malikdir.

Biz köhnə sistemdən fərqli dizayn edilmiş tamamilə paralel yerləşdirmə sisteminə keçərək bu problemi həll etdik. Daha doğrusu, indi sinxronizasiya skriptindən istifadə edərək serverlərə kod göndərmədik. İndi hər bir server müstəqil olaraq yeni məclisi endirdi, çünki konsul açarının dəyişməsinə nəzarət etməklə bunu etməli olduğunu bilərdi. Serverlər kodu paralel olaraq yüklədilər. Bu, bizə sistemin daimi böyüməsi şəraitində belə yüksək yerləşdirmə sürətini saxlamağa imkan verdi.

Slack-də istifadə olunan layihə yerləşdirmə metodologiyası
1. İstehsal serverləri Konsul açarına nəzarət edir. 2. Əsas dəyişikliklər, bu, serverlərə yeni kodu endirməyə başlamalı olduqlarını bildirir. 3. Serverlər proqram kodu ilə tarball fayllarını yükləyirlər

▍Atom yerləşdirmələri

Çox səviyyəli yerləşdirmə sisteminə çatmağımıza kömək edən başqa bir həll atom yerləşdirməsi idi.

Atom yerləşdirmələrindən istifadə etməzdən əvvəl hər bir yerləşdirmə çoxlu sayda səhv mesajı ilə nəticələnə bilər. Fakt budur ki, yeni faylların istehsal serverlərinə kopyalanması prosesi atomik deyildi. Bu, funksiyaların özləri mövcud olmamışdan əvvəl yeni funksiyaları çağıran kodun mövcud olduğu qısa bir zaman pəncərəsi ilə nəticələndi. Belə kod çağırılanda daxili xətaların qaytarılması ilə nəticələndi. Bu, uğursuz API sorğularında və pozulmuş veb səhifələrdə özünü göstərdi.

Bu problem üzərində işləyən komanda "isti" və "soyuq" kataloqlar anlayışını təqdim etməklə onu həll etdi. İsti kataloqdakı kod istehsal trafikinin işlənməsi üçün cavabdehdir. Və "soyuq" qovluqlarda, sistem işləyərkən kod yalnız istifadə üçün hazırlanır. Yerləşdirmə zamanı yeni kod istifadə olunmamış soyuq qovluğa kopyalanır. Sonra, serverdə aktiv proseslər olmadıqda, ani kataloq keçidi həyata keçirilir.

Slack-də istifadə olunan layihə yerləşdirmə metodologiyası
1. Tətbiq kodunun “soyuq” kataloqa açılması. 2. Sistemin “isti” halına gələn “soyuq” kataloqa keçirilməsi (atom əməliyyatı)

Nəticələr: diqqətin etibarlılığa keçməsi

2018-ci ildə layihə elə bir miqyasda böyüdü ki, çox sürətli yerləşdirmə məhsulun sabitliyinə zərər verməyə başladı. Çox vaxt və səy sərf etdiyimiz çox inkişaf etmiş yerləşdirmə sistemimiz var idi. Bizə lazım olan tək şey yerləşdirmə proseslərimizi yenidən qurmaq və təkmilləşdirmək idi. Biz kifayət qədər böyük şirkətə çevrilmişik, onun inkişafları bütün dünyada fasiləsiz rabitənin təşkili və mühüm problemlərin həlli üçün istifadə olunur. Buna görə də etibarlılıq bizim diqqət mərkəzimizə çevrildi.

Yeni Slack relizlərinin yerləşdirilməsi prosesini daha təhlükəsiz etməli olduq. Bu ehtiyac bizi yerləşdirmə sistemimizi təkmilləşdirməyə vadar etdi. Əslində bu təkmilləşdirilmiş sistemi yuxarıda müzakirə etdik. Sistemin dərinliklərində biz sürətli və atom yerləşdirmə texnologiyalarından istifadə etməyə davam edirik. Yerləşdirmə üsulu dəyişdi. Yeni sistemimiz tədricən müxtəlif səviyyələrdə, müxtəlif mühitlərdə yeni kodu yerləşdirmək üçün nəzərdə tutulub. Biz indi əvvəlkindən daha təkmil dəstək alətləri və sistem monitorinq alətlərindən istifadə edirik. Bu, bizə səhvləri son istifadəçiyə çatmaq şansından çox əvvəl tutmaq və düzəltmək imkanı verir.

Amma biz bununla dayanmaq fikrində deyilik. Biz bu sistemi daim təkmilləşdiririk, daha təkmil köməkçi vasitələrdən və iş avtomatlaşdırma vasitələrindən istifadə edirik.

Hörmətli oxucular! Yeni layihə buraxılışlarının yerləşdirilməsi prosesi işlədiyiniz yerdə necə işləyir?

Slack-də istifadə olunan layihə yerləşdirmə metodologiyası

Mənbə: www.habr.com

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