DevOps: ipidan ignasigacha tushuntiramiz
DevOps olamiga qisqa sayohat. Bunda biz topologiyalar, amaliyotlar, madaniyat va jamoalarning o‘zaro munosabatlari haqida so‘z yuritamiz.
DevOps (development operations) – kompaniya qaysi sohada faoliyat yuritishidan qat’i nazar uning samaradorligini oshirish uchun qo‘llanadigan mashhur metodologiya. Kundan-kunga ko‘proq kompaniyalar o‘z faoliyatiga bu modelni joriy etyapti.
DevOpsʼning asosiy maqsadi dasturiy ta’minotni barqaror yetkazib berishni ta’minlashdir. Bu dastur ishlab chiqish va foydalanish jarayonlarini doimiy ravishda integratsiya qilish orqali amalga oshadi. Natijada ishlab chiqish va joylashtirish jarayonlari tezlashadi hamda kamroq resurs talab qiladi. Shu bilan birga, kompaniyalar sifatli dasturiy mahsulotlar yaratish orqali mablag‘larini tejaydi.
Bu maqolada DevOps metodologiyasi asoslarini tushuntiramiz. Kelib chiqish tarixi, eng yaxshi amaliyotlar, asosiy topologiyalar va muhim afzalliklarni tavsiflaymiz.
DevOps nima?
Ilgari AyTi sohasida dastur ishlab chiqish (developers) va texnik xizmat ko‘rsatish yoki qo‘llab-quvvatlash (operations) jamoalari alohida faoliyat yuritardi. Ularning rahbarlari, vazifalari, yondashuvlari va maqsadlari bir-biridan farq qilardi. Ko‘plab kompaniyalarda bu jamoalar hatto turli qavatlarda joylashgan bo‘lib, deyarli o‘zaro muloqotga kirishmasdi.
Bunday tarqoqlik madaniyati, tabiiyki, hamkorlikka to‘sqinlik qilgan. Begonalashuv chegarasini esa ular faqat juda zarur hollardagina buzib o‘tardi. Umuman olganda, o‘sha paytda “dasturiy ta’minotni to‘r orqali maydonning narigi tomoniga uzatish” tamoyili amal qilardi.
DevOpsʼning muvaffaqiyatlari bu to‘siqni yengishga yordam berdi va endi xodimlar:
hamjihatlikda ishlaydi;
majburiyatlarni taqsimlaydi;
dasturiy ta’minotning butun hayotiy sikli davomida kod va uning har bir qismi uchun birgalikda javobgar bo‘ladi.
Bugungi kunda hatto Amazon, Google, Netflix va BMC Software kabi texnogigantlar ham bu yondashuvga ishonch bildirmoqda. Tobora ko‘proq kompaniyalar bu tamoyillarni butun tashkilotga qanday yoyish, ya’ni faqat AyTi sohasidagina emas, balki boshqa yo‘nalishlarda ham qo‘llash haqida bosh qotiryapti.
DevOps metodologiyasi qayerdan kelib chiqqan?
2000-yilgacha aksariyat AyTi kompaniyalar dasturiy ta’minotni ishlab chiqishda chiziqli yondashuv – kaskadli model yoki waterfall usulini qo‘llagan.
Bunday yondashuvda:
dasturchilarning ko‘p vaqti kodning katta qismlarini yozish va ularni o‘zaro bog‘lash, ishlab chiqish vositalarini muvofiqlashtirish uchun sarflangan;
testirovshik va texnik xizmat koʻrsatuvchi mutaxassislar alohida-alohida ishlagan hamda bu kodni tekshirish uchun koʻproq vaqt ketkazilgan.
Natijada dasturiy ta’minot versiyalari orasida katta tanaffuslar yuzaga kelardi. Ba’zan bu tanaffuslar bir necha yilgacha cho‘zilardi. Kodning o‘zi esa ko‘pincha xatoliklar bilan chiqar, buni versiyalar orasidagi ko‘plab tuzatishlar orqali bartaraf etishga to‘g‘ri kelardi.
Agile metodologiyasi paydo bo‘lgach, soha tez-tez chiqariladigan takroriy dasturiy ta’minot ishlab chiqishga o‘tdi. Bu modelda uzluksiz integratsiya (continuous integration, CI) va uzluksiz yetkazib berish (continuous delivery, CD) yondashuvlari joriy etildi. Bu esa yangilanishlarni tezroq va koʻproq chiqarish imkonini berdi.
DevOps amaliyotlari dasturiy taʼminot hayotiy siklining har bir bosqichida dastur ishlab chiqish va qo‘llab-quvvatlash jamoalari o‘rtasidagi hamkorlikni izchil ravishda yaxshilab bordi. Shunday ekan, bu yondashuvning ildizlari Agile metodologiyasiga borib taqalishini ishonch bilan aytish mumkin.

DevOps madaniyati
Yangi yondashuvga o‘tish uchun tashkilotlar quyidagilarni amalga oshirishi kerak bo‘ladi:
an’anaviy ish va boshqaruv usullaridan voz kechish;
odatiy fikrlash tarzi va vositalarni qayta ko‘rib chiqish.
Bu metodologiyaga ko‘ra, dasturchilar va xizmat ko‘rsatuvchi mutaxassislar hamkorlikda ishlashi hamda bir-biri bilan tez-tez muloqot qilishi lozim.
Ba’zi tashkilotlarda DevOps muhandislari ham dastur ishlab chiqish, ham xizmat ko‘rsatish bilan shug‘ullanadi. Ularning vazifasi keng qamrovli: boshqa mutaxassislar bilan mas’uliyatini baham ko‘radi va o‘zini butun ishlab chiqish jarayoni uchun javobgar deb biladi.
Bu muhandislar mijozlarga iloji boricha ko‘proq foyda keltirish maqsadida unumdorlik va xizmat ko‘rsatish sifatini oshirishga intiladi.
DevOps metodologiyasining amaliyotlari va vositalari
Albatta, DevOps asosida faqat muloqot va hamkorlik yotmaydi. Tez-tez va sifatli relizlar ko‘plab amaliyotlar hisobiga amalga oshadi. Bu yondashuv yuqori samaradorlikka qaratilgani bois kundalik vazifalarni avtomatlashtirishni rag‘batlantiradi.

Endi bu amaliyotlar va vositalarga batafsil to‘xtalamiz.
Uzluksiz integratsiya, CI
Odatda dasturchilar kodlarini qo‘lda yangilab, keyin uni qo‘lda testdan o‘tkazgan.
Uzluksiz integratsiyada dasturchilar kod o‘zgarishlarini tez-tez markaziy repozitoriyga joylashtiradi. O‘zgarishlar kiritilgandan so‘ng avtomatik yig‘ish jarayoni boshlanadi. Bu yigʻish uchun avtomatlashtirilgan testlar ishga tushiriladi.
Bu amaliyot koddagi xatolarni tezroq aniqlashga yordam beradi va dasturiy ta’minot sifatini oshiradi.
Uzluksiz yetkazib berish va uzluksiz joylashtirish
Yig‘ish jarayonidan so‘ng barcha o‘zgartirilgan kod avtomatik tarzda test muhitida joylashtiriladi. Keyin bu kod avtomatlashtirilgan testlardan o‘tkaziladi va ishlab chiqarish (production) muhitiga joylashtirish jarayoni boshlanadi. Faqatgina muvaffaqiyatsiz o‘tgan test yangilanishni to‘xtatishi mumkin. Shu tarzda dasturchilar xatoliklarni tezroq aniqlab, ularni tuzatish imkoniga ega bo‘ladi.
Bu vazifalarning barchasini bajarishda Jenkins, Bamboo, Travis, TeamCity va CI hamda CD vositalari yordam beradi.
Uzluksiz testdan oʻtkazish
Ushbu amaliyot dasturiy ta’minotni ishlab chiqishning barcha bosqichlarida mumkin bo‘lgan xavflarni iloji boricha erta aniqlashga yordam beradi. Bu narsa koddagi xatolar yakuniy foydalanuvchilarga ta’sir qilmasligi uchun zarur.
Masalan, kod yig‘ish serverlariga joylashtirilganda har qanday xatolikni aniqlash uchun avtomatlashtirilgan modul testlari ishga tushiriladi. Agar qandaydir testlar muvaffaqiyatsiz yakunlansa, yig‘ish rad etiladi va dasturchiga kodni qayta tekshirishi kerakligi haqida bildirishnoma yuboriladi.
Shunday qilib, kod barcha modul testlaridan muvaffaqiyatli o‘tgandagina funksional sinov uchun sifat nazorati muhiti (QA environment)ga joylashtiriladi.
Funksional testlar (FT) ilovaning ishlashini tashqi tomondan, xuddi foydalanuvchi kabi tekshiradi. Modul testlar esa (MT, yaʼni unit testlar) uni ichkaridan, dasturchi nuqtayi nazaridan baholaydi.
FT mijoz xohlagan narsani qiladigan ilovani yaratishga yordam beradi. Ular hech qachon ish mantig‘ini buzmasligingizni kafolatlaydi. MT xatosiz, toza kod yozishga yordam beradi – ishonchli, samarali, xotira sizib chiqmaydigan, kengaytirilishi oson va shu kabi.
ISTQB taʼrifiga ko‘ra, modul testlari (yoki unit testlar) funksionallikni ham tekshirishi mumkin — agar komponent (ya’ni modul, dastur, funksiya, obyekt, klas va hokazo) boshqalardan mustaqil tarzda test qilinishi mumkin bo‘lsa.
Mashhur test qilish vositalari Selenium, Travis va Appium hisoblanadi.
Uzluksiz monitoring
Dastur, infratuzilma, vositachi dasturiy taʼminot (middleware) va tarmoqlar doimiy ravishda quyidagi jihatlar bo‘yicha monitoring qilinishi kerak: unumdorlik, xatolar, xavfsizlik va talablarga muvofiqlik.
Ko‘p kompaniyalar quyidagi ko‘rsatkichlarni kuzatib boradi:
protsessor va xotiradan foydalanish;
disk maydonini ishlatish;
mijozlarning harakatlari;
xavfsizlik siyosatlari.
Doimiy monitoring orqali siz kod yozish bosqichidan tortib “prodakshn”gacha bo‘lgan har qanday muammo haqida darhol xabardor bo‘lasiz. Bu esa mahsulotning yuqori darajadagi uzluksiz ishlashini ta’minlashga yordam beradi.
Mashhur uzluksiz monitoring vositalari: Nagios, Sensu, Prometheus.
Infratuzilma kod sifatida (infrastructure as code, IaC)
Infratuzilma kod sifatida bu — infratuzilmani (masalan, virtual mashinalar, yuklamani muvozanatlovchilar, tarmoqlar va boshqa vositalar) dasturiy tarzda, ya’ni kod orqali sozlash va boshqarish modelidir. Bu jarayon qoʻlda bajarilmaydi. Ayniqsa, bulutli platformalarga o‘tishga qaror qilgan tashkilotlar uchun bunday infratuzilma muhim tarkibiy qismga aylangan.
Masalan, Amazon Web Services (AWS) o‘zining bulutli infratuzilmasi bilan dasturiy aloqa o‘rnatish uchun API taqdim etadi. Konfiguratsiyani belgilash uchun dasturiy koddan foydalanish jarayonni standartlashtirish va bulutdagi resurslarni tezda joylashtirish imkonini beradi.
Mikroservislar (microservices)
An’anaviy monolitdan farqli ravishda mikroservis arxitekturasidagi dastur ko‘plab kichik xizmatlar yoki komponentlardan tashkil topadi. Har bir xizmat o‘z funksionalligiga javobgar bo‘lib, ular yengil interfeys yoki API kodi orqali o‘zaro aloqada bo‘ladi.
Mikroservis arxitekturasi keng tarqalgan yechim bo‘lib, buning sababi bor:
U turli tarkibiy qismlar doirasida resurslarni mustaqil ravishda boshqarish imkonini beradi.
Tizimning ishonchliligini oshiradi, chunki unda yagona nosozlik nuqtasi yo‘q: komponentlardan birining ishdan chiqishi boshqalarining ishlashiga ta’sir qilmaydi.
Boshqa komponentlarga ta’sir o‘tkazmasdan yangi funksiyalar bilan qo‘shimcha komponentlarni qo‘shish imkonini beradi.
DevOps topologiyalari
DevOpsʼni qo‘llash usullari muayyan tashkilotga juda bog‘liq. Mettyu Skelton va Manuel Pais fikriga ko‘ra, DevOpsʼni muvaffaqiyatli joriy etish uchun kompaniyalar turli xil topologiyalar yoki jamoa tuzilmalarini qo‘llaydi. Skelton va Pais topologiyaning to‘qqiz turini ajratib ko‘rsatadi.

Dev va Ops jamoalari hamkorligi
Bu DevOps uchun eng maqbul jamoa tuzilmasidir. Unda Dev va Ops guruhlari bir-biri bilan chambarchas hamkorlik qiladi:
Dasturchilar qo‘llab-quvvatlash vazifalariga jiddiy yondashadi va zarur bo‘lganda Ops hamkasblarining fikrlarini e’tiborga oladi.
Qo‘llab-quvvatlash bo‘limidagi hamkasblar esa dasturchilar nima bilan shug‘ullanayotganini juda yaxshi tushunadi.
Taqsimlangan operatsion vazifalar
Bunday topologiya Netflixʼda qo‘llanadi. Uning mohiyati shundaki, dasturlash jamoasida nafaqat dasturchilar, balki texnik yordam mutaxassislari ham bo‘lishi kerak.
Bu alohida veb ilovalariga ega kompaniyalar uchun juda mos keladi.
Ops “xizmat sifatidagi infratuzilma” ko‘rinishida
Bu topologiya bir nechta xizmatlarga ega bo‘lgan, lekin an’anaviy AyTi bo‘limini qayta tashkil qilishni rejalashtirmagan tashkilotlar uchun mos keladi. Bunday yondashuvda Ops guruh aslida “xizmat sifatidagi infratuzilma” (Infrastructure as a Service, IaaS) rolini bajaradi.
DevOps tashqi xizmat sifatida
Ba’zi tashkilotlar yetarli tajribaga yoki alohida Ops bo‘linmasini tashkil etish imkoniyatiga ega boʻlmaydi. Bunday holda ular dasturiy ta’minotning operatsion jihatlarini boshqarishni tashqi provayderlarga topshirishi mumkin.
“Talab bo‘yicha” DevOps
Dev va Ops jamoalari ma’lum bir maqsadga erishish uchun vaqtincha birlashtiriladi. Kod yozilib, vazifa bajarilgach, xodimlar o‘z ish joylariga qaytadi.
DevOps targ‘iboti
Bunday topologiya yaxshi jipslashmagan jamoalarga mos keladi. DevOps targ‘ibotchilari ham dasturchilarga, ham qo‘llab-quvvatlash mutaxassislariga yordam beradi: amaliyotlar va vositalar haqida ma’lumot beradi, kod ustida ishlashga jalb qiladi.
SRE
Bu topologiyani Google ishlab chiqqan. Bunday tuzilmada “sayt ishonchliligi muhandisligi” (site reliability engineering, SRE) bilan shug‘ullanadigan guruh mavjud. Dasturchilar ushbu jamoa a’zolariga o‘z dasturiy ta’minoti va vositalari belgilangan standartlarga mos kelishini isbotlashi kerak boʻladi. SRE xodimlari o‘zgarishlar bilan kelishmagan taqdirda ularni bekor qilishi mumkin.
Konteynerlar asosidagi hamkorlik
Konteynerlashtirishda joylashtirish (deployment) va ishga tushirish (runtime) bo‘yicha talablar konteynerlar qatlamiga o‘tkaziladi. Bu esa Dev va Ops jamoalari o‘rtasidagi o‘zaro bog‘liqliklarning bir qismini yo‘q qiladi.
Bunday tuzilma muhandislik madaniyati yaxshi rivojlangan tashkilotlarga mos keladi.
Dev va DBA o‘rtasidagi hamkorlik
Bunday topologiyani yirik markazlashtirilgan ma’lumotlar bazalariga ulangan ilovalardan foydalanadigan ba’zi tashkilotlar sinovdan o‘tkazgan. Tuzilmaning mohiyati shundaki, ham DBA (ma’lumotlar bazasi administratori), ham Dev guruhlarida ma’lumotlar bazalari va ularga aloqador kodlar bilan ishlash uchun mas’ul bo‘lgan mutaxassislarning o‘zaro bog‘liq rollari belgilangan. Bu ikki guruh o‘rtasidagi farqni qisqartirishga yordam beradi.
DevOpsʼning asosiy afzalliklari
DevOps madaniyatini joriy etgan tashkilotlar dasturiy ta’minotni ishlab chiqishning ko‘plab jihatlarida yaxshilanishlarni kuzatmoqda:
jamoalar o‘rtasida aloqalarni mustahkamlash;
tashkilotning samaradorligi va unumdorligini oshirish;
dasturiy ta’minotni chiqarish va kodni yangilash tezligini oshirish;
mijozlar sodiqligini oshirish (ular endi yuqori sifatli dasturiy ta’minotdan foydalana oladi);
tizimning mavjudligi va ishonchliligi borasida ishonch – xavf va xatoliklar avtomatlashtirilgan vositalar yordamida tez aniqlanib, bartaraf etilishi tufayli;
turli jamoalar o‘rtasida g‘oyalar va vositalar almashish orqali innovatsiyalarni rag‘batlantirish.
Ushbu videoda BMC Software kompaniyasining dasturiy ta’minotni ishlab chiqish bo‘yicha vitse-prezidenti Devid Rizzo va yechimlar arxitektori Devid Kennedi Compuware’da DevOps’ni qanday qo‘llaganlari haqida so‘zlab beradi. Ular innovatsiyalarni rag‘batlantirish, xatolar sonini kamaytirish, MTTR ko‘rsatkichini pasaytirish va dastur ishlab chiqishni tezlashtiruvchi vositalarni joriy etish haqida maʼlumot beradi.
DevOps biznes modelidan tashqariga chiqadi
DevOps juda mavhum tushuncha bo‘lgani uchun uni qisqa jumlalarda tushuntirish qiyin. Aytganimdek, DevOps faqat biznes model emas. Bu dasturiy ta’minotni ishlab chiqish, rivojlantirish, qo‘llab-quvvatlash jarayonlarini yagona ish oqimiga birlashtirishi va avtomatlashtirishi kerak bo‘lgan keng qamrovli madaniy o‘zgarishdir. Bunda asosiy e’tibor ishlab chiqarish tezligi va mijozlarning barcha talablariga javob beradigan yuqori sifatli dasturiy ta’minotga qaratilishi lozim.
DevOps yondashuvi dasturiy ta’minotni ishlab chiqarishning har bir bosqichida eng yaxshi amaliyotlar va vositalarni joriy etish orqali muvaffaqiyatga erishadi. Tashkilotlar o‘zlari uchun eng mos keladigan DevOps tuzilmasini tanlashi va uzoq muddatli istiqbolda unga intilishi kerak.
DevOps madaniyati to‘g‘ri qo‘llanganda kompaniyalarga dasturiy ta’minotni muvaffaqiyatli ishlab chiqarish uchun keng imkoniyatlar yaratib beradi.
Manba: Основы DevOps: концепции, культура, история и преимущества

