Slack-д ашигласан төслийг байршуулах аргачлал

Төслийн шинэ хувилбарыг үйлдвэрлэлд нэвтрүүлэхийн тулд байршуулах хурд болон шийдлийн найдвартай байдлын хооронд болгоомжтой тэнцвэртэй байх шаардлагатай. Slack нь хурдан давталт, богино санал хүсэлт, хэрэглэгчийн хүсэлтэд хурдан хариу өгөхийг үнэлдэг. Үүнээс гадна тус компанид аль болох үр бүтээлтэй ажиллахыг эрмэлздэг олон зуун програмистууд байдаг.

Slack-д ашигласан төслийг байршуулах аргачлал

Өнөөдөр бидний орчуулж буй материалын зохиогчид ийм үнэт зүйлийг баримтлахыг эрмэлзэж, нэгэн зэрэг хөгжиж буй компани төсөл хэрэгжүүлэх системээ байнга сайжруулж байх ёстой гэж хэлж байна. Компани нь ажлын үйл явцын ил тод байдал, найдвартай байдалд хөрөнгө оруулалт хийх шаардлагатай бөгөөд ингэснээр эдгээр үйл явц нь төслийн цар хүрээтэй тохирч байх ёстой. Энд бид Slack-д бий болсон ажлын урсгалын тухай, мөн компанийг өнөөдөр хэрэгжиж байгаа төслийн байршуулалтын системийг ашиглахад хүргэсэн зарим шийдвэрүүдийн талаар ярих болно.

Төслийг хэрэгжүүлэх үйл явц өнөөдөр хэрхэн ажилладаг

Slack дахь PR (татах хүсэлт) бүр кодын хяналтанд хамрагдах ёстой бөгөөд бүх шалгалтыг амжилттай давах ёстой. Зөвхөн эдгээр нөхцөл хангагдсаны дараа програмист өөрийн кодыг төслийн мастер салбар болгон нэгтгэж болно. Гэхдээ энэ кодыг Хойд Америкийн цагаар зөвхөн ажлын цагаар ажиллуулдаг. Үүний үр дүнд ажилчид маань ажлын байрандаа байгаа тул гэнэтийн аливаа асуудлыг шийдвэрлэхэд бүрэн бэлэн байна.

Өдөр бүр бид 12 орчим төлөвлөгөөт байршуулалт хийдэг. Байршуулах бүрийн явцад байршуулах ахлагчаар томилогдсон программист шинэ бүтээцийг үйлдвэрлэлд нэвтрүүлэх үүрэгтэй. Энэ нь угсралтыг үйлдвэрлэлд саадгүй оруулах боломжийг олгодог олон үе шаттай процесс юм. Энэ аргын ачаар бид алдааг бүх хэрэглэгчдэдээ нөлөөлөхөөс нь өмнө илрүүлж чадна. Хэрэв хэтэрхий олон алдаа байвал угсралтын суулгацыг буцааж болно. Хэрэв гарсны дараа тодорхой асуудал илэрсэн бол түүнийг засах аргыг хялбархан гаргаж болно.

Slack-д ашигласан төслийг байршуулах аргачлал
Төсөл хэрэгжүүлэхэд Slack-д ашигладаг Checkpoint системийн интерфейс

Шинэ хувилбарыг үйлдвэрлэлд нэвтрүүлэх үйл явцыг дөрвөн үе шатаас бүрдсэн гэж үзэж болно.

▍1. Хувилбарын салбар үүсгэх

Хувилбар бүр шинэ хувилбарын салбараас эхэлдэг бөгөөд энэ нь бидний Git-ийн түүхэн дэх цэг юм. Энэ нь танд хувилбарт шошго оноох боломжийг олгож, хувилбарыг үйлдвэрлэлд гаргахаар бэлтгэх явцад илэрсэн алдаануудыг шууд засах боломжтой газар юм.

▍2. Үе шатлалын орчинд байршуулах

Дараагийн алхам бол угсралтыг үе шатны серверүүд дээр байрлуулж, төслийн ерөнхий гүйцэтгэлийг автоматаар шалгах (утааны туршилт) хийх явдал юм. Тайзны орчин нь гадны урсгалыг хүлээн авдаггүй үйлдвэрлэлийн орчин юм. Энэ орчинд бид нэмэлт гарын авлагын туршилт хийдэг. Энэ нь өөрчлөгдсөн төсөл зөв ажиллаж байгаа гэсэн нэмэлт итгэлийг бидэнд өгдөг. Зөвхөн автоматжуулсан туршилтууд нь ийм итгэл үнэмшлийг хангахад хангалтгүй юм.

▍3. Туршилтын болон канарын орчинд байршуулах

Үйлдвэрлэлд байршуулах нь бидний дотоод Slack ажлын талбарт үйлчилдэг хостуудын багцаар төлөөлүүлсэн туршилтын орчноос эхэлдэг. Бид маш идэвхтэй Slack хэрэглэгчид учраас ийм аргыг хэрэглэснээр суулгацын эхэн үед олон алдааг олж илрүүлэхэд тусалсан. Системийн үндсэн функцууд эвдэрсэн эсэхийг шалгасны дараа угсралтыг канарын орчинд байрлуулна. Энэ нь үйлдвэрлэлийн хөдөлгөөний ойролцоогоор 2% -ийг бүрдүүлдэг системийг төлөөлдөг.

▍4. Үйлдвэрлэлд аажмаар гаргах

Хэрэв шинэ хувилбарын хяналтын үзүүлэлтүүд тогтвортой байвал төслийг канарын орчинд байрлуулсны дараа бид ямар ч гомдол хүлээж аваагүй бол бид үйлдвэрлэлийн серверүүдийг шинэ хувилбар руу аажмаар шилжүүлсээр байна. Байршуулах үйл явц нь 10%, 25%, 50%, 75%, 100% гэсэн үе шатуудад хуваагдана. Үүний үр дүнд бид үйлдвэрлэлийн урсгалыг системийн шинэ хувилбар руу аажмаар шилжүүлж чадна. Үүний зэрэгцээ ямар нэгэн гажиг илэрсэн тохиолдолд нөхцөл байдлыг судлах цаг хугацаа бидэнд байна.

▍Ашиглалтын явцад ямар нэг зүйл буруу болвол яах вэ?

Кодод өөрчлөлт оруулах нь үргэлж эрсдэлтэй байдаг. Гэхдээ шинэ хувилбарыг үйлдвэрлэлд нэвтрүүлэх үйл явцыг удирдаж, хяналтын үзүүлэлтүүдийг хянаж, код гаргах програмистуудын ажлыг зохицуулдаг сайн бэлтгэгдсэн "байршуулах удирдагчид" байсны ачаар бид үүнийг даван туулж байна.

Хэрэв ямар нэг зүйл үнэхээр буруу болвол бид асуудлыг аль болох эрт илрүүлэхийг хичээдэг. Бид асуудлыг судалж, алдаа үүсгэж буй PR-ыг олж, буцааж эргүүлж, сайтар дүн шинжилгээ хийж, шинэ бүтцийг бий болгодог. Үнэн, заримдаа төсөл үйлдвэрлэлд орох хүртэл асуудал анзаарагдахгүй байдаг. Ийм нөхцөлд хамгийн чухал нь үйлчилгээг сэргээх явдал юм. Тиймээс, бид асуудлыг судалж эхлэхээсээ өмнө тэр даруй өмнөх ажлын бүтэц рүү буцна.

Байршуулах системийн барилгын блокууд

Төслийг хэрэгжүүлэх тогтолцооны үндэс суурь болох технологиудыг харцгаая.

▍Шуурхай байршуулалт

Дээр дурдсан ажлын явц эргээд харахад тодорхой юм шиг санагдаж магадгүй. Гэхдээ манай байршуулах систем тэр дороо ийм болоогүй.

Компани нь хамаагүй жижиг байсан үед манай програм бүхэлдээ Amazon EC10-ийн 2 тохиолдол дээр ажиллах боломжтой байсан. Ийм нөхцөлд төслийг ашиглах нь бүх серверүүдийг хурдан синхрончлохын тулд rsync-ийг ашиглах гэсэн үг юм. Өмнө нь шинэ код нь үйлдвэрлэлээс ердөө ганцхан алхмын зайд байсан бөгөөд энэ нь үе шаттай орчиноор илэрхийлэгддэг. Чуулганыг ийм орчинд бүтээж, туршиж үзээд шууд үйлдвэрлэл рүүгээ явсан. Ийм системийг ойлгоход маш хялбар байсан бөгөөд ямар ч програмист өөрийн бичсэн кодыг хүссэн үедээ ашиглах боломжийг олгодог.

Гэвч манай үйлчлүүлэгчдийн тоо өсөхийн хэрээр төслийг дэмжихэд шаардагдах дэд бүтцийн цар хүрээ ч нэмэгдсэн. Удалгүй системийн байнгын өсөлтийг харгалзан серверүүд рүү шинэ код оруулахад суурилсан бидний байршуулах загвар ажлаа хийхээ больсон. Тухайлбал, шинэ сервер бүрийг нэмэх нь байршуулалтыг дуусгахад шаардагдах хугацааг нэмэгдүүлэх гэсэн үг юм. Rsync-ийн зэрэгцээ хэрэглээнд суурилсан стратеги хүртэл тодорхой хязгаарлалттай байдаг.

Хуучин системээс өөрөөр зохион бүтээсэн бүрэн зэрэгцээ байршуулах системд шилжсэнээр бид энэ асуудлыг шийдэж чадсан. Тухайлбал, одоо бид синхрончлолын скрипт ашиглан сервер рүү код илгээгээгүй. Одоо сервер бүр Консулын түлхүүрийн өөрчлөлтийг хянах замаар үүнийг хийх шаардлагатайг мэдэж, шинэ чуулганыг бие даан татаж авсан. Серверүүд кодыг зэрэгцүүлэн ачааллаа. Энэ нь системийн байнгын өсөлттэй орчинд ч өндөр хурдтай байршуулах боломжийг бидэнд олгосон.

Slack-д ашигласан төслийг байршуулах аргачлал
1. Үйлдвэрлэлийн серверүүд Консулын түлхүүрийг хянадаг. 2. Гол өөрчлөлтүүд нь серверүүдэд шинэ код татаж эхлэх хэрэгтэйг хэлдэг. 3. Серверүүд програмын кодтой tarball файлуудыг татаж авдаг

▍Атомын байршуулалт

Олон түвшний байршуулалтын системд хүрэхэд тусалсан өөр нэг шийдэл бол атомын байршуулалт байв.

Атомын байршуулалтыг ашиглахаас өмнө байршуулалт бүр нь олон тооны алдааны мессежийг үүсгэж болзошгүй. Баримт нь шинэ файлуудыг үйлдвэрлэлийн серверт хуулах үйл явц нь атом биш байсан. Үүний үр дүнд шинэ функцууд гэж нэрлэгддэг код нь функцууд нь өөрөө ажиллахаас өмнө боломжтой байсан богино хугацааны цонхтой болсон. Ийм кодыг дуудах үед энэ нь дотоод алдааг буцааж өгөхөд хүргэсэн. Энэ нь бүтэлгүйтсэн API хүсэлт болон эвдэрсэн вэб хуудсуудаар илэрдэг.

Энэ асуудал дээр ажилласан баг "халуун", "хүйтэн" лавлах гэсэн ойлголтыг нэвтрүүлснээр үүнийг шийдсэн. Халуун лавлах дахь код нь үйлдвэрлэлийн урсгалыг боловсруулах үүрэгтэй. Мөн "хүйтэн" лавлахуудад систем ажиллаж байх үед кодыг зөвхөн ашиглахад бэлтгэж байна. Байршуулах явцад шинэ кодыг ашиглагдаагүй хүйтэн лавлах руу хуулдаг. Дараа нь сервер дээр идэвхтэй процесс байхгүй үед шууд лавлах шилжүүлгийг гүйцэтгэдэг.

Slack-д ашигласан төслийг байршуулах аргачлал
1. Програмын кодыг "хүйтэн" лавлах руу задлах. 2. Системийг "халуун" болдог "хүйтэн" лавлах руу шилжүүлэх (атомын ажиллагаа)

Үр дүн: найдвартай байдалд анхаарлаа хандуулах

2018 онд төсөл маш хурдацтай тархаж, бүтээгдэхүүний тогтвортой байдалд сөргөөр нөлөөлж эхэлсэн. Бид маш их цаг хугацаа, хүчин чармайлт гаргасан маш дэвшилтэт байршуулах системтэй байсан. Бидний хийх ёстой зүйл бол байршуулах үйл явцаа дахин барьж, сайжруулах явдал байв. Бид дэлхийн өнцөг булан бүрт тасралтгүй харилцаа холбоог зохион байгуулж, чухал асуудлыг шийдвэрлэхэд ашигладаг нэлээд том компани болтлоо өссөн. Тиймээс найдвартай байдал нь бидний анхаарлын төвд байсан.

Бид шинэ Slack хувилбаруудыг байршуулах үйл явцыг илүү аюулгүй болгох шаардлагатай болсон. Энэ хэрэгцээ нь биднийг байршуулах системээ сайжруулахад хүргэсэн. Уг нь бид энэ сайжруулсан системийн талаар дээр ярьсан. Системийн гүнд бид хурдан бөгөөд атомын байршуулах технологийг үргэлжлүүлэн ашигласаар байна. Байршуулах арга зам өөрчлөгдсөн. Манай шинэ систем нь шинэ кодыг янз бүрийн түвшинд, өөр өөр орчинд аажмаар нэвтрүүлэх зорилготой юм. Бид одоо өмнөхөөсөө илүү дэвшилтэт тусламжийн хэрэгсэл болон системийн хяналтын хэрэгслийг ашиглаж байна. Энэ нь алдааг эцсийн хэрэглэгчдэд хүрэхээс өмнө олж засварлах боломжийг бидэнд олгодог.

Гэхдээ бид үүгээр зогсохгүй. Бид илүү дэвшилтэт туслах хэрэгсэл, ажлын автоматжуулалтын хэрэгслийг ашиглан энэ системийг байнга сайжруулж байна.

Эрхэм уншигчид! Таны ажиллаж байгаа газарт шинэ төслийн хувилбаруудыг байршуулах үйл явц хэрхэн явагддаг вэ?

Slack-д ашигласан төслийг байршуулах аргачлал

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх