NGINX dan zamonaviy ilovalarni ishlab chiqish tamoyillari. 1-qism

Salom do'stlar. Kursning boshlanishi arafasida PHP backend dasturchisi, an'anaviy ravishda foydali materialning tarjimasini siz bilan baham ko'ring.

Dasturiy ta'minot tobora ko'proq kundalik vazifalarni hal qiladi, shu bilan birga tobora murakkablashadi. Mark Andressen aytganidek, u dunyoni iste'mol qiladi.

NGINX dan zamonaviy ilovalarni ishlab chiqish tamoyillari. 1-qism

Natijada, so'nggi bir necha yil ichida ilovalarni ishlab chiqish va etkazib berish usullari keskin o'zgardi. Bu tektonik miqyosdagi siljishlar bo'lib, natijada bir qator printsiplar paydo bo'ldi. Ushbu tamoyillar jamoani shakllantirish, loyihalash, ishlab chiqish va ilovangizni oxirgi foydalanuvchilarga yetkazib berishda foydali ekanligi isbotlangan.

Prinsiplarni quyidagicha umumlashtirish mumkin: ilova kichik, veb-ga asoslangan va ishlab chiquvchilarga asoslangan arxitekturaga ega bo'lishi kerak. Ushbu uchta tamoyilni yodda tutgan holda, siz oxirgi foydalanuvchiga tez va xavfsiz tarzda yetkazilishi mumkin bo'lgan, osonlik bilan kengaytiriladigan va kengaytiriladigan mustahkam, oxirigacha dastur yaratishingiz mumkin.

NGINX dan zamonaviy ilovalarni ishlab chiqish tamoyillari. 1-qism

Taklif etilayotgan printsiplarning har biri bir qancha jihatlarga ega bo'lib, biz har bir tamoyil yakuniy maqsadga, ya'ni parvarishlash va foydalanishga qulay bo'lgan ishonchli ilovalarni tezkor yetkazib berishga qanday hissa qo'shishini ko'rsatish uchun muhokama qilamiz. Bu nimani anglatishini aniqlash uchun biz printsiplarni ularning qarama-qarshiliklari bilan bog'liq holda ko'rib chiqamiz, ayting: "Ishonch hosil qiling kichiklik printsipi".

Umid qilamizki, ushbu maqola sizni zamonaviy ilovalarni yaratish uchun taklif etilgan tamoyillardan foydalanishga undaydi, bu esa doimiy ravishda o'sib borayotgan texnologiya steklari kontekstida dizaynga yagona yondashuvni ta'minlaydi.

Ushbu tamoyillarni qo'llash orqali siz dasturiy ta'minotni ishlab chiqishning eng so'nggi tendentsiyalaridan, jumladan DevOps ilovalarni ishlab chiqish va yetkazib berish, konteynerlardan foydalanish (masalan, Docker) va konteyner orkestrlash ramkalari (masalan, Kubernetes), mikroservislardan foydalanish (shu jumladan Microservice Architecture NGINX и tarmoq aloqa arxitekturasi mikroservis ilovalari uchun.

Zamonaviy dastur nima?

Zamonaviy ilovalar? Zamonaviy stack? “Zamonaviy” degani aynan nimani anglatadi?

Ko'pgina ishlab chiquvchilar zamonaviy dastur nimadan iboratligi haqida umumiy tasavvurga ega, shuning uchun ushbu kontseptsiyani aniq belgilash kerak.

Zamonaviy ilova React JavaScript kutubxonasi foydalanuvchi interfeysi, Android yoki iOS mobil ilovasi yoki boshqa API ga ulanadigan ilova boʻladimi, bir nechta mijozlarni qoʻllab-quvvatlaydi. Zamonaviy dastur ma'lumotlar yoki xizmatlarni taqdim etadigan cheksiz miqdordagi mijozlarni nazarda tutadi.

Zamonaviy ilova so'ralgan ma'lumotlar va xizmatlarga kirish uchun API taqdim etadi. API o'zgarmas va doimiy bo'lishi kerak va ma'lum bir mijozning muayyan so'rovi uchun maxsus yozilmasligi kerak. API HTTP(S) orqali mavjud va GUI yoki CLI-da mavjud bo'lgan barcha funksiyalarga kirishni ta'minlaydi.

Ma'lumotlar JSON kabi umumiy qabul qilingan, o'zaro ishlash formatida mavjud bo'lishi kerak. API ob'ektlar va xizmatlarni toza, tartibli tarzda namoyish etadi, masalan, RESTful API yoki GraphQL munosib interfeysni ta'minlaydi.

Zamonaviy ilovalar zamonaviy stekga qurilgan va zamonaviy stek mos ravishda bunday ilovalarni qo'llab-quvvatlaydigan stek hisoblanadi. Ushbu stek ishlab chiquvchiga HTTP interfeysi va aniq API so'nggi nuqtalari bilan osongina dastur yaratish imkonini beradi. Tanlangan yondashuv ilovangizga ma’lumotlarni JSON formatida osongina qabul qilish va yuborish imkonini beradi. Boshqacha qilib aytganda, zamonaviy stek o'n ikki faktorli dasturning elementlariga mos keladi mikroservislar.

Ushbu turdagi stekning mashhur versiyalari asoslanadi Java, Python, Node, yoqut, PHP и Go. Mikroservis arxitekturasi NGINX zikr etilgan tillarning har birida amalga oshirilgan zamonaviy stekning namunasini ifodalaydi.

E'tibor bering, biz faqat mikroservis yondashuvini qo'llab-quvvatlamaymiz. Ko'pchiligingiz rivojlanishi kerak bo'lgan monolitlar bilan ishlayapsiz, boshqalari esa mikroservis ilovalari bo'lish uchun kengayib borayotgan va rivojlanayotgan SOA ilovalari bilan ishlamoqda. Yana boshqalar serversiz ilovalarga o'tmoqda, ba'zilari esa yuqoridagi kombinatsiyalarni amalga oshirmoqda. Maqolada ko'rsatilgan printsiplar ushbu tizimlarning har biriga faqat bir nechta kichik o'zgartirishlar bilan qo'llaniladi.

Printsiplar

Endi biz zamonaviy dastur va zamonaviy stek nima ekanligini umumiy tushunganimizdan so‘ng, zamonaviy dasturni ishlab chiqish, amalga oshirish va qo‘llab-quvvatlashda sizga yaxshi xizmat qiladigan arxitektura va rivojlanish tamoyillari bilan tanishish vaqti keldi.

Printsiplardan biri "kichik ilovalarni yaratish" kabi eshitiladi, keling, uni chaqiraylik kichiklik printsipi. Ko'p harakatlanuvchi qismlardan tashkil topgan nihoyatda murakkab ilovalar mavjud. O'z navbatida, kichik, diskret komponentlardan ilova yaratish uni loyihalash, texnik xizmat ko'rsatish va bir butun sifatida ishlashni osonlashtiradi. (E'tibor bering, biz "oddiy qiladi" emas, "soddalashtiradi" dedik).

Ikkinchi tamoyil shundan iboratki, biz ishlab chiquvchilarga ular ishlab chiqayotgan funksiyalarga e'tibor qaratishga yordam berish orqali ularni infratuzilma va CI/CD bilan bog'liq muammolardan xalos qilish orqali samaradorlikni oshirishimiz mumkin. Xulosa qilib aytganda, bizning yondashuvimiz ishlab chiquvchilarga qaratilgan.

Nihoyat, ilovangiz haqida hamma narsa tarmoqqa ulangan bo'lishi kerak. O'tgan 20 yil ichida biz tarmoqli kelajak sari katta qadamlar tashladik, chunki tarmoqlar tezroq va ilovalar murakkablashadi. Ko'rib turganimizdek, zamonaviy dastur turli xil mijozlar tomonidan tarmoq orqali ishlatilishi kerak. Tarmoqli fikrlashni arxitekturada qo'llash yaxshi mos keladigan muhim afzalliklarga ega kichiklik printsipi va yondashuv tushunchasi, ishlab chiquvchiga yo'naltirilgan.

Ilovani ishlab chiqish va amalga oshirishda ushbu tamoyillarni yodda tutsangiz, mahsulotingizni ishlab chiqish va yetkazib berishda shubhasiz ustunlikka ega bo'lasiz.

Keling, ushbu uchta tamoyilni batafsil ko'rib chiqaylik.

Kichiklik printsipi

Inson miyasi bir vaqtning o'zida katta hajmdagi ma'lumotlarni idrok etishi qiyin. Psixologiyada kognitiv yuk atamasi xotirada ma'lumotni saqlash uchun zarur bo'lgan aqliy harakatlarning umumiy miqdorini anglatadi. Ishlab chiquvchilarga kognitiv yukni kamaytirish ustuvor vazifadir, chunki bu ularga butun dasturning joriy murakkab modelini va ishlab chiqilayotgan xususiyatlarni saqlash o'rniga muammoni hal qilishga e'tibor qaratish imkonini beradi.

NGINX dan zamonaviy ilovalarni ishlab chiqish tamoyillari. 1-qism

Ilovalar quyidagi sabablarga ko'ra parchalanadi:

  • Ishlab chiquvchilarga kognitiv yukni kamaytirish;
  • Sinovni tezlashtirish va soddalashtirish;
  • Ilovadagi o'zgarishlarni tezkor etkazib berish.


Ishlab chiquvchilarga kognitiv yukni kamaytirishning bir necha yo'li mavjud va bu erda kichiklik printsipi o'ynaydi.

Shunday qilib, kognitiv yukni kamaytirishning uchta usuli mavjud:

  1. Yangi xususiyatni ishlab chiqishda e'tiborga olishlari kerak bo'lgan vaqtni qisqartiring - vaqt oralig'i qanchalik qisqa bo'lsa, kognitiv yuk shunchalik past bo'ladi.
  2. Bir martalik ish bajariladigan kod miqdorini kamaytiring - kamroq kod - kamroq yuk.
  3. Ilovaga qo'shimcha o'zgartirishlar kiritish jarayonini soddalashtiring.

Rivojlanish vaqtini qisqartirish

Keling, metodologiya bo'lgan kunlarga qaytaylik waterfall ishlab chiqish jarayoni uchun standart bo'lgan va dasturni ishlab chiqish yoki yangilash uchun olti oydan ikki yilgacha vaqt oralig'i odatiy amaliyot edi. Odatda, muhandislar avvalo mahsulot talablari (PRD), tizim ma'lumotnomasi (SRD), arxitektura rejasi kabi tegishli hujjatlarni o'qiydilar va bularning barchasini bitta kognitiv modelga birlashtira boshlaydilar, unga ko'ra kodlangan. Talablar va shunga mos ravishda arxitektura o'zgarganligi sababli, butun jamoani kognitiv modeldagi yangilanishlar haqida xabardor qilish uchun jiddiy harakat qilish kerak edi. Bunday yondashuv, eng yomoni, ishni shunchaki falaj qilishi mumkin.

Ilovalarni ishlab chiqish jarayonidagi eng katta o'zgarish agile metodologiyasining joriy etilishi bo'ldi. Metodikaning asosiy xususiyatlaridan biri agile iterativ rivojlanishdir. O'z navbatida, bu muhandislarga kognitiv yukning kamayishiga olib keladi. Rivojlanish guruhidan dasturni bitta uzoq tsiklda amalga oshirishni talab qilish o'rniga, agile yondashuv sizga tez sinovdan o'tkazilishi va joylashtirilishi mumkin bo'lgan kichik hajmdagi kodlarga e'tibor qaratish imkonini beradi, shu bilan birga fikr-mulohazalarni oladi. Ilovaning kognitiv yuki olti oylik vaqtdan ikki yillik vaqt oralig'iga o'tdi va ikki haftalik qo'shimchalar yoki xususiyatlarni o'zgartirish uchun katta hajmdagi xususiyatlar katta ilovani yanada xiraroq tushunishga qaratilgan.

Diqqatni katta dasturdan ikki haftalik sprintda bajarilishi mumkin bo'lgan, keyingi sprintdan oldin bittadan ko'p bo'lmagan xususiyatni hisobga olgan holda aniq kichik xususiyatlarga o'tkazish muhim o'zgarishdir. Bu bizga doimiy ravishda o'zgarib turadigan kognitiv yukni kamaytirish bilan birga rivojlanish samaradorligini oshirishga imkon berdi.

Metodologiyada agile yakuniy dastur asl kontseptsiyaning biroz o'zgartirilgan versiyasi bo'lishi kutilmoqda, shuning uchun rivojlanishning yakuniy nuqtasi, albatta, noaniqdir. Faqat har bir aniq sprint natijalari aniq va aniq bo'lishi mumkin.

Kichik kod bazalari

Kognitiv yukni kamaytirishning keyingi bosqichi kodlar bazasini kamaytirishdir. Qoida tariqasida, zamonaviy ilovalar massivdir - mustahkam, korporativ dastur minglab fayllar va yuz minglab kod satrlaridan iborat bo'lishi mumkin. Fayllar qanday tashkil etilganiga qarab, kod va fayllar o'rtasidagi bog'liqliklar va bog'liqliklar aniq yoki aksincha bo'lishi mumkin. Ishlatilgan kutubxonalar va disk raskadrovka vositalari kutubxonalar/paketlar/modullar va maxsus kodni qanchalik yaxshi farqlashiga qarab, hatto disk raskadrovka kodining bajarilishi ham muammoli bo'lishi mumkin.

Ilova kodining ishlaydigan aqliy modelini yaratish juda ko'p vaqt talab qilishi va yana bir bor ishlab chiquvchiga katta kognitiv yukni yuklashi mumkin. Bu, ayniqsa, ko'p miqdorda kod mavjud bo'lgan, funktsional komponentlar o'rtasidagi o'zaro ta'sir aniq belgilanmagan va diqqat ob'ektlarini ajratish ko'pincha loyqa bo'lgan, funktsional chegaralar hurmat qilinmaganligi sababli, bu, ayniqsa, monolit kod bazalari uchun to'g'ri keladi.

Muhandislarga kognitiv yukni kamaytirishning samarali usullaridan biri bu mikroservis arxitekturasiga o'tishdir. Mikroservis yondashuvida har bir xizmat bir qator funksiyalarga e'tibor qaratadi; xizmatning ma'nosi odatda aniqlangan va tushunarli bo'lsa. Xizmatning chegaralari ham aniq – esda tutingki, xizmat bilan aloqa API orqali amalga oshiriladi, shuning uchun bir xizmat tomonidan yaratilgan ma’lumotlar boshqasiga osonlik bilan uzatilishi mumkin.

Boshqa xizmatlar bilan o'zaro aloqa odatda REST dan foydalanish kabi oddiy va toza API chaqiruvlaridan foydalanadigan bir nechta foydalanuvchi xizmatlari va bir nechta provayder xizmatlari bilan cheklanadi. Bu muhandisning kognitiv yukini jiddiy ravishda kamaytirishini anglatadi. Eng katta muammo - bu xizmatlarning o'zaro ta'siri modelini va tranzaktsiyalar kabi narsalar bir nechta xizmatlarda qanday sodir bo'lishini tushunish bo'lib qolmoqda. Natijada, mikroservislardan foydalanish kod miqdorini kamaytirish, aniq xizmat chegaralarini belgilash va foydalanuvchilar va provayderlar o'rtasidagi munosabatlarni tushunishni ta'minlash orqali kognitiv yukni kamaytiradi.

Kichik bosqichma-bosqich o'zgarishlar

Printsipning oxirgi elementi kichiklik o'zgarishlarni boshqarishdir. Ishlab chiquvchilar uchun kodlar bazasiga (hatto o'zlarining eski kodi bo'lsa ham) qarash va "Bu ahmoqlik, biz hammasini qayta yozishimiz kerak" deyishlari o'ziga xos vasvasadir. Ba'zida bu to'g'ri qaror, ba'zan esa yo'q. Bu global modelni o'zgartirish yukini ishlab chiqish guruhiga yuklaydi, bu esa o'z navbatida katta kognitiv yukga olib keladi. Muhandislar sprint davomida amalga oshirishi mumkin bo'lgan o'zgarishlarga e'tibor qaratishlari yaxshiroqdir, shunda ular asta-sekin bo'lsa-da, kerakli funksiyalarni o'z vaqtida ishga tushirishlari mumkin. Yakuniy mahsulot oldindan rejalashtirilgan mahsulotga o'xshash bo'lishi kerak, ammo mijozning ehtiyojlariga mos keladigan ba'zi o'zgartirishlar va sinovlar bilan.

Kodning katta qismlarini qayta yozishda ba'zan o'zgarishlarni tezda etkazib berishning iloji bo'lmaydi, chunki boshqa tizimga bog'liqliklar o'ynaydi. O'zgarishlar oqimini boshqarish uchun siz xususiyatlarni yashirishdan foydalanishingiz mumkin. Asosan, bu funksionallik ishlab chiqarishda ekanligini anglatadi, lekin u muhit o'zgaruvchisi sozlamalari (env-var) yoki boshqa konfiguratsiya mexanizmi yordamida mavjud emas. Agar kod barcha sifat nazorati jarayonlaridan o'tgan bo'lsa, u ishlab chiqarishda yashirin holatda bo'lishi mumkin. Biroq, bu strategiya faqat funksiya oxir-oqibat yoqilgan bo'lsa ishlaydi. Aks holda, u faqat kodni chalkashtirib yuboradi va ishlab chiquvchi samarali bo'lishi uchun kognitiv yukni qo'shadi. O'zgarishlarni boshqarish va qo'shimcha o'zgarishlarning o'zi ishlab chiquvchilarning kognitiv yukini maqbul darajada ushlab turishga yordam beradi.

Muhandislar qo'shimcha funktsiyalarni oddiy joriy qilish bilan ham ko'p qiyinchiliklarni engishlari kerak. Menejment tomonidan jamoa asosiy funktsional elementlarga e'tibor qaratishi uchun keraksiz yukni kamaytirish oqilona bo'ladi. Rivojlanish guruhingizga yordam berish uchun uchta narsa qilishingiz mumkin:

  1. Metodologiyadan foydalaning agilejamoa asosiy xususiyatlarga e'tibor qaratishi kerak bo'lgan vaqt oralig'ini cheklash.
  2. Ilovangizni bir nechta mikroservislar sifatida amalga oshiring. Bu amalga oshirilishi mumkin bo'lgan xususiyatlar sonini cheklaydi va ishda kognitiv yukni ushlab turadigan chegaralarni mustahkamlaydi.
  3. Katta va noqulay o'zgarishlarga ustunlik bering, kichik kod qismlarini o'zgartiring. O'zgarishlar kiritilgandan so'ng darhol ko'rinmasa ham, ularni amalga oshirish uchun xususiyatni yashirishdan foydalaning.

Agar siz o'zingizning ishingizda kichiklik tamoyilini qo'llasangiz, sizning jamoangiz ancha baxtli bo'ladi, kerakli xususiyatlarni amalga oshirishga yaxshiroq e'tibor qaratadi va sifatli o'zgarishlarni tezroq amalga oshirish ehtimoli ko'proq bo'ladi. Ammo bu ish yanada murakkablasha olmaydi degani emas, ba'zida, aksincha, yangi funksionallikni joriy qilish bir nechta xizmatlarni o'zgartirishni talab qiladi va bu jarayon monolit arxitekturadagi o'xshashlardan ko'ra qiyinroq bo'lishi mumkin. Har qanday holatda, kichiklik yondashuvini qo'llashning afzalliklari bunga arziydi.

Birinchi qismning oxiri.

Tez orada tarjimaning ikkinchi qismini e'lon qilamiz, endi esa fikr-mulohazalaringizni kutamiz va sizni taklif qilamiz. ochiq kun, bugun soat 20.00 da bo'lib o'tadi.

Manba: www.habr.com

a Izoh qo'shish