Принсипҳои таҳияи замимаҳои муосир аз NGINX. Қисми 1

Салом дустон. Ба пешвози огози курс Таҳиягари пуштибонии PHP, ба таври анъанавй тарчумаи материалхои муфидро бо шумо мубодила мекунанд.

Нармафзор вазифаҳои ҳаррӯзаро ҳал мекунад, дар ҳоле ки торафт мураккабтар мегардад. Тавре ки Марк Андрессен боре гуфта буд, он ҷаҳонро истеъмол мекунад.

Принсипҳои таҳияи замимаҳои муосир аз NGINX. Қисми 1

Дар натиҷа, тарзи таҳия ва пешниҳоди барномаҳо дар тӯли чанд соли охир ба таври куллӣ тағйир ёфт. Инҳо тағирёбии миқёси тектоникӣ буданд, ки маҷмӯи принсипҳоро ба вуҷуд оварданд. Ин принсипҳо исбот кардаанд, ки дар сохтани даста, тарҳрезӣ, таҳия ва расонидани аризаи шумо ба корбарони ниҳоӣ муфиданд.

Принсипҳоро ба таври зерин ҷамъбаст кардан мумкин аст: барнома бояд хурд, ба веб асосёфта бошад ва меъмории ба таҳиякунанда нигаронидашуда дошта бошад. Бо дарназардошти ин се принсип, шумо метавонед як замимаи мустаҳкам ва ба охирро эҷод кунед, ки онро зуд ва бехатар ба корбари ниҳоӣ расонидан мумкин аст ва ба осонӣ миқёспазир ва васеъшаванда аст.

Принсипҳои таҳияи замимаҳои муосир аз NGINX. Қисми 1

Ҳар яке аз принсипҳои пешниҳодшуда дорои як қатор ҷанбаҳое мебошад, ки мо муҳокима хоҳем кард, то нишон диҳем, ки ҳар як принсип ба ҳадафи ниҳоӣ, яъне расонидани босуръати барномаҳои боэътимод, ки нигоҳдорӣ ва истифодаашон осон аст, мусоидат мекунад. Мо принсипҳоро дар робита бо муқобили онҳо дида мебароем, то фаҳмем, ки ин чӣ маъно дорад, бигӯед: "Боварӣ ҳосил кунед, ки шумо Принсипи хурдӣ".

Мо умедворем, ки ин мақола шуморо ташвиқ мекунад, ки принсипҳои пешниҳодшударо барои сохтани замимаҳои замонавӣ истифода баред, ки муносибати ягонаро ба тарҳрезӣ дар заминаи стеки афзояндаи технология таъмин мекунад.

Бо татбиқи ин принсипҳо, шумо хоҳед дид, ки аз тамоюлҳои навтарини таҳияи нармафзор, аз ҷумла DevOps ба таҳия ва таҳвили барномаҳо, истифодаи контейнерҳо (масалан, Доктор) ва чаҳорчӯбаи оркестрсозии контейнер (масалан, Кубернитель), истифодаи микросервисҳо (аз ҷумла Архитектураи Microservice NGINX и меъмории алоқаи шабакавӣ барои барномаҳои microservice.

Замимаи муосир чист?

Барномаҳои муосир? Стеки муосир? "Модерн" чӣ маъно дорад?

Аксари таҳиягарон танҳо тасаввуроти умумӣ доранд, ки барномаи муосир аз чӣ иборат аст, бинобар ин, ин консепсияро дақиқ муайян кардан лозим аст.

Замимаи муосир муштариёни сершуморро дастгирӣ мекунад, хоҳ он интерфейси корбарии китобхонаи React JavaScript, барномаи мобилии Android ё iOS ё барномае, ки ба API дигар пайваст мешавад. Замимаи муосир шумораи номуайяни муштариёнро дар назар дорад, ки барои онҳо маълумот ё хидмат пешниҳод мекунад.

Замимаи муосир API барои дастрасӣ ба маълумот ва хидматҳои дархостшударо таъмин мекунад. API бояд тағирнопазир ва доимӣ бошад ва на махсусан барои дархости мушаххас аз муштарии мушаххас навишта шавад. API тавассути HTTP(S) дастрас аст ва дастрасӣ ба тамоми функсияҳои дар GUI ё CLI мавҷудбударо таъмин мекунад.

Маълумот бояд дар формати маъмулан қабулшуда, ба монанди JSON дастрас бошад. API объектҳо ва хидматҳоро ба таври тоза ва муташаккил фош мекунад, ба монанди RESTful API ё GraphQL интерфейси мувофиқро фароҳам меорад.

Замимаҳои замонавӣ дар стеки муосир сохта шудаанд ва стеки муосир мутаносибан стекест, ки чунин барномаҳоро дастгирӣ мекунад. Ин стек ба таҳиягар имкон медиҳад, ки ба осонӣ барномаеро бо интерфейси HTTP ва нуқтаҳои ниҳоии API тоза созад. Равиши интихобшуда ба барномаи шумо имкон медиҳад, ки маълумотро дар формати JSON ба осонӣ қабул ва ирсол кунад. Ба ибораи дигар, стек муосир ба унсурҳои Аризаи дувоздаҳ-омилӣ мувофиқат мекунад хизматрасониҳои хурд.

Версияҳои маъмули ин навъи стек ба он асос ёфтааст Java, Python, Нод, лаъл, PHP и Go. Архитектураи Microservice NGINX намунаи стеки муосирро дар ҳар як забонҳои зикршуда муаррифӣ мекунад.

Лутфан таваҷҷӯҳ намоед, ки мо равиши танҳо микросервисро ҷонибдорӣ намекунем. Бисёре аз шумо бо монолитҳо кор карда истодаед, ки бояд таҳаввул шаванд, дар ҳоле ки дигарон бо замимаҳои SOA кор мекунанд, ки ба барномаҳои микросервисӣ табдил меёбанд. Дигарон ба сӯи барномаҳои бе сервер ҳаракат мекунанд ва баъзеҳо комбинатсияҳои дар боло зикршударо амалӣ мекунанд. Принсипҳое, ки дар мақола оварда шудаанд, ба ҳар яке аз ин системаҳо танҳо бо чанд тағйироти хурд дахл доранд.

Принсипҳо

Ҳоло, ки мо дар бораи чӣ будани барномаи муосир ва стеки муосир фаҳмиши умумӣ дорем, вақти он расидааст, ки ба принсипҳои меъморӣ ва рушд ғарқ шавем, ки ба шумо дар таҳия, татбиқ ва нигоҳдории замимаи муосир хидмат мекунанд.

Яке аз принсипҳо ба монанди "барномаҳои хурд" садо медиҳад, биёед онро танҳо даъват кунем Принсипи хурдӣ. Барномаҳои бениҳоят мураккаб мавҷуданд, ки аз қисмҳои зиёди ҳаракаткунанда иборатанд. Дар навбати худ, сохтани барнома аз ҷузъҳои хурди дискретӣ тарҳрезӣ, нигоҳдорӣ ва кор бо он дар маҷмӯъ осонтар мешавад. (Дар хотир доред, ки мо гуфтем, ки "содда мекунад" на "оддӣ мекунад").

Принсипи дуввум ин аст, ки мо метавонем маҳсулнокии таҳиягаронро тавассути кӯмак ба онҳо дар тамаркуз ба хусусиятҳое, ки онҳо таҳия мекунанд, афзоиш диҳем ва ҳамзамон онҳоро аз инфрасохтор ва нигарониҳои CI/CD ҳангоми татбиқ озод кунем. Хулоса, муносибати мо ба таҳиягарон нигаронида шудааст.

Дар ниҳоят, ҳама чиз дар бораи барномаи шумо бояд ба шабака пайваст бошад. Дар тӯли 20 соли охир, мо ба сӯи ояндаи шабакавӣ қадамҳои бузург гузоштем, зеро шабакаҳо тезтар ва барномаҳо мураккабтар мешаванд. Тавре ки мо аллакай дидем, замимаи муосир бояд тавассути шабака аз ҷониби мизоҷони гуногун истифода шавад. Татбиқи тафаккури шабакавӣ дар меъморӣ бартариҳои назаррас дорад, ки бо онҳо хуб мувофиқат мекунанд Принсипи хурдӣ ва консепсияи равиш, таҳиякунанда нигаронида шудааст.

Агар шумо ин принсипҳоро ҳангоми таҳия ва татбиқи барнома дар хотир нигоҳ доред, шумо дар таҳия ва таҳвили маҳсулоти худ бартарии раднашаванда хоҳед дошт.

Биёед ин се принсипро муфассалтар дида бароем.

Принсипи хурдӣ

Барои майнаи инсон дар як вақт миқдори зиёди иттилоотро қабул кардан душвор аст. Дар психология истилоҳи сарбории маърифатӣ ба ҳаҷми умумии кӯшишҳои равонӣ барои нигоҳ доштани иттилоот дар хотира дахл дорад. Паст кардани сарбории маърифатӣ ба таҳиягарон авлавият дорад, зеро он ба онҳо имкон медиҳад, ки ба ҳалли мушкилот диққат диҳанд, ба ҷои нигоҳ доштани модели мураккаби кунунии тамоми барнома ва хусусиятҳои дар сари онҳо таҳияшуда.

Принсипҳои таҳияи замимаҳои муосир аз NGINX. Қисми 1

Барномаҳо бо сабабҳои зерин пароканда мешаванд:

  • Кам шудани сарбории маърифатӣ ба таҳиягарон;
  • суръатбахшӣ ва соддагардонии санҷиш;
  • Интиқоли зуди тағирот дар барнома.


Якчанд роҳҳо барои кам кардани сарбории маърифатӣ ба таҳиягарон вуҷуд доранд ва дар ин ҷо принсипи хурдӣ ба кор меояд.

Пас, дар ин ҷо се роҳи кам кардани сарбории маърифатӣ ҳастанд:

  1. Чаҳорчӯбаи вақтро, ки онҳо ҳангоми таҳияи як хусусияти нав бояд ба назар гиранд, кам кунед - чаҳорчӯбаи вақт кӯтоҳтар бошад, сарбории маърифатӣ камтар аст.
  2. Миқдори кодеро, ки дар он кори яквақта иҷро мешавад, кам кунед - камтар код - бори камтар.
  3. Раванди ворид кардани тағйироти афзоянда ба барномаро содда кунед.

Коҳиш додани давраи рушд

Баргардем ба айёме, ки методология waterfall стандарти раванди таҳия буд ва чаҳорчӯбаи вақт аз шаш моҳ то ду сол барои таҳия ё навсозии барнома таҷрибаи маъмулӣ буд. Одатан, муҳандисон аввал ҳуҷҷатҳои дахлдорро аз қабили талаботи маҳсулот (PRD), ҳуҷҷати истинод ба система (SRD), нақшаи меъморӣ мехонанд ва ба муттаҳид кардани ҳамаи ин чизҳо дар як модели маърифатӣ, ки мувофиқи он рамзгузорӣ шудаанд, оғоз мекунанд. Азбаски талабот ва аз ин рӯ, меъморӣ тағир ёфт, кӯшиши ҷиддӣ бояд барои огоҳ кардани тамоми даста дар бораи навсозиҳои модели маърифатӣ анҷом дода шавад. Чунин муносибат, бадтаринаш, метавонист корро фалаҷ кунад.

Бузургтарин тағирот дар раванди таҳияи барномаҳо ҷорӣ намудани методологияи agile буд. Яке аз хусусиятхои асосии методология agile инкишофи такроршаванда мебошад. Дар навбати худ, ин боиси кам шудани сарбории маърифатии муҳандисон мегардад. Ба ҷои он ки аз гурӯҳи таҳиягарон татбиқи барномаро дар як давраи тӯлонӣ талаб кунад, agile Муносибат ба шумо имкон медиҳад, ки ба миқдори ками кодҳо, ки метавонанд зуд санҷида шаванд ва ҷойгир карда шаванд, ва ҳамзамон гирифтани фикру мулоҳизаҳо. Сарбории маърифатии барнома аз чаҳормоҳаи шашмоҳа ба дусола бо миқдори зиёди мушаххасот барои илова ё тағири хусусият дар ду ҳафта, ки ба фаҳмиши норавшани як барномаи калон нигаронида шудааст, гузашт.

Гузаронидани диққат аз як барномаи азим ба хусусиятҳои мушаххаси хурд, ки метавонанд дар як спринти дуҳафтаина анҷом дода шаванд, бо назардошти на бештар аз як хусусият дар спринти навбатӣ, тағироти назаррас аст. Ин ба мо имкон дод, ки маҳсулнокии рушдро дар баробари кам кардани сарбории маърифатӣ, ки доимо тағйирёбанда буд, зиёд кунем.

Дар методология agile Интизор меравад, ки барномаи ниҳоӣ як версияи каме тағирёфтаи консепсияи аслӣ бошад, бинобар ин нуқтаи ниҳоии рушд ҳатман норавшан аст. Танҳо натиҷаҳои ҳар як спринти мушаххас метавонанд равшан ва дақиқ бошанд.

Пойгоҳҳои кодҳои хурд

Қадами навбатӣ дар коҳиш додани сарбории маърифатӣ кам кардани пойгоҳи код мебошад. Одатан, замимаҳои замонавӣ азим мебошанд - як барномаи мустаҳкам ва корхона метавонад аз ҳазорҳо файл ва садҳо ҳазор сатрҳои код иборат бошад. Вобаста аз тарзи ташкили файлҳо, пайвандҳо ва вобастагӣ байни код ва файлҳо метавонанд аён бошанд ё баръакс. Ҳатто худи иҷроиши коди ислоҳи хато метавонад вобаста ба китобхонаҳои истифодашуда ва то чӣ андоза асбобҳои ислоҳкунӣ байни китобхонаҳо/бастаҳо/модулҳо ва коди фармоишӣ фарқ мекунанд, мушкил бошад.

Сохтани модели равонии кории коди барнома метавонад вақти таъсирбахшро талаб кунад ва бори дигар бори гарони маърифатиро бар дӯши таҳиякунанда мегузорад. Ин махсусан ба асосҳои коди монолитӣ дахл дорад, ки дар он миқдори зиёди код мавҷуд аст, таъсири мутақобилаи ҷузъҳои функсионалии онҳо дақиқ муайян карда нашудааст ва ҷудокунии объектҳои диққат аксар вақт норавшан мешавад, зеро сарҳадҳои функсионалӣ риоя карда намешаванд.

Яке аз роҳҳои самарабахши коҳиш додани сарбории маърифатӣ ба муҳандисон ин гузаштан ба меъмории хидматрасонии хурд мебошад. Дар равиши хидматрасонии хурд, ҳар як хидмат ба як маҷмӯи хусусиятҳо тамаркуз мекунад; дар ҳоле ки маънои хидмат одатан муайян ва фаҳмо аст. Ҳудуди хидмат низ равшан аст - дар хотир доред, ки иртибот бо хидмат тавассути API анҷом дода мешавад, бинобар ин маълумоте, ки аз як хидмат тавлид мешавад, ба осонӣ ба дигараш интиқол дода мешавад.

Муносибат бо хидматҳои дигар одатан бо чанд хидмати корбар ва чанд хидматрасонии провайдерӣ маҳдуд аст, ки зангҳои содда ва тозаи API-ро истифода мебаранд, ба монанди истифодаи REST. Ин маънои онро дорад, ки сарбории маърифатӣ ба муҳандис хеле кам шудааст. Мушкилоти калонтарин фаҳмидани модели мутақобилаи хидматҳо ва чӣ гуна ҳодисаҳо ба монанди транзаксияҳо дар як қатор хидматҳо рух медиҳанд. Дар натиҷа, истифодаи микросервисҳо сарбории маърифатиро тавассути кам кардани миқдори код, муайян кардани сарҳадҳои дақиқи хидмат ва таъмини фаҳмиши муносибати байни корбарон ва провайдерҳо коҳиш медиҳад.

Тағироти хурди афзоянда

Унсури охирини принсип хурдӣ идоракунии тағйирот аст. Ин як васвасаи махсус барои таҳиягарон аст, ки ба пойгоҳи код (ҳатто шояд коди кӯҳнаи худи онҳо) нигаранд ва бигӯянд: "Ин сафсата аст, мо бояд ҳамаашро аз нав нависем." Баъзан ин қарори дуруст аст ва баъзан не. Он бори гарони тағирёбии модели ҷаҳониро ба дӯши дастаи рушд мегузорад, ки дар навбати худ ба сарбории бузурги маърифатӣ оварда мерасонад. Беҳтар аст, ки муҳандисон ба тағиротҳое, ки дар давоми спринт ворид карда метавонанд, тамаркуз кунанд, то онҳо тавонанд функсияҳои заруриро, ҳарчанд тадриҷан бошад, сари вақт иҷро кунанд. Маҳсулоти ниҳоӣ бояд ба маҳсулоти қаблан ба нақша гирифташуда монанд бошад, аммо бо баъзе тағиротҳо ва озмоишҳо барои мувофиқ кардани ниёзҳои муштарӣ.

Ҳангоми аз нав навиштани қисмҳои зиёди код, баъзан зуд интиқол додани тағирот имконнопазир аст, зеро дигар вобастагии система ба бозӣ меоянд. Барои назорат кардани ҷараёни тағирот, шумо метавонед пинҳон кардани хусусиятро истифода баред. Аслан, ин маънои онро дорад, ки функсия дар истеҳсолот аст, аммо он бо истифода аз танзимоти тағирёбандаи муҳити зист (env-var) ё ягон механизми дигари конфигуратсия дастрас нест. Агар код аз тамоми равандҳои назорати сифат гузашта бошад, он метавонад дар ҳолати ниҳонӣ дар истеҳсолот хотима ёбад. Аммо, ин стратегия танҳо дар сурате кор мекунад, ки ин хусусият дар ниҳоят фаъол бошад. Дар акси ҳол, он танҳо кодро вайрон мекунад ва сарбории маърифатиро илова мекунад, ки таҳиякунанда бояд барои самаранок будан мубориза барад. Идоракунии тағирот ва тағироти афзоянда худ ба нигоҳ доштани сарбории маърифатии таҳиягарон дар сатҳи дастрас кӯмак мекунанд.

Муҳандисон бояд душвориҳои зиёдеро ҳатто бо ҷорӣ кардани оддии функсияҳои иловагӣ бартараф кунанд. Аз тарафи рохбарият окилона мебуд, ки бори нолозим ба даста кам карда шавад, то ки вай ба унсурхои асосии функсионалй тамаркуз кунад. Се чизест, ки шумо метавонед барои кӯмак ба дастаи рушди худ кунед:

  1. Истифодаи методология agileбарои махдуд кардани мухлате, ки дар он коллектив бояд ба хислатхои асосй диккат дихад.
  2. Аризаи худро ҳамчун микросервисҳои сершумор амалӣ кунед. Ин шумораи хусусиятҳоеро, ки метавонанд амалӣ шаванд, маҳдуд мекунад ва сарҳадҳоеро, ки сарбории маърифатиро дар кор нигоҳ медоранд, мустаҳкам мекунад.
  3. Тағироти афзояндаро нисбат ба калон ва ноустувор бартарӣ диҳед, қисмҳои хурди кодро иваз кунед. Пинҳон кардани хусусиятро барои амалисозии тағирот истифода баред, ҳатто агар онҳо фавран пас аз илова намоён нашаванд.

Агар шумо дар кори худ принципи хурдро ба кор баред, коллективи шумо хеле хушбахттар мешавад, ба амалй гардондани хусусиятхои зарурй бештар тамаркуз мекунад ва эхтимолияти тезтар ба амал баровардани дигаргунихои сифатй мегардад. Аммо ин маънои онро надорад, ки кор наметавонад мураккабтар шавад, баъзан, баръакс, ҷорӣ намудани функсияҳои нав тағир додани якчанд хидматҳоро талаб мекунад ва ин раванд метавонад нисбат ба монанд дар меъмории монолитӣ душвортар бошад. Дар ҳар сурат, фоидаи гирифтани муносибати хурдӣ арзанда аст.

Охири қисми якум.

Ба наздикӣ қисми дуюми тарҷумаро нашр мекунем ва ҳоло интизори шарҳҳои шумо ҳастем ва шуморо ба рӯзи кушода, ки имруз соати 20.00 барпо мегардад.

Манбаъ: will.com

Илова Эзоҳ