Monorepositories: කරුණාකර, කළ යුතුයි

Monorepositories: කරුණාකර, කළ යුතුයි

පාඨමාලා සිසුන් සඳහා සකස් කරන ලද ලිපියේ පරිවර්තනය "DevOps භාවිතයන් සහ මෙවලම්" OTUS අධ්‍යාපනික ව්‍යාපෘතියේ.

විශේෂයෙන් කණ්ඩායම් වර්ධනය වන විට එය ඔබේ කණ්ඩායම් තුළ ප්‍රවර්ධනය කරන හැසිරීම විනිවිදභාවය සහ හවුල් වගකීමක් වන බැවින් ඔබ ඒකාධිකාරයක් තෝරාගත යුතුය. ඕනෑම ආකාරයකින්, ඔබට මෙවලම් සඳහා ආයෝජනය කිරීමට සිදුවනු ඇත, නමුත් පෙරනිමි හැසිරීම ඔබේ විධානවල ඔබට අවශ්‍ය හැසිරීම නම් එය සැමවිටම වඩා හොඳය.

ඇයි අපි මේ ගැන කතා කරන්නේ?

මැට් ක්ලයින් ලිපිය ලිවීය "මොනොරෙපොස්: කරුණාකර එපා!"  (පරිවර්තක සටහන: Habré මත පරිවර්තනය "මොනොර්පොසිටරි: කරුණාකර එපා") මම මැට්ට කැමතියි, මම හිතන්නේ ඔහු ඉතා දක්ෂයි, ඔබ ඔහුගේ දෘෂ්ටිකෝණය කියවිය යුතුයි. ඔහු මුලින්ම ඡන්ද විමසීම ට්විටර් හි පළ කළේය:

Monorepositories: කරුණාකර, කළ යුතුයි

පරිවර්තනය:
මේ අලුත් අවුරුදු දවසේ මම තර්ක කරන්න යන්නේ මොනෝපොසිටරි කොච්චර විකාර සහගතද කියලා. 2019 නිහඬව ආරම්භ විය. මෙම ආත්මය තුළ, මම ඔබට සමීක්ෂණයක් ඉදිරිපත් කරමි. මහා උන්මත්තකයන් කවුද? ආධාරකරුවන්:
- මොනෝරෙපෝ
- මලකඩ
- වැරදි මත විමසුම / දෙකම

මගේ ප්‍රතිචාරය වූයේ, "මම වචනාර්ථයෙන් ඒ පුද්ගලයන් දෙදෙනාම වෙමි" යන්නයි. රස්ට් ඖෂධයක් වන්නේ කෙසේද යන්න ගැන කතා කරනවා වෙනුවට, මොනොපොසිටරි ගැන ඔහු වැරදියි කියා මා සිතන්නේ මන්දැයි බලමු. ඔබ ගැන ටිකක්. මම චෙෆ් මෘදුකාංගයේ CTO. අපට ඉංජිනේරුවන් 100ක් පමණ ඇත, වසර 11-12ක් පමණ ඈතට දිවෙන කේත පදනමක් සහ ප්‍රධාන නිෂ්පාදන 4ක් ඇත. මෙම කේතයෙන් සමහරක් බහු ගබඩාවක (මගේ ආරම්භක ස්ථානය) ඇත, සමහරක් ඒකාධිකාරී (මගේ වත්මන් ස්ථානය) වේ.

මම ආරම්භ කිරීමට පෙර: මම මෙහි ඉදිරිපත් කරන සෑම තර්කයක්ම ගබඩා වර්ග දෙකටම අදාළ වේ. මගේ මතය අනුව, ඔබ එක් ආකාරයක ගබඩාවක් තවත් වර්ගයකට වඩා තෝරා ගැනීමට තාක්ෂණික හේතුවක් නොමැත. ඔබට ඕනෑම ප්රවේශයක් ක්රියාත්මක කළ හැකිය. මම ඒ ගැන කතා කිරීමට සතුටුයි, නමුත් මම තවත් කෙනෙකුට වඩා උසස් වන්නේ මන්ද යන්න කෘතිම තාක්ෂණික හේතු ගැන උනන්දුවක් නොදක්වයි.

මැට්ගේ කාරණයේ පළමු කොටස සමඟ මම එකඟ වෙමි:

මක්නිසාද යත් පරිමාණයෙන්, මොනෝපොසිටරි මගින් බහුවිධ ගබඩාවක් විසඳන සියලුම ගැටළු විසඳනු ඇත, නමුත් ඒ සමඟම ඔබේ කේතය තදින් සම්බන්ධ කිරීමට ඔබට බල කරන අතර ඔබේ අනුවාද පාලන පද්ධතියේ පරිමාණය වැඩි කිරීමට ඇදහිය නොහැකි උත්සාහයක් අවශ්‍ය වේ.

ඔබ මොනොපොසිටරියක් හෝ බහු ගබඩාවක් තෝරා ගත්තද ඔබට එම ගැටලු විසඳා ගැනීමට සිදුවේ. ඔබ නිකුතු නිකුත් කරන්නේ කෙසේද? යාවත්කාලීන කිරීම් සඳහා ඔබේ ප්‍රවේශය කුමක්ද? පසුගාමී ගැළපුම? හරස් ව්‍යාපෘති පරායත්තතා? පිළිගත හැකි වාස්තුවිද්‍යාත්මක මෝස්තර මොනවාද? ඔබ ඔබේ ගොඩනැගීම සහ පරීක්ෂණ යටිතල පහසුකම් කළමනාකරණය කරන්නේ කෙසේද? ලැයිස්තුව නිමක් නැත. ඔබ වැඩෙන විට ඔබ ඒවා සියල්ලම විසඳනු ඇත. නිදහස් චීස් නැත.

මම හිතන්නේ Matt ගේ තර්කය මම ගරු කරන බොහෝ ඉංජිනේරුවන් (සහ කළමනාකරුවන්) විසින් බෙදාගත් අදහස් වලට සමානයි. සංරචකය මත වැඩ කරන ඉංජිනේරුවාගේ හෝ සංරචකය මත වැඩ කරන කණ්ඩායමේ දෘෂ්ටිකෝණයෙන් මෙය සිදු වේ. ඔබට මෙවැනි දේවල් ඇහෙනවා:

  • කේත පදනම විශාලයි - මට මේ අනවශ්‍ය දේවල් අවශ්‍ය නැහැ.
  • මට අවශ්‍ය නැති මේ කුණු ඔක්කොම ටෙස්ට් කරන්න වෙන නිසා ටෙස්ට් කරන්න අමාරුයි.
  • බාහිර යැපීම් සමඟ වැඩ කිරීම වඩා දුෂ්කර ය.
  • මට මගේම අථත්‍ය අනුවාද පාලන පද්ධති අවශ්‍යයි.

ඇත්ත වශයෙන්ම, මෙම සියලු කරුණු යුක්ති සහගත ය. මෙය අවස්ථා දෙකේදීම සිදු වේ - බහු ගබඩාවේ මට මගේම කුණු ඇත, ගොඩනැගීමට අවශ්‍ය එකට අමතරව ... මට වෙනත් කුණු අවශ්‍ය විය හැකිය. එබැවින් මම සම්පූර්ණ ව්යාපෘතිය පරීක්ෂා කරන මෙවලම් "සරලව" නිර්මාණය කරමි. නැතහොත් මම උප මොඩියුල සමඟ ව්‍යාජ මොනොපොසිටරි නිර්මාණය කරමි. අපිට දවස පුරාම මේකේ ඇවිදින්න පුළුවන්. නමුත් මම හිතන්නේ මැට්ගේ තර්කය ප්‍රධාන හේතුව මග හැරී ඇති අතර, මම මොනොපොසිටරියට පක්ෂව බොහෝ සෙයින් පෙරළා දැමුවෙමි:

එය සන්නිවේදනය අවුස්සන අතර ගැටළු පෙන්නුම් කරයි

අපි ගබඩා වෙන් කරන විට, අපි සම්බන්ධීකරණය සහ විනිවිදභාවය පිළිබඳ යථාර්ථවාදී ගැටලුවක් නිර්මාණය කරමු. මෙය අප කණ්ඩායම් ගැන සිතන ආකාරය (විශේෂයෙන් තනි සාමාජිකයන් ඔවුන් ගැන සිතන ආකාරය) අනුරූප වේ: අපි යම් සංරචකයකට වගකිව යුතුය. අපි සාපේක්ෂ හුදකලාවේ වැඩ කරන්නෙමු. මායිම් මගේ කණ්ඩායම සහ අපි වැඩ කරන සංරචක (ය) මත සවි කර ඇත.

ගෘහ නිර්මාණ ශිල්පය වඩාත් සංකීර්ණ වන විට, එක් කණ්ඩායමකට තවදුරටත් එය තනිවම කළමණාකරණය කළ නොහැක. ඉතා සුළු ඉංජිනේරුවන් ඔවුන්ගේ හිසෙහි සමස්ත පද්ධතියම ඇත. ඔබ බී, සී, සහ ඩී කණ්ඩායම් විසින් භාවිතා කරන බෙදා ගත් A සංරචකයක් ඔබ කළමනාකරණය කරන බව සිතමු. A කණ්ඩායම ප්‍රතිනිර්මාණය කරමින්, API වැඩිදියුණු කරමින්, සහ අභ්‍යන්තර ක්‍රියාත්මක කිරීම ද වෙනස් කරයි. ප්රතිඵලයක් වශයෙන්, වෙනස්කම් පසුපසට නොගැලපේ. ඔබට ඇති උපදෙස් මොනවාද?

  • පැරණි API භාවිතා කරන සියලුම ස්ථාන සොයන්න.
  • නව API භාවිතා කළ නොහැකි ස්ථාන තිබේද?
  • ඔබට වෙනත් සංරචක කැඩී නොයන බවට වග බලා ගැනීමට ඒවා සවි කර පරීක්ෂා කළ හැකිද?
  • මෙම කණ්ඩායම් වලට දැන් ඔබගේ වෙනස්කම් පරීක්ෂා කළ හැකිද?

මෙම ප්‍රශ්න ගබඩා වර්ගයෙන් ස්වාධීන බව කරුණාවෙන් සලකන්න. ඔබට B, C සහ D කණ්ඩායම් සොයා ගැනීමට අවශ්‍ය වනු ඇත. ඔබට ඔවුන් සමඟ කතා කිරීමට, වේලාව සොයා ගැනීමට, ඔවුන්ගේ ප්‍රමුඛතා තේරුම් ගැනීමට අවශ්‍ය වනු ඇත. අඩුම තරමින් ඔබ එසේ කරනු ඇතැයි අපි බලාපොරොත්තු වෙමු.

ඇත්තටම මේක කරන්න කවුරුත් කැමති නැහැ. මෙය හුදෙක් API සවි කිරීමට වඩා ඉතා අඩු විනෝදයකි. ඒ සියල්ල මිනිස් හා අවුල් සහගත ය. Polyrepository එකක, ඔබට සරලව වෙනස්කම් සිදු කළ හැක, එම සංරචකයේ වැඩ කරන පුද්ගලයින්ට (සමහර විට B, C හෝ D නොවේ) සමාලෝචනය සඳහා ලබා දී, ඉදිරියට යන්න. කණ්ඩායම් B, C සහ D දැනට ඔවුන්ගේ වත්මන් අනුවාදය සමඟ රැඳී සිටිය හැක. ඔවුන් ඔබේ බුද්ධිය අවබෝධ කරගත් විට ඔවුන් අලුත් වනු ඇත!

මොනෝපොසිටරියක, වගකීම පෙරනිමියෙන් මාරු වේ. A කණ්ඩායම ඔවුන්ගේ සංරචකය වෙනස් කරන අතර, ප්‍රවේශම් නොවන්නේ නම්, වහාම B, C සහ D බිඳ දමයි. මෙය B, C සහ D A ගේ දොරකඩ පෙන්වීමට මඟ පාදයි, A කණ්ඩායම එකලස් කිරීම කැඩුවේ මන්දැයි කල්පනා කරයි. මෙය A ට උගන්වන්නේ ඔවුන්ට ඉහත මගේ ලැයිස්තුව මඟ හැරිය නොහැකි බවයි. ඔවුන් කරන්න යන දේ ගැන කතා කළ යුතුයි. B, C සහ D චලනය කළ හැකිද? B සහ C හැකි නමුත් D පැරණි ඇල්ගොරිතමයේ හැසිරීමේ අතුරු ආබාධයකට සමීපව සම්බන්ධ වී ඇත්නම් කුමක් කළ යුතුද?

එවිට අපි මෙම තත්වයෙන් මිදෙන්නේ කෙසේද යන්න ගැන කතා කළ යුතුය:

  1. බහු අභ්‍යන්තර API සඳහා සහය වන අතර, D හට එය භාවිතා කිරීම නැවැත්විය හැකි වන තෙක් පැරණි ඇල්ගොරිතම අවලංගු කළ ලෙස සලකුණු කරනු ඇත.
  2. බහු නිකුතු අනුවාද සඳහා සහය, පැරණි අතුරුමුහුණත සමඟ එකක්, නව එකක් සමඟ.
  3. B, C, සහ D හට එකවර එය පිළිගත හැකි වන තෙක් A හි වෙනස්කම් නිකුත් කිරීම ප්‍රමාද කරන්න.

අපි හිතමු අපි 1, API කිහිපයක් තෝරා ගත්තා කියලා. මෙම අවස්ථාවේදී, අපට කේත කොටස් දෙකක් තිබේ. පැරණි සහ අලුත්. සමහර අවස්ථාවල දී තරමක් පහසු වේ. අපි පැරණි කේතය නැවත පරීක්ෂා කර, එය අත්හරින ලද ලෙස සලකුණු කර, D කණ්ඩායම සමඟ ඉවත් කිරීමේ කාලසටහනකට එකඟ වෙමු. Poly සහ mono repositories සඳහා අත්‍යවශ්‍යයෙන්ම සමාන වේ.

බහු අනුවාද නිකුත් කිරීමට, අපට ශාඛාවක් අවශ්ය වේ. දැන් අපට සංරචක දෙකක් තිබේ - A1 සහ A2. කණ්ඩායම් B සහ C A2 භාවිතා කරන අතර D A1 භාවිතා කරයි. D ඉදිරියට යාමට පෙර ආරක්ෂක යාවත්කාල කිරීම් සහ වෙනත් දෝෂ නිවැරදි කිරීම් අවශ්‍ය විය හැකි බැවින් අපට සෑම අංගයක්ම නිකුත් කිරීමට සූදානම්ව සිටීම අවශ්‍ය වේ. polyrepository තුළ, අපට මෙය හොඳින් දැනෙන දිගුකාලීන ශාඛාවක සැඟවිය හැක. මොනෝපොසිටරියක, අපි කේතය නව මොඩියුලයක නිර්මාණය කිරීමට බල කරමු. D කණ්ඩායමට තවමත් "පැරණි" සංරචකයට වෙනස්කම් කිරීමට සිදුවනු ඇත. අපි මෙහි ගෙවන පිරිවැය සෑම කෙනෙකුටම දැක ගත හැකිය - දැන් අප සතුව කේතය මෙන් දෙගුණයක් ඇති අතර, A1 සහ A2 සඳහා අදාළ වන ඕනෑම දෝෂ නිවැරදි කිරීමක් ඒ දෙකටම අදාළ විය යුතුය. බහු නිධියක් තුළ ශාඛා ප්රවේශය සමඟ, මෙය චෙරි-පික් පිටුපස සැඟවී ඇත. අනුපිටපතක් නොමැති නිසා පිරිවැය අඩු යැයි අපි සලකමු. ප්‍රායෝගික දෘෂ්ටි කෝණයකින්, පිරිවැය සමාන වේ: ඔබට ඒවායින් එකක් මකා දැමිය හැකි වන තෙක් ඔබ බොහෝ දුරට සමාන කේත පදනමක් දෙකක් ගොඩනඟා, මුදා හරිනු සහ නඩත්තු කරනු ඇත. වෙනස වන්නේ Monorepository සමඟ මෙම වේදනාව සෘජු සහ දෘශ්යමාන වේ. මෙය ඊටත් වඩා නරක ය, එය හොඳයි.

අවසාන වශයෙන්, අපි තුන්වන කරුණට පැමිණියෙමු. මුදා හැරීම ප්‍රමාදය. A විසින් සිදු කරන ලද වෙනස්කම් A කණ්ඩායමේ ජීවිත වැඩිදියුණු කිරීමට ඉඩ ඇත. වැදගත්, නමුත් හදිසි නොවේ. අපට ප්‍රමාද කළ හැකිද? බහු නිධියක් තුළ, අපි කෞතුක වස්තුව ඇලවීමට මෙය තල්ලු කරමු. ඇත්ත වශයෙන්ම අපි මෙය D කණ්ඩායමට කියන්නෙමු. ඔබ අල්ලා ගන්නා තෙක් පැරණි අනුවාදයේ සිටින්න! මෙය බියගුල්ලෙකු සෙල්ලම් කිරීමට ඔබව සකසයි. D කණ්ඩායම වැඩි වැඩියෙන් යල් පැන ගිය අනුවාදයක් භාවිතා කරන බව නොසලකා හරිමින් A කණ්ඩායම දිගටම ඔවුන්ගේ සංරචකය මත වැඩ කරයි (එය D කණ්ඩායමේ ගැටලුවයි, ඔවුන් මෝඩයි). මේ අතර, ඔවුන් ඒ ගැන කතා කරන්නේ නම්, කේත ස්ථායීතාවය සම්බන්ධයෙන් A කණ්ඩායමේ නොසැලකිලිමත් ආකල්පය ගැන D කණ්ඩායම දුර්වල ලෙස කතා කරයි. මාස ගනන් යනවා. අවසාන වශයෙන්, D කණ්ඩායම යාවත්කාලීන කිරීමේ හැකියාව සොයා බැලීමට තීරණය කරයි, නමුත් A පමණක් වැඩි වෙනස්කම් ඇත. A කණ්ඩායමට D කැඩුණේ කවදා හෝ කෙසේද යන්න යන්තම් මතකය. උත්ශ්‍රේණි කිරීම වඩාත් වේදනාකාරී වන අතර වැඩි කාලයක් ගතවනු ඇත. එය ප්‍රමුඛතා තොගයෙන් තවත් පහළට යවයි. A එකේ ආරක්‍ෂක ප්‍රශ්නයක් තියෙන දවස වෙනකම් අපිට ශාඛාවක් හදන්න බලකරනවා. A කණ්ඩායම අතීතයට යා යුතුය, D ස්ථායී වූ ලක්ෂ්‍යයක් සොයා, එහි ගැටලුව විසඳා, එය මුදා හැරීමට සූදානම් කළ යුතුය. මෙය මිනිසුන් විසින් කරන ලද තථ්‍ය තේරීම වන අතර එය බොහෝ දුරට නරකම ය. අපට එකිනෙකා නොසලකා හැරිය හැකි තාක් කල් එය A සහ ​​D කණ්ඩායම් දෙකටම හොඳ බව පෙනේ.

මොනෝපොසිටරියක, තුන්වැන්න ඇත්ත වශයෙන්ම විකල්පයක් නොවේ. ඔබට ක්‍රම දෙකෙන් එකකින් තත්වය සමඟ කටයුතු කිරීමට බල කෙරෙයි. ඔබ නිදහස් ශාඛා දෙකක් තිබීමේ පිරිවැය දැක ගත යුතුය. පසුගාමී ගැළපුම බිඳ දමන යාවත්කාලීන වලින් ඔබව ආරක්ෂා කර ගැනීමට ඉගෙන ගන්න. නමුත් වඩාත්ම වැදගත් දෙය: ඔබට දුෂ්කර සංවාදයක් වළක්වා ගත නොහැක.

මගේ අත්දැකීමට අනුව, කණ්ඩායම් විශාල වූ විට, සමස්ත පද්ධතියම මතකයේ තබා ගැනීමට තවදුරටත් නොහැකි වන අතර එය වඩාත්ම වැදගත් කොටසයි. ඔබ පද්ධතියේ අසමගියේ දෘශ්‍යතාව වැඩි දියුණු කළ යුතුය. කණ්ඩායම් ඔවුන්ගේ සංරචක වලින් ඉවතට බැලීමට සහ අනෙකුත් කණ්ඩායම් සහ පාරිභෝගිකයින්ගේ වැඩ දෙස බැලීමට ඔබ ක්‍රියාකාරීව ක්‍රියා කළ යුතුය.

ඔව්, ඔබට polyrepository ගැටළුව විසඳීමට උත්සාහ කරන මෙවලම් නිර්මාණය කළ හැකිය. නමුත් විශාල ව්‍යවසායන්හි අඛණ්ඩ බෙදා හැරීම සහ ස්වයංක්‍රීයකරණය ඉගැන්වීමේ මගේ අත්දැකීම මට පවසන්නේ මෙයයි: අතිරේක මෙවලම් භාවිතයෙන් තොරව පෙරනිමි හැසිරීම ඔබ දැකීමට අපේක්ෂා කරන හැසිරීමයි. බහු ගබඩාවක පෙරනිමි හැසිරීම හුදකලා වේ, එය සමස්ත කාරණයයි. මොනොපොසිටරියක පෙරනිමි හැසිරීම හවුල් වගකීම සහ විනිවිදභාවයයි, එය සමස්ත කාරණයයි. අවස්ථා දෙකේදීම, මම රළු දාර සුමට කරන මෙවලමක් නිර්මාණය කරමි. නායකයෙකු ලෙස, මෙවලම් මට අවශ්‍ය සංස්කෘතිය ශක්තිමත් කිරීමට අවශ්‍ය වන නිසාත්, සංස්කෘතිය පැමිණෙන්නේ කුඩා තීරණවලින් සහ කණ්ඩායමේ දෛනික කටයුතුවලින් වන නිසාත් මම සෑම විටම ඒකාධිකාරියක් තෝරා ගන්නෙමි.

සමීක්ෂණයට සහභාගී විය හැක්කේ ලියාපදිංචි පරිශීලකයින්ට පමණි. පුරන්නකරුණාකර.

ලොකුම උන්මත්තකයන් කවුද? ආධාරකරුවන්:

  • මොනෝරෙපෝ

  • මලකඩ

  • වැරදි මත විමසුම / දෙකම

පරිශීලකයින් 33 දෙනෙක් ඡන්දය දුන්හ. පරිශීලකයින් 13 දෙනෙක් ඡන්දය දීමෙන් වැළකී සිටියහ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න