Монорепозиторийҳо: лутфан, ҳатман

Монорепозиторийҳо: лутфан, ҳатман

Тарҷумаи мақола барои донишҷӯёни курс омода шудааст "Амалҳо ва асбобҳои DevOps" дар лоиҳаи таълимии OTUS.

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

Чаро мо дар ин бора сухан меронем?

Мат Клейн мақола навиштааст "Монорепос: Лутфан накунед!"  (Эзоҳ аз тарҷумон: тарҷума дар бораи Habré "Монорепозиторийҳо: лутфан ин корро накунед"). Ман Матро дӯст медорам, ман фикр мекунам, ки вай хеле оқил аст ва шумо бояд нуқтаи назари ӯро хонед. Ӯ аслан ин назарсанҷиро дар Твиттер нашр кард:

Монорепозиторийҳо: лутфан, ҳатман

тарҷумаи:
Дар ин рӯзи Соли нав, ман дар бораи он, ки монорепозиторийҳо чӣ гуна хандаоваранд, баҳс мекунам. Соли 2019 оромона оғоз шуд. Дар рӯҳияи ин, ман ба шумо як назарсанҷӣ пешниҳод мекунам. Фанатикҳои калон кистанд? Тарафдорон:
- Монорепо
- зангин
- Назарсанҷии нодуруст / ҳарду

Ҷавоби ман ин буд, ки "ман аслан ҳарду аз он одамон ҳастам." Ба ҷои он ки дар бораи чӣ тавр Rust маводи мухаддир аст, гап, биёед бубинем, ки чаро ман фикр мекунам, ки ӯ дар бораи монорепозиторийҳо хато мекунад. Як каме дар бораи худ. Ман CTO оид ба Chef Software ҳастам. Мо тақрибан 100 муҳандис дорем, базаи рамзӣ тақрибан 11-12 сол ва 4 маҳсулоти асосӣ дорем. Баъзе аз ин рамз дар полирепозиторий (мавқеи ибтидоии ман), баъзеи дигар дар монорепозиторий (мавқеи кунунии ман) ҷойгиранд.

Пеш аз он ки ман оғоз кунам: ҳар як далеле, ки ман дар ин ҷо меорам, ба ҳарду намуди анборҳо дахл хоҳад дошт. Ба андешаи ман, ягон сабаби техникӣ вуҷуд надорад, ки чаро шумо бояд як намуди анбори дигарро интихоб кунед. Шумо метавонед ҳама гуна равишро ба кор баред. Ман хурсандам, ки дар ин бора сухан ронам, аммо маро ба сабабҳои сунъии техникӣ, ки чаро яке аз дигараш бартарӣ дорад, таваҷҷуҳ надорам.

Ман бо қисми якуми нуктаи Мат розӣ ҳастам:

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

Новобаста аз он ки шумо монорепозиторий ё полирепозиторийро интихоб мекунед, шумо бояд ҳамон мушкилотро ҳал кунед. Чӣ тавр шумо релизҳоро нашр мекунед? Муносибати шумо ба навсозӣ чӣ гуна аст? Мутобиқати ақиб? Вобастагии байни лоиҳа? Кадом услубҳои меъморӣ қобили қабуланд? Шумо инфрасохтори сохтмон ва санҷиши худро чӣ гуна идора мекунед? Рӯйхат беохир аст. Ва шумо ҳамаи онҳоро ҳангоми ба воя расиданатон ҳал хоҳед кард. Панири бепул нест.

Ман фикр мекунам, ки далели Мэтт ба нуқтаи назари бисёре аз муҳандисон (ва менеҷерҳо) монанд аст, ки ман эҳтиром мекунам. Ин аз нуқтаи назари муҳандис, ки дар ҷузъ кор мекунад ё гурӯҳе, ки дар ҷузъ кор мекунад, рух медиҳад. Шумо чунин чизҳоро мешунавед:

  • Пойгоҳи кодҳо калон аст - ба ман ин ҳама партовҳо лозим нест.
  • Санҷиш душвортар аст, зеро ман бояд ҳамаи ин партовҳоро, ки ба ман лозим нестанд, санҷам.
  • Бо вобастагии беруна кор кардан душвортар аст.
  • Ба ман системаҳои идоракунии версияи виртуалии худ ниёз дорам.

Албатта, хамаи ин нуктахо асосноканд. Ин дар хар ду маврид руй медихад — дар полирепозиторий ман ба гайр аз он ки барои сохтан зарур аст, ман партовхои шахсии худро дорам... Шояд ба ман дигар партовхо низ лозим бошад. Ҳамин тавр, ман асбобҳоеро эҷод мекунам, ки тамоми лоиҳаро тафтиш мекунанд. Ё ман бо зермодулҳо монорепозиторийҳои қалбакӣ эҷод мекунам. Мо метавонем тамоми рӯз дар атрофи ин ҷо гардем. Аммо ман фикр мекунам, ки далели Мэтт сабаби асосиро аз даст медиҳад, ки ман онро ба манфиати монорепозиторий хеле сахт задам:

Он муоширатро ба вуҷуд меорад ва мушкилотро нишон медиҳад

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

Азбаски меъморӣ мураккабтар мешавад, як даста дигар онро танҳо идора карда наметавонад. Хеле ками муҳандисон тамоми системаро дар сари худ доранд. Фарз мекунем, ки шумо як ҷузъи муштараки А-ро идора мекунед, ки онро дастаҳои B, C ва D истифода мебаранд. Гурӯҳи A рефакторинг, такмил додани API ва инчунин татбиқи дохилиро тағир медиҳад. Дар натиҷа, тағиротҳо ба ақиб мувофиқ нестанд. Шумо чӣ маслиҳат доред?

  • Ҳама ҷойҳоеро, ки API-и кӯҳна истифода мешавад, пайдо кунед.
  • Оё ҷойҳое ҳастанд, ки API-и навро истифода бурдан мумкин нест?
  • Оё шумо метавонед ҷузъҳои дигарро ислоҳ ва санҷед, то боварӣ ҳосил кунед, ки онҳо вайрон намешаванд?
  • Оё ин дастаҳо метавонанд тағиротҳои шуморо худи ҳозир санҷанд?

Лутфан қайд кунед, ки ин саволҳо аз намуди анборҳо вобаста нестанд. Шумо бояд дастаҳои B, C ва D-ро пайдо кунед. Шумо бояд бо онҳо сӯҳбат кунед, вақтро фаҳмед ва афзалиятҳои онҳоро фаҳмед. Ҳадди ақал мо умедворем, ки шумо хоҳед.

Ҳеҷ кас воқеан ин корро кардан намехоҳад. Ин назар ба ислоҳ кардани API-и лаънатӣ хеле шавқовар аст. Ин ҳама одамӣ ва бесарусомонӣ аст. Дар полирепозиторий, шумо метавонед танҳо тағирот ворид кунед, онро ба одамоне, ки дар он ҷузъ кор мекунанд (шояд B, C ё D) барои баррасии он диҳед ва идома диҳед. Дастаҳои B, C ва D метавонанд ҳоло бо версияи кунунии худ бимонанд. Вақте ки онҳо нобиғаи шуморо дарк мекунанд, нав карда мешаванд!

Дар монорепозиторий масъулият ба таври нобаёнӣ иваз карда мешавад. Дастаи А ҷузъи худро иваз мекунад ва агар эҳтиёт нашавед, дарҳол B, C ва D-ро мешиканад. Ин ба он оварда мерасонад, ки B, C ва D дар дари А ҳозир мешаванд ва ҳайрон мешаванд, ки чаро дастаи А ҷамъомадро вайрон кардааст. Ин ба A таълим медиҳад, ки онҳо наметавонанд рӯйхати маро дар боло гузаред. Онҳо бояд дар бораи чӣ кор карданашон сӯҳбат кунанд. Оё B, C ва D ҳаракат карда метавонанд? Чӣ мешавад, агар B ва C тавонанд, аммо D бо таъсири ҷониби рафтори алгоритми кӯҳна алоқаманд буд?

Он гоҳ мо бояд дар бораи чӣ гуна аз ин вазъ баромадан сӯҳбат кунем:

  1. Дастгирии API-ҳои сершумори дохилӣ ва алгоритми кӯҳнаро ҳамчун бекоршуда қайд мекунад, то даме ки D истифодаи онро қатъ накунад.
  2. Дастгирии версияҳои сершумор, яке бо интерфейси кӯҳна ва дигаре бо интерфейси нав.
  3. То он даме, ки B, C ва D ҳамзамон онро қабул карда тавонанд, барориши тағиротҳои А-ро ба таъхир андозед.

Биёед бигӯем, ки мо 1, якчанд API-ро интихоб кардем. Дар ин ҳолат мо ду дона код дорем. Кӯҳна ва нав. Дар баъзе ҳолатҳо хеле қулай. Мо рамзи кӯҳнаро дубора тафтиш мекунем, онро ҳамчун бекоршуда қайд мекунем ва дар бораи ҷадвали ҳазф бо дастаи D мувофиқа мекунем. Аслан барои анбори поли ва моно якхела аст.

Барои баровардани версияҳои сершумор ба мо филиал лозим аст. Ҳоло мо ду ҷузъ дорем - A1 ва A2. Дастаҳои B ва C A2 ва D A1-ро истифода мебаранд. Мо бояд ҳар як ҷузъро барои баровардан омода кунем, зеро пеш аз он ки D пеш равад, навсозиҳои амниятӣ ва ислоҳи хатогиҳои дигар талаб карда шаванд. Дар полирепозиторий, мо метавонем инро дар шохаи дарозмуддат пинҳон кунем, ки худро хуб ҳис мекунад. Дар монорепозиторий мо кодро маҷбур мекунем, ки дар модули нав сохта шавад. Дастаи D ҳанӯз бояд ба ҷузъи "кӯҳна" тағйирот ворид кунад. Ҳама метавонанд хароҷотеро, ки мо дар ин ҷо пардохт мекунем, бубинанд - ҳоло мо ду баробар зиёд код дорем ва ҳама ислоҳи хатогиҳое, ки ба A1 ва A2 дахл доранд, бояд ба ҳардуи онҳо татбиқ шаванд. Бо равиши шохаҳо дар полирепозиторий, ин дар паси cherry-pick пинҳон аст. Мо арзиши онро арзон меҳисобем, зеро такрор нест. Аз нуқтаи назари амалӣ, арзиши якхела аст: шумо то он даме, ки яке аз онҳоро нест кунед, шумо ду пойгоҳи коди якхеларо сохта, озод ва нигоҳ медоред. Фарқият дар он аст, ки бо монорепозиторий ин дард мустақим ва намоён аст. Ин боз ҳам бадтар аст ва ин хуб аст.

Ниҳоят, мо ба нуқтаи сеюм расидем. Таъхири озод. Мумкин аст, ки тағиротҳои аз ҷониби А воридшуда ҳаёти дастаи Аро беҳтар кунанд. Муҳим, вале таъхирнопазир нест. Оё мо метавонем танҳо таъхир кунем? Дар полирепозиторий, мо инро барои пайваст кардани артефакт тела медиҳем. Албатта, мо инро ба дастаи D мегӯем. Фақат то расидан ба версияи кӯҳна бимонед! Ин шуморо водор мекунад, ки тарсончак бозӣ кунед. Дастаи A корро дар ҷузъҳои худ идома дода, ба он аҳамият намедиҳад, ки дастаи D версияи торафт кӯҳнашударо истифода мебарад (ин мушкили дастаи D аст, онҳо аблаҳанд). Дар ҳамин ҳол, Team D дар бораи муносибати беэҳтиётонаи дастаи А ба устувории код, агар онҳо дар ин бора умуман гап зананд, бад гап мезанад. Моххо мегузарад. Ниҳоят, дастаи D тасмим гирифт, ки имкони навсозӣро баррасӣ кунад, аммо A танҳо тағироти бештар дорад. Дастаи A базӯр ёд надорад, ки онҳо кай ва чӣ тавр D шикастанд. Навсозӣ дардовартар аст ва вақти зиёдтар мегирад. Ки онро ба стэк афзалиятнок мефиристад. То рӯзе, ки мо як масъалаи амният дар A, ки моро маҷбур ба як филиал. Дастаи А бояд ба замон баргардад, нуқтаеро, ки D устувор буд, пайдо кунад, мушкилотро дар он ҷо ислоҳ кунад ва онро барои озод кардан омода созад. Ин интихоби воқеии одамон аст ва он аз ҳама бадтарин аст. Чунин ба назар мерасад, ки ин барои ҳам дастаи А ва ҳам барои дастаи D хуб аст, то даме ки мо якдигарро нодида гирифта метавонем.

Дар монорепозиторий, сеюм дар ҳақиқат вариант нест. Шумо маҷбур мешавед, ки вазъиятро бо яке аз ду роҳ ҳал кунед. Шумо бояд хароҷоти доштани ду филиали озодро бубинед. Муҳофизати худро аз навсозиҳое, ки мутобиқати ақибро вайрон мекунанд, омӯзед. Аммо муҳимтар аз ҳама: аз сухбати душвор даст кашидан мумкин нест.

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

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

Танҳо корбарони сабтиномшуда метавонанд дар пурсиш иштирок кунанд. даромад, Лутфан.

Бузургтарин фанатҳо киҳоянд? Тарафдорон:

  • Монорепо

  • зангин

  • Назарсанҷии нодуруст / ҳарду

33 корбар овоз доданд. 13 корбар худдорӣ карданд.

Манбаъ: will.com

Илова Эзоҳ