Bulutli mahalliy ilovalarni yaratish uchun 5 ta umumiy ma'no tamoyillari

"Bulutli mahalliy" yoki oddiygina "bulutli" ilovalar bulutli infratuzilmalarda ishlash uchun maxsus yaratilgan. Ular odatda konteynerlarga qadoqlangan bo'shashmasdan bog'langan mikroservislar to'plami sifatida qurilgan bo'lib, ular o'z navbatida bulut platformasi tomonidan boshqariladi. Bunday ilovalar sukut bo'yicha nosozliklar uchun tayyorlanadi, ya'ni ular infratuzilma darajasidagi jiddiy nosozliklar bo'lsa ham ishonchli ishlaydi va miqyosda ishlaydi. Tanganing boshqa tomoni - bulutli platforma konteyner ilovalarini avtomatik ravishda boshqarish imkoniyatiga ega bo'lish uchun qo'yadigan cheklovlar (shartnomalar) to'plami.

Bulutli mahalliy ilovalarni yaratish uchun 5 ta umumiy ma'no tamoyillari

Bulutli ilovalarga o'tish zarurati va muhimligini to'liq anglab yetgan bo'lsa-da, ko'plab tashkilotlar hali ham qaerdan boshlashni bilishmaydi. Ushbu postda biz konteynerlashtirilgan ilovalarni ishlab chiqishda amal qilinsa, bulutli platformalar salohiyatini ro‘yobga chiqarishga va AT infratuzilmasida jiddiy nosozliklar yuz bergan taqdirda ham ilovalarning ishonchli ishlashi va masshtablanishiga erishish imkonini beradigan bir qator tamoyillarni ko‘rib chiqamiz. Daraja. Bu erda keltirilgan tamoyillarning yakuniy maqsadi Kubernetes kabi bulutli platformalar tomonidan avtomatik ravishda boshqarilishi mumkin bo'lgan ilovalarni qanday yaratishni o'rganishdir.

Dasturiy ta'minotni loyihalash tamoyillari

Dasturlash dunyosida printsiplar dasturiy ta'minotni ishlab chiqishda kuzatilishi kerak bo'lgan juda umumiy qoidalarga ishora qiladi. Ulardan istalgan dasturlash tili bilan ishlashda foydalanish mumkin. Har bir tamoyilning o'z maqsadlari bor, ularga erishish vositalari odatda shablon va amaliyotdir. Bundan tashqari, yuqori sifatli dasturiy ta'minotni yaratish uchun bir qator asosiy tamoyillar mavjud bo'lib, ularning barchasi boshqalardan kelib chiqadi. Bu erda asosiy printsiplarning ba'zi misollari keltirilgan:

  • Kiss (Oddiy, ahmoqona tuting) - uni murakkablashtirmang;
  • QURUQ (O'zingizni takrorlamang) - o'zingizni takrorlamang;
  • YAGNI (Sizga kerak bo'lmaydi) - darhol kerak bo'lmagan narsani yaratmang;
  • SoC Xavotirlarni ajratish - mas'uliyatni taqsimlash.

Ko'rib turganingizdek, bu tamoyillar hech qanday aniq qoidalarni o'rnatmaydi, lekin ko'plab ishlab chiquvchilar tomonidan baham ko'rilgan va ular muntazam ravishda murojaat qiladigan amaliy tajribaga asoslangan umumiy aqliy mulohazalar toifasiga kiradi.
Bundan tashqari, mavjud SOLID - Robert Martin tomonidan ishlab chiqilgan ob'ektga yo'naltirilgan dasturlash va dizaynning dastlabki beshta tamoyillari to'plami. SOLID keng, ochiq, bir-birini to'ldiruvchi tamoyillarni o'z ichiga oladi, ular birgalikda qo'llanilganda yaxshiroq dasturiy ta'minot tizimlarini yaratishga va ularni uzoq muddatda yaxshiroq saqlashga yordam beradi.

SOLID tamoyillari OOP sohasiga tegishli bo'lib, sinflar, interfeyslar va meros kabi tushunchalar va tushunchalar tilida tuzilgan. Analogiya bo'yicha, rivojlanish tamoyillari bulutli ilovalar uchun ham ishlab chiqilishi mumkin, bu erda faqat asosiy element sinf emas, balki konteyner bo'ladi. Ushbu tamoyillarga rioya qilish orqali siz Kubernetes kabi bulut platformalarining maqsad va vazifalariga yaxshiroq javob beradigan konteynerlashtirilgan ilovalarni yaratishingiz mumkin.

Bulutli konteynerlar: Red Hat yondashuvi

Bugungi kunda deyarli har qanday dastur konteynerlarga nisbatan osonlik bilan qadoqlanishi mumkin. Ammo ilovalarni Kubernetes kabi bulutli platformada samarali avtomatlashtirish va tartibga solish uchun qo'shimcha harakat talab etiladi.
Quyida keltirilgan fikrlarning asosi metodologiya edi O'n ikki faktorli ilova va veb-ilovalarni yaratishning turli jihatlari bo'yicha boshqa ko'plab ishlar, manba kodini boshqarishdan tortib modellarni masshtablashgacha. Ta'riflangan tamoyillar faqat mikroservislar ustiga qurilgan va Kubernetes kabi bulutli platformalar uchun mo'ljallangan konteynerli ilovalarni ishlab chiqishga taalluqlidir. Bizning muhokamamizdagi asosiy element konteyner tasviridir va maqsadli konteyner ish vaqti konteyner orkestratsiyasi platformasidir. Taklif etilayotgan tamoyillarning maqsadi ko'pgina orkestr platformalarida rejalashtirish, masshtablash va monitoring vazifalarini avtomatlashtirish mumkin bo'lgan konteynerlarni yaratishdir. Printsiplar alohida tartibda taqdim etilmaydi.

Yagona tashvish printsipi (SCP)

Bu tamoyil ko'p jihatdan Yagona javobgarlik printsipiga o'xshaydi. SRP), SOLID to'plamining bir qismi bo'lib, har bir ob'ekt bitta javobgarlikka ega bo'lishi kerakligini va bu mas'uliyat sinfga to'liq qamrab olinishi kerakligini bildiradi. SRPning mohiyati shundaki, har bir mas'uliyat o'zgarish uchun sababdir va sinf o'zgarish uchun bitta va faqat bitta sababga ega bo'lishi kerak.

SCPda biz OOP sinfiga nisbatan konteynerning yuqori darajadagi mavhumligini va kengroq maqsadini ko'rsatish uchun "mas'uliyat" so'zi o'rniga "tashvish" so'zidan foydalanamiz. Va agar SRP ning maqsadi o'zgarish uchun faqat bitta sababga ega bo'lsa, SCP ortida konteynerlarni qayta ishlatish va almashtirish qobiliyatini kengaytirish istagi bor. SRP ga rioya qilish va bitta muammoni hal qiladigan va uni funktsional jihatdan to'liq bajaradigan konteyner yaratish orqali siz ushbu konteyner tasvirini turli dastur kontekstlarida qayta ishlatish imkoniyatini oshirasiz.

SCP printsipi shuni ko'rsatadiki, har bir konteyner bitta muammoni hal qilishi va uni yaxshi bajarishi kerak. Bundan tashqari, konteyner dunyosidagi SCP ga OOP dunyosidagi SRPga qaraganda osonroq erishish mumkin, chunki konteynerlar odatda bitta jarayonni boshqaradi va ko'pincha bu jarayon bitta vazifani hal qiladi.

Agar konteyner mikroservisi bir vaqtning o'zida bir nechta muammolarni hal qilishi kerak bo'lsa, uni bitta vazifali konteynerlarga bo'lish va yonbosh va init konteyner shablonlari yordamida bitta pod (konteyner platformasini joylashtirish birligi) ichida birlashtirish mumkin. Bunga qo'shimcha ravishda, SCP eski konteynerni (masalan, veb-server yoki xabar brokeri) bir xil muammoni hal qiladigan, lekin kengaytirilgan funksional yoki miqyosli yangisiga almashtirishni osonlashtiradi.

Bulutli mahalliy ilovalarni yaratish uchun 5 ta umumiy ma'no tamoyillari

Yuqori kuzatuvchanlik printsipi (HOP)

Konteynerlar ilovalarni paketlash va ishga tushirishning yagona usuli sifatida ishlatilsa, ilovalarning o'zi qora quti sifatida ko'riladi. Biroq, agar bu bulutli konteynerlar bo'lsa, ular konteynerlarning sog'lig'ini kuzatish va kerak bo'lganda tegishli choralarni ko'rish uchun ish vaqtiga maxsus API-larni taqdim etishlari kerak. Busiz konteynerlarni yangilash va ularning hayot aylanishini boshqarishni avtomatlashtirishni unifikatsiya qilish mumkin bo'lmaydi, bu esa, o'z navbatida, dasturiy ta'minot tizimining barqarorligi va qulayligini yomonlashtiradi.

Bulutli mahalliy ilovalarni yaratish uchun 5 ta umumiy ma'no tamoyillari
Amalda, konteynerli dastur, hech bo'lmaganda, har xil turdagi sog'liqni tekshirish uchun APIga ega bo'lishi kerak: tiriklik testlari va tayyorlik testlari. Agar ilova ko'proq narsani talab qilsa, u o'z holatini kuzatishning boshqa vositalarini taqdim etishi kerak. Masalan, Fluentd, Logstash va boshqa shunga o'xshash vositalardan foydalangan holda jurnallarni yig'ish uchun STDERR va STDOUT orqali muhim voqealarni qayd qilish. Shuningdek, OpenTracing, Prometey va boshqalar kabi kuzatuv va o'lchovlar to'plami kutubxonalari bilan integratsiya.

Umuman olganda, dastur hali ham qora quti sifatida ko'rib chiqilishi mumkin, ammo uni eng yaxshi tarzda kuzatish va boshqarish uchun platforma kerak bo'lgan barcha API-lar bilan ta'minlanishi kerak.

Hayot aylanishiga muvofiqlik printsipi (LCP)

LCP HOP ning antitezidir. HOP konteyner o'qish API-larini platformaga ko'rsatishi kerakligini ta'kidlagan bo'lsa-da, LCP ilovadan platformadan ma'lumotlarni qabul qila olishini talab qiladi. Bundan tashqari, konteyner nafaqat hodisalarni qabul qilishi, balki moslashishi, boshqacha aytganda, ularga munosabat bildirishi kerak. Platformani yozish APIlari bilan ta'minlash talabi sifatida ko'rib chiqilishi mumkin bo'lgan printsipning nomi shundan.

Bulutli mahalliy ilovalarni yaratish uchun 5 ta umumiy ma'no tamoyillari
Platformalarda konteynerning hayot aylanishini boshqarishga yordam beradigan turli xil tadbirlar mavjud. Ammo ulardan qaysi birini idrok etishi va qanday munosabatda bo'lishi ilovaning o'ziga bog'liq.

Ba'zi voqealar boshqalardan ko'ra muhimroq ekanligi aniq. Misol uchun, agar dastur ishdan chiqishga toqat qilmasa, u signalni qabul qilishi kerak: SIGTERMdan keyin keladigan signalni ushlash uchun (SIGTERM) xabarlarni tugatish va uni tugatish tartibini imkon qadar tezroq boshlash: o'ldirish (SIGKILL).

Bundan tashqari, PostStart va PreStop kabi hodisalar ilovaning hayot aylanishi uchun muhim bo'lishi mumkin. Misol uchun, dasturni ishga tushirgandan so'ng, so'rovlarga javob berishdan oldin u biroz isinish vaqtini talab qilishi mumkin. Yoki dastur yopilganda resurslarni maxsus tarzda chiqarishi kerak.

Tasvirning o'zgarmasligi printsipi (IIP)

Umuman olganda, konteynerlashtirilgan ilovalar, hatto ular turli muhitlarda ishga tushirilgan bo'lsa ham, qurilganidan keyin o'zgarishsiz qolishi kerak. Bu har bir muhit uchun noyob konteynerlarni o'zgartirish yoki yaratish o'rniga, ish vaqtida ma'lumotlarni saqlashni tashqi ko'rinishga keltirish (boshqacha aytganda, buning uchun tashqi vositalardan foydalanish) va tashqi, ish vaqtiga xos konfiguratsiyalarga tayanishni talab qiladi. Ilovadagi har qanday o'zgarishlardan so'ng, konteyner tasviri qayta tiklanishi va ishlatiladigan barcha muhitlarga joylashtirilishi kerak. Aytgancha, AT tizimlarini boshqarishda serverlar va infratuzilmaning o'zgarmasligi printsipi sifatida tanilgan shunga o'xshash printsip qo'llaniladi.

IIP ning maqsadi turli xil ish vaqti muhitlari uchun alohida konteyner tasvirlarini yaratishni oldini olish va hamma joyda bir xil tasvirni tegishli muhitga xos konfiguratsiya bilan birga ishlatishdir. Ushbu tamoyilga rioya qilish bulutli tizimlarni avtomatlashtirish nuqtai nazaridan ilovalar yangilanishlarini orqaga qaytarish va oldinga siljish kabi muhim amaliyotlarni amalga oshirish imkonini beradi.

Bulutli mahalliy ilovalarni yaratish uchun 5 ta umumiy ma'no tamoyillari

Jarayonni bir marta ishlatish printsipi (PDP)

Idishning eng muhim xususiyatlaridan biri uning vaqtinchalikligidir: konteynerning nusxasini yaratish oson va yo'q qilish oson, shuning uchun uni istalgan vaqtda boshqa nusxa bilan osongina almashtirish mumkin. Bunday almashtirish uchun juda ko'p sabablar bo'lishi mumkin: xizmat ko'rsatishga yaroqlilik testining muvaffaqiyatsizligi, dasturni masshtablash, boshqa xostga o'tkazish, platforma resurslarining tugashi yoki boshqa holatlar.

Bulutli mahalliy ilovalarni yaratish uchun 5 ta umumiy ma'no tamoyillari
Natijada, konteynerlashtirilgan ilovalar ba'zi tashqi vositalar yordamida o'z holatini saqlab turishi yoki buning uchun ortiqcha bo'lgan ichki taqsimlangan sxemalardan foydalanishi kerak. Bundan tashqari, dastur tezda ishga tushishi va tezda o'chirilishi va to'satdan halokatli apparat buzilishiga tayyor bo'lishi kerak.

Ushbu tamoyilni amalga oshirishga yordam beradigan amaliyotlardan biri idishlarni kichik saqlashdir. Bulutli muhitlar avtomatik ravishda konteyner namunasini ishga tushirish uchun xostni tanlashi mumkin, shuning uchun konteyner qanchalik kichik bo'lsa, u tezroq ishga tushadi - u tarmoq orqali maqsadli xostga tezroq ko'chiriladi.

O'z-o'zini saqlash printsipi (S-CP)

Ushbu printsipga ko'ra, yig'ish bosqichida barcha kerakli komponentlar konteynerga kiritilgan. Konteyner tizimda faqat sof Linux yadrosiga ega degan taxminga asoslanishi kerak, shuning uchun barcha kerakli qo'shimcha kutubxonalar konteynerning o'zida joylashtirilishi kerak. Shuningdek, u tegishli dasturlash tili uchun ish vaqti, dastur platformasi (agar kerak bo'lsa) va konteyner ilovasi ishlayotgan vaqtda talab qilinadigan boshqa bog'liqliklar kabi narsalarni o'z ichiga olishi kerak.

Bulutli mahalliy ilovalarni yaratish uchun 5 ta umumiy ma'no tamoyillari

Istisnolar muhitdan muhitga o'zgarib turadigan konfiguratsiyalar uchun qilingan va ish vaqtida taqdim etilishi kerak, masalan, Kubernetes ConfigMap orqali.

Ilova bir nechta konteynerlangan komponentlarni o'z ichiga olishi mumkin, masalan, konteynerlangan veb-ilova ichidagi alohida DBMS konteyneri. S-CP printsipiga ko'ra, bu konteynerlar bittaga birlashtirilmasligi kerak, balki shunday qilish kerakki, DBMS konteynerida ma'lumotlar bazasi ishlashi uchun zarur bo'lgan barcha narsalar mavjud va veb-ilovalar konteynerida veb-saytning ishlashi uchun zarur bo'lgan hamma narsa mavjud. ilova, xuddi shu veb-server. Natijada, ish vaqtida veb-ilova konteyneri DBMS konteyneriga bog'liq bo'ladi va kerak bo'lganda unga kira oladi.

Runtime Confinement Principle (RCP)

S-CP printsipi konteyner qanday qurilishi kerakligini va ikkilik tasvirda nimani o'z ichiga olishi kerakligini belgilaydi. Ammo konteyner bu faqat bitta xususiyatga ega bo'lgan "qora quti" emas - fayl hajmi. Amalga oshirish jarayonida konteyner boshqa o'lchamlarni oladi: ishlatiladigan xotira miqdori, CPU vaqti va boshqa tizim resurslari.

Bulutli mahalliy ilovalarni yaratish uchun 5 ta umumiy ma'no tamoyillari
Va bu erda RCP printsipi foydali bo'ladi, unga ko'ra konteyner tizim resurslariga bo'lgan talablarini kesib tashlashi va ularni platformaga o'tkazishi kerak. Har bir konteynerning resurs profillari (uga qancha protsessor, xotira, tarmoq va disk resurslari kerakligi) bilan platforma rejalashtirish va avtomatik masshtablashni optimal tarzda amalga oshirishi, AT sig‘imini boshqarishi va konteynerlar uchun SLA darajasini saqlab turishi mumkin.

Idishning resurs talablarini qondirishdan tashqari, dastur o'z chegaralaridan tashqariga chiqmasligi ham muhimdir. Aks holda, resurs tanqisligi yuzaga kelganda, platforma uni tugatilishi yoki ko'chirilishi kerak bo'lgan ilovalar ro'yxatiga kiritish ehtimoli ko'proq.

Biz bulutlilik haqida gapirganda, biz ishlash uslubimiz haqida gapiramiz.
Yuqorida biz bulutli muhitlar uchun yuqori sifatli konteyner ilovalarini yaratish uchun uslubiy asosni belgilovchi bir qator umumiy tamoyillarni ishlab chiqdik.

E'tibor bering, ushbu umumiy tamoyillarga qo'shimcha ravishda, sizga konteynerlar bilan ishlashning qo'shimcha ilg'or usullari va usullari ham kerak bo'ladi. Bundan tashqari, bizda aniqroq va vaziyatga qarab qo'llanilishi (yoki qo'llanilmasligi) kerak bo'lgan bir nechta qisqa tavsiyalar mavjud:

OpenShift konteyner platformasining yangi versiyasi bo'yicha vebinar – 4
11 iyun soat 11.00

Siz nimani o'rganasiz:

  • O'zgarmas Red Hat Enterprise Linux CoreOS
  • OpenShift xizmat ko'rsatish tarmog'i
  • Operator ramkasi
  • Knativ ramka

Manba: www.habr.com

a Izoh qo'shish