Monorepositories: ʻoluʻolu, pono

Monorepositories: ʻoluʻolu, pono

Ka unuhi ʻana o ka ʻatikala i hoʻomākaukau ʻia no nā haumāna papa "Nā hana a me nā mea hana DevOps" i ka papahana hoʻonaʻauao OTUS.

Pono ʻoe e koho i kahi monorepository no ka mea ʻo ke ʻano e hoʻolaha ʻia ai i kāu mau hui he ʻokoʻa a me ke kuleana like, ʻoiai ke ulu nei nā hui. ʻO kēlā me kēia ʻaoʻao, pono ʻoe e hoʻolilo i ka mea hana, akā ʻoi aku ka maikaʻi inā ʻo ka hana paʻamau ka ʻano āu e makemake ai i kāu mau kauoha.

No ke aha mākou e kamaʻilio nei no kēia?

Ua kākau ʻo Matt Klein i ka ʻatikala "Monorepos: Mai ʻoluʻolu!"  (memo a ka mea unuhi: unuhi ma Habré "Monorepositories: mai ʻoluʻolu"). Makemake au iā Matt, manaʻo wau he akamai loa ʻo ia a pono ʻoe e heluhelu i kona manaʻo. Ua hoʻopuka mua ʻo ia i ke koho balota ma Twitter:

Monorepositories: ʻoluʻolu, pono

Unuhi:
I kēia lā Makahiki Hou, e hoʻopaʻapaʻa wau e pili ana i ke ʻano hoʻohenehene o nā monorepositories. Ua hoʻomaka mālie ʻo 2019. Ma ka manaʻo o kēia, hāʻawi wau iā ʻoe i kahi loiloi. ʻO wai ka poʻe manaʻo nui? Kākoʻo:
- Monorepo
- lepo
- Ke koho hewa ʻole / ʻelua

ʻO kaʻu pane ʻana, "ʻO wau ʻelua o kēlā poʻe." Ma mua o ke kamaʻilio ʻana no ke ʻano o ka lāʻau lapaʻau ʻo Rust, e nānā kākou i ke kumu o koʻu manaʻo ua hewa ʻo ia e pili ana i nā monorepositories. He wahi liʻiliʻi e pili ana iā ʻoe iho. ʻO wau ke CTO o Chef Software. Loaʻa iā mākou ma kahi o 100 mau ʻenehana, kahi code base e hoʻi ana ma kahi o 11-12 mau makahiki, a me 4 mau huahana nui. Aia kekahi o kēia code i kahi polyrepository (koʻu kūlana hoʻomaka), aia kekahi i kahi monorepository (koʻu kūlana i kēia manawa).

Ma mua o koʻu hoʻomaka ʻana: ʻo kēlā me kēia hoʻopaʻapaʻa aʻu e hana ai ma aneʻi e pili ana i nā ʻano waihona ʻelua. I koʻu manaʻo, ʻaʻohe kumu ʻenehana e koho ai ʻoe i kahi ʻano waihona ma luna o kekahi. Hiki iā ʻoe ke hana i kēlā me kēia ʻano hana. Hauʻoli wau e kamaʻilio e pili ana i ia mea, akā ʻaʻole wau makemake i nā kumu ʻenehana hana no ke kumu i ʻoi aku ai kekahi ma mua o kekahi.

ʻAe wau i ka hapa mua o ka manaʻo o Matt:

No ka mea ma ka pālākiō, e hoʻoponopono kahi monorepository i nā pilikia like a polyrepository e hoʻonā ai, akā i ka manawa like e koi ana iā ʻoe e hoʻopaʻa paʻa i kāu code a koi aku i nā hana nui e hoʻonui i ka scalability o kāu ʻōnaehana mana mana.

Pono ʻoe e hoʻoponopono i nā pilikia like ʻole inā ʻoe e koho i kahi monorepository a i ʻole polyrepository. Pehea ʻoe e hoʻokuʻu ai i nā hoʻokuʻu? He aha kāu ʻano i nā mea hou? Hoʻopili i hope? ʻO nā hilinaʻi pāhana keʻa? He aha nā ʻano hana hale e ʻae ʻia? Pehea ʻoe e hoʻokele ai i kāu hana kūkulu a hoʻāʻo? ʻAʻole pau ka papa inoa. A e hoʻoponopono ʻoe iā lākou a pau i kou ulu ʻana. ʻAʻohe paʻakai manuahi.

Manaʻo wau ua like ka hoʻopaʻapaʻa a Matt me nā manaʻo i hōʻike ʻia e nā ʻenekini (a me nā luna) aʻu e mahalo nei. Loaʻa kēia mai ka manaʻo o ka ʻenekinia e hana ana i ka ʻāpana a i ʻole ka hui e hana ana i ka ʻāpana. Lohe ʻoe i nā mea e like me:

  • Nui ka codebase - ʻaʻole pono wau i kēia ʻōpala āpau.
  • ʻOi aku ka paʻakikī o ka hoʻāʻo ʻana no ka mea pono wau e hoʻāʻo i kēia ʻōpala āpau aʻu e pono ʻole ai.
  • ʻOi aku ka paʻakikī o ka hana ʻana me nā mea hilinaʻi o waho.
  • Pono wau i kaʻu mau ʻōnaehana mana mana mana.

ʻOiaʻiʻo, ua kūpono kēia mau mea a pau. Hana ʻia kēia ma nā hihia ʻelua - i loko o ka polyrepository loaʻa iaʻu kaʻu ʻōpala ponoʻī, me ka mea e pono ai no ke kūkulu ʻana ... pono paha wau i nā ʻōpala ʻē aʻe. No laila, "hana" wau i nā mea hana e nānā i ka papahana holoʻokoʻa. A i ʻole hana wau i kahi monorepository hoʻopunipuni me nā submodules. Hiki iā mākou ke hele a puni i kēia lā a pau. Akā, ke manaʻo nei au ua nalo ka hoʻopaʻapaʻa a Matt i ke kumu nui, aʻu i hoʻohuli nui ai i ka monorepository:

Hoʻonāukiuki ia i ke kamaʻilio a hōʻike i nā pilikia

Ke hoʻokaʻawale mākou i nā waihona, hana mākou i kahi pilikia de facto o ka hoʻonohonoho ʻana a me ka ʻike. Pili kēia i ke ʻano o ko mākou noʻonoʻo ʻana i nā hui (ʻoi aku ka manaʻo o kēlā me kēia lālā e pili ana iā lākou): iā mākou ke kuleana no kekahi ʻāpana. Hana mākou ma kahi kaʻawale. Hoʻopaʻa ʻia nā palena ma kaʻu hui a me nā mea a mākou e hana nei.

I ka lilo ʻana o ka paʻakikī, ʻaʻole hiki i hoʻokahi hui ke hoʻokele iā ia wale nō. He kakaikahi loa ka poe enekinia i ka nenoaiu holookoa ma ko lakou poo. E ʻōlelo mākou e hoʻokele ʻoe i kahi māhele A i hoʻohana ʻia e nā hui B, C, a me D. Ke hana hou nei ka hui A, hoʻomaikaʻi i ka API, a hoʻololi pū i ka hoʻokō kūloko. ʻO ka hopena, ʻaʻole kūpono nā hoʻololi i hope. He aha kāu ʻōlelo aʻo?

  • E huli i nā wahi a pau i hoʻohana ʻia ai ka API kahiko.
  • Aia nā wahi i hiki ʻole ke hoʻohana ʻia ka API hou?
  • Hiki iā ʻoe ke hoʻoponopono a hoʻāʻo i nā ʻāpana ʻē aʻe e ʻike pono ʻaʻole lākou e haki?
  • Hiki i kēia mau hui ke hoʻāʻo i kāu mau hoʻololi i kēia manawa?

E ʻoluʻolu e hoʻomaopopo he kūʻokoʻa kēia mau nīnau i ke ʻano waihona. Pono ʻoe e ʻimi i nā hui B, C a me D. Pono ʻoe e kamaʻilio me lākou, ʻike i ka manawa, hoʻomaopopo i kā lākou mau mea nui. Ma ka liʻiliʻi, manaʻolana mākou e hana ʻoe.

ʻAʻohe mea makemake e hana i kēia. He mea leʻaleʻa loa kēia ma mua o ka hoʻoponopono ʻana i ka API damn. ʻO ke kanaka a me ka pōʻino. I loko o kahi polyrepository, hiki iā ʻoe ke hana i nā loli, hāʻawi iā ia i ka poʻe e hana ana i kēlā ʻāpana (ʻaʻole paha ʻo B, C a i ʻole D) no ka loiloi, a neʻe. Hiki i nā hui B, C a me D ke noho me kā lākou mana o kēia manawa no kēia manawa. E hōʻano hou ʻia lākou ke ʻike lākou i kou akamai!

I loko o kahi monorepository, ua hoʻololi ʻia ke kuleana e ka paʻamau. Hoʻololi ka Pūʻulu A i kā lākou ʻāpana a, inā ʻaʻole makaʻala, wāwahi koke ʻo B, C a me D. Ke alakaʻi nei kēia i ka hōʻike ʻana o B, C a me D ma ka puka o A, me ka noʻonoʻo i ke kumu i haki ai ka hui A i ka hui. Ke aʻo nei kēia iā A ʻaʻole hiki iā lākou ke hoʻokuʻu i kaʻu papa inoa ma luna. Pono lākou e kamaʻilio e pili ana i kā lākou mea e hana ai. Hiki iā B, C a me D ke neʻe? He aha inā hiki iā B a me C, akā pili pili ʻo D i kahi hopena ʻaoʻao o ka hana algorithm kahiko?

A laila pono mākou e kamaʻilio e pili ana i ke ala e puka ai mākou mai kēia kūlana:

  1. Kākoʻo no nā API kūloko he nui, a e hōʻailona i ka algorithm kahiko i hoʻopau ʻia a hiki i ka D hiki ke ho'ōki i ka hoʻohana ʻana.
  2. Kākoʻo no nā mana hoʻokuʻu he nui, hoʻokahi me ka interface kahiko, hoʻokahi me ka mea hou.
  3. Hoʻopaneʻe i ka hoʻokuʻu ʻana o nā hoʻololi o A a hiki i ka B, C, a me D ke ʻae like.

E ʻōlelo mākou ua koho mākou i 1, mau API. I kēia hihia, loaʻa iā mākou ʻelua ʻāpana code. Kahiko a me ka mea hou. Maikaʻi loa i kekahi mau kūlana. E nānā hou mākou i ke code kahiko, e hōʻailona i ka pau ʻole, a ʻae i kahi papa hoʻoneʻe me ka hui D.

No ka hoʻokuʻu ʻana i nā mana he nui, pono mākou i kahi lālā. I kēia manawa ua loaʻa iā mākou ʻelua ʻāpana - A1 a me A2. Hoʻohana nā hui B a me C iā A2 a me D hoʻohana iā A1. Pono mākou e mākaukau nā mea āpau no ka hoʻokuʻu ʻana no ka mea e koi ʻia nā hoʻoponopono palekana a me nā hoʻoponopono ʻē aʻe ma mua o ka neʻe ʻana o D i mua. I loko o kahi polyrepository, hiki iā mākou ke hūnā i kēia ma kahi lālā lōʻihi e manaʻo maikaʻi. I loko o kahi monorepository, koi mākou i ke code e hana ʻia i kahi module hou. Pono ka hui D e hoʻololi i ka ʻāpana "kahiko". Hiki i ka poʻe a pau ke ʻike i ke kumukūʻai a mākou e uku nei ma ʻaneʻi - ʻelua kā mākou code i kēia manawa, a pono e pili nā hoʻoponopono bug e pili ana iā A1 a me A2 iā lāua ʻelua. Me ka hoʻokokoke lālā i loko o kahi polyrepository, hūnā ʻia kēia ma hope o ka cherry-pick. Manaʻo mākou he haʻahaʻa ke kumu kūʻai no ka mea ʻaʻohe lua. Mai kahi hiʻohiʻona kūpono, ua like ke kumukūʻai: kūkulu ʻoe, hoʻokuʻu, a mālama i ʻelua codebases like ʻole a hiki iā ʻoe ke holoi i kekahi o ia mau mea. ʻO ka ʻokoʻa ʻo ia me kahi monorepository ua pololei a ʻike ʻia kēia ʻeha. ʻOi aku ka ʻino o kēia, a maikaʻi kēlā.

ʻO ka hope, ua hiki mākou i ka helu ʻekolu. Hoʻopaneʻe hoʻokuʻu. Hiki paha i nā loli i hana ʻia e A e hoʻomaikaʻi i ke ola o ka Hui A. He mea nui, akā ʻaʻole wikiwiki. Hiki iā mākou ke hoʻopaneʻe wale? I loko o kahi polyrepository, paʻi mākou i kēia e pine i ka artifact. ʻOiaʻiʻo, ke haʻi aku nei mākou i kēia i ka Hui D. E noho wale ma ka mana kahiko a hiki i ka wā e loaʻa ai! Hoʻonohonoho kēia iā ʻoe e pāʻani i ka makaʻu. Ke hoʻomau nei ka Hui A i ka hana ma kā lākou ʻāpana, me ka nānā ʻole i ka hoʻohana ʻana o Team D i kahi mana kahiko loa (ʻo ia ka pilikia o Team D, naʻaupō lākou). I kēia manawa, kamaʻilio maikaʻi ʻole ʻo Team D e pili ana i ka manaʻo mālama ʻole o ka Team A i ke kūpaʻa code, inā lākou e kamaʻilio e pili ana. Ua hala nā mahina. ʻO ka hope, ua hoʻoholo ʻo Team D e nānā i ka hiki ke hoʻonui, akā ʻo A wale nō nā loli hou. ʻAʻole hoʻomanaʻo ka Pūʻulu A i ka wā a pehea lākou i haki ai iā D. ʻOi aku ka ʻeha o ka hoʻonui ʻana a lōʻihi ka lōʻihi. ʻO ia ka mea e hoʻouna aku ai i lalo o ka puʻu mua. A hiki i ka lā i loaʻa iā mākou kahi pilikia palekana ma A e koi iā mākou e hana i lālā. Pono ka hui A e hoʻi i ka wā kahiko, e ʻimi i kahi i paʻa ai ʻo D, hoʻoponopono i ka pilikia ma laila, a hoʻomākaukau no ka hoʻokuʻu ʻana. ʻO kēia ka koho de facto a nā kānaka i hana ai, a ʻo ia ka mea ʻino loa. He mea maikaʻi ia no ka Hui A a me ka Hui D inā hiki iā mākou ke haʻalele i kekahi i kekahi.

I loko o kahi monorepository, ʻo ke kolu ʻaʻole ia he koho. Ua koi ʻia ʻoe e hoʻoponopono i ke kūlana ma kekahi o nā ala ʻelua. Ponoʻoe eʻike i nā kumukūʻai o ka loaʻaʻana o nā lālā hoʻokuʻuʻelua. E aʻo i ka pale ʻana iā ʻoe iho mai nā mea hou e wāwahi i ka hoʻohālikelike hope. Akā ʻo ka mea nui loa: ʻaʻole hiki iā ʻoe ke pale aku i kahi kamaʻilio paʻakikī.

I koʻu ʻike, i ka wā e nui ai nā hui, ʻaʻole hiki ke hoʻomanaʻo i ka ʻōnaehana holoʻokoʻa, a ʻo ia ka mea nui loa. Pono ʻoe e hoʻomaikaʻi i ka ʻike ʻana o ka hakakā ma ka ʻōnaehana. Pono ʻoe e hana ikaika e kiʻi i nā hui e nānā i kā lākou mau ʻāpana a nānā i ka hana a nā hui ʻē aʻe a me nā mea kūʻai aku.

ʻAe, hiki iā ʻoe ke hana i nā mea hana e hoʻāʻo e hoʻoponopono i ka pilikia polyrepository. Akā ʻo kaʻu ʻike e aʻo mau ana i ka hoʻouna ʻana a me ka automation i nā ʻoihana nui e haʻi mai iaʻu i kēia: ʻo ka hana maʻamau me ka ʻole o ka hoʻohana ʻana i nā mea hana hou ke ʻano āu e manaʻo ai e ʻike. ʻO ka hana maʻamau o kahi polyrepository he kaʻawale, ʻo ia ke kiko holoʻokoʻa. ʻO ka hana maʻamau o kahi monorepository ke kuleana like a me ka ʻike, ʻo ia ka mea āpau. Ma nā hihia ʻelua, e hana wau i kahi mea hana e hoʻomaʻemaʻe i nā kihi ʻino. Ma ke ʻano he alakaʻi, e koho wau i kahi monorepository i kēlā me kēia manawa no ka mea pono nā mea hana e hoʻoikaika i ka moʻomeheu aʻu e makemake ai, a ʻo ka moʻomeheu mai nā hoʻoholo liʻiliʻi a me ka hana o ka hui i kēlā me kēia lā.

Hiki i nā mea hoʻohana i hoʻopaʻa inoa ʻia ke komo i ka noiʻi. Eʻe, e 'oluʻolu.

ʻO wai ka poʻe manaʻo nui loa? Kākoʻo:

  • Monorepo

  • lepo

  • Ke koho hewa ʻole / ʻelua

33 mea hoʻohana i koho. Ua hōʻole nā ​​mea hoʻohana 13.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka