モノリポゞトリ: お願いしたす、必ずしおください

モノリポゞトリ: お願いしたす、必ずしおください

コヌス受講生向けに甚意された蚘事の翻蚳 「DevOps の実践ずツヌル」 OTUS教育プロゞェクトで。

モノリポゞトリを遞択する必芁がありたす。モノリポゞトリがチヌム内で促進する行動は、特にチヌムが成長するに぀れお透明性ず責任の共有ずなるためです。 いずれにせよ、ツヌルに投資する必芁がありたすが、デフォルトの動䜜がコマンドで必芁な動䜜である方が垞に良いです。

なぜこのこずに぀いお話しおいるのでしょうか?

マット・クラむンが蚘事を曞きたした 「モノレポスやめおください」  (翻蚳者泚: ハブレに関する翻蚳 「モノリポゞトリやめおください」。 私はマットが奜きです。圌はずおも賢いので、圌の芖点を読むべきだず思いたす。 圌は最初にツむッタヌにアンケヌトを投皿した。

モノリポゞトリ: お願いしたす、必ずしおください

翻蚳
今幎の元旊、私はモノリポゞトリがいかにばかげおいるかに぀いお議論する぀もりです。 2019幎は静かに始たりたした。 この粟神に基づいお、私はあなたにアンケヌトを提案したす。 倧のファンは誰ですか サポヌタヌ:
- モノレポ
- さび
- 䞍正な䞖論調査 / äž¡æ–¹

私の答えは、「私は文字通りその䞡方です」でした。 Rust がいかに麻薬であるかに぀いお話す代わりに、モノリポゞトリに぀いお圌が間違っおいるず私が考える理由を芋おみたしょう。 あなた自身に぀いお少し。 私は Chef Software の CTO です。 圓瀟には玄 100 人の゚ンゞニアがおり、玄 11  12 幎前のコヌド ベヌスず 4 ぀の䞻芁補品がありたす。 このコヌドの䞀郚はポリリポゞトリ (私の開始䜍眮) にあり、䞀郚はモノリポゞトリ (私の珟圚の䜍眮) にありたす。

始める前に: ここでの議論はすべお、䞡方の皮類のリポゞトリに圓おはたりたす。 私の意芋では、あるタむプのリポゞトリを別のタむプのリポゞトリではなく遞択する必芁がある技術的な理由はありたせん。 どのようなアプロヌチでも機胜させるこずができたす。 それに぀いお喜んで話したすが、䞀方が他方より優れおいるずいう人為的な技術的理由には興味がありたせん。

私はマットの指摘の最初の郚分に同意したす。

なぜなら、倧芏暡な堎合、モノリポゞトリはポリリポゞトリが解決するのず同じ問題をすべお解決したすが、同時にコヌドを密結合するこずを匷いられ、バヌゞョン管理システムのスケヌラビリティを高めるために信じられないほどの努力が必芁になるからです。

モノリポゞトリを遞択するかポリリポゞトリを遞択するかに関係なく、同じ問題を解決する必芁がありたす。 リリヌスはどうやっおリリヌスするのですか アップデヌトに察するあなたのアプロヌチは䜕ですか? 䞋䜍互換性はありたすか? プロゞェクト間の䟝存関係はありたすか? どのような建築様匏が蚱容されたすか? ビルドずテストのむンフラストラクチャをどのように管理しおいたすか? リストは無限にありたす。 そしお成長するに぀れおそれらすべおを解決しおいきたす。 無料のチヌズはありたせん。

Matt の議論は、私が尊敬する倚くの゚ンゞニア (およびマネヌゞャヌ) が共有する芋解ず䌌おいるず思いたす。 これは、コンポヌネントに取り組んでいる゚ンゞニア、たたはコンポヌネントに取り組んでいるチヌムの芳点から行われたす。 次のようなこずが聞こえたす。

  • コヌドベヌスはかさばりたす。これだけのゞャンクは必芁ありたせん。
  • 必芁のないゞャンクをすべおテストしなければならないので、テストはさらに難しくなりたす。
  • 倖郚䟝存関係を扱うのはさらに困難です。
  • 独自の仮想バヌゞョン管理システムが必芁です。

もちろん、これらの点はすべお正圓化されたす。 これはどちらの堎合でも起こりたす。ポリリポゞトリには、ビルドに必芁なものに加えお、私自身のゞャンクがありたす...他のゞャンクも必芁になる堎合がありたす。 そこで私はプロゞェクト党䜓をチェックするツヌルを「単玔に」䜜成したす。 たたは、サブモゞュヌルを含む停のモノリポゞトリを䜜成したす。 ここを䞀日䞭歩き回るこずができたす。 しかし、Matt の議論は䞻な理由を芋逃しおいるず思いたす。私はそれをかなりひっくり返しおモノリポゞトリを支持したした。

コミュニケヌションを促し、問題を明らかにする

リポゞトリを分離するず、調敎ず透明性ずいう事実䞊の問題が生じたす。 これは、チヌムに぀いおの私たちの考え方 (特に個々のメンバヌのチヌムに぀いおの考え方) に察応しおいたす。぀たり、私たちは特定のコンポヌネントに察しお責任を負っおいたす。 私たちは比范的孀立しお仕事をしおいたす。 私のチヌムず私たちが取り組んでいるコンポヌネントの境界は固定されおいたす。

アヌキテクチャが耇雑になるに぀れお、XNUMX ぀のチヌムだけでは管理できなくなりたす。 システム党䜓を頭の䞭に理解しおいる゚ンゞニアはほずんどいたせん。 チヌム B、C、D が䜿甚する共有コンポヌネント A を管理しおいるずしたす。チヌム A はリファクタリング、API の改善、および内郚実装の倉曎を行っおいたす。 その結果、倉曎には䞋䜍互換性がありたせん。 どのようなアドバむスがありたすか?

  • 叀い API が䜿甚されおいる堎所をすべお怜玢したす。
  • 新しいAPIが䜿えない堎所はありたすか
  • 他のコンポヌネントを修正しおテストしお、壊れないこずを確認できたすか?
  • これらのチヌムはあなたの倉曎を今すぐテストできたすか?

これらの質問はリポゞトリの皮類ずは無関係であるこずに泚意しおください。 チヌム B、C、D を芋぀ける必芁がありたす。圌らず話し、時間を調べ、優先順䜍を理解する必芁がありたす。 少なくずも私たちはそう願っおいたす。

誰も本圓にこれをやりたくありたせん。 これは、ただ API を修正するよりもはるかに面癜くありたせん。 それはすべお人間的で厄介です。 ポリリポゞトリでは、単に倉曎を加えお、そのコンポヌネントに取り組んでいる人 (おそらく 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. 耇数のリリヌス バヌゞョン (XNUMX ぀は叀いむンタヌフェむス、もう XNUMX ぀は新しいむンタヌフェむス) をサポヌトしたす。
  3. B、C、D が同時にそれを受け入れるこずができるたで、A の倉曎のリリヌスを遅らせたす。

1 ぀、耇数の API を遞択したずしたす。 この堎合、コヌドは XNUMX ぀ありたす。 叀くお新しい。 状況によっおは非垞に䟿利です。 叀いコヌドをチェックむンしお戻し、非掚奚ずしおマヌクし、D チヌムず削陀スケゞュヌルに同意したす。ポリ リポゞトリずモノ リポゞトリで基本的に同じです。

耇数のバヌゞョンをリリヌスするには、ブランチが必芁です。 これで、A1 ず A2 ずいう 2 ぀のコンポヌネントができたした。 チヌム B ず C は A1 を䜿甚し、D は A1 を䜿甚したす。 D を進める前にセキュリティ曎新やその他のバグ修正が必芁になる可胜性があるため、すべおのコンポヌネントをリリヌスの準備ができおいる必芁がありたす。 ポリリポゞトリでは、これを有効期間の長いブランチに隠すこずができ、快適です。 モノリポゞトリでは、コヌドが新しいモゞュヌルで䜜成されるように匷制したす。 チヌム D は匕き続き「叀い」コンポヌネントに倉曎を加える必芁がありたす。 ここで私たちが支払っおいるコストは誰でもわかりたす。コヌドの量は 2 倍になり、AXNUMX ず AXNUMX に適甚されるバグ修正は䞡方に適甚する必芁がありたす。 ポリリポゞトリでの分岐アプロヌチでは、これはチェリヌピックの背埌に隠れたす。 重耇がないのでコストが安くなるず考えおいたす。 実際的な芳点から芋るず、コストは同じです。どちらか XNUMX ぀を削陀できるたで、ほが同䞀の XNUMX ぀のコヌドベヌスを構築、リリヌス、保守するこずになりたす。 違いは、モノリポゞトリでは、この問題が盎接的で目に芋えるこずです。 これはさらに悪いこずですが、それは良いこずです。

぀いにXNUMX぀目のポむントに到達したした。 発売遅延。 A が行った倉曎により、チヌム A の生掻が改善される可胜性がありたす。重芁ではありたすが、緊急ではありたせん。 ただ遅らせるこずはできたすか ポリリポゞトリでは、これをプッシュしおアヌティファクトを固定したす。 もちろん、このこずはチヌム D に䌝えおいたす。远い぀くたでは叀いバヌゞョンを䜿い続けおください。 これにより、あなたは臆病者を挔じるようになりたす。 チヌム A は、チヌム D が䜿甚しおいるバヌゞョンがどんどん叀くなっおいるずいう事実を無芖しお、コンポヌネントの䜜業を続けたす (それはチヌム D の問題であり、圌らは愚かです)。 䞀方、チヌム D は、コヌドの安定性に察するチヌム A の䞍泚意な態床に぀いお、たずえそれに぀いお話すずしおも、あたり良くありたせん。 月日が経ちたす。 最埌に、チヌム D は曎新の可胜性を怜蚎するこずにしたしたが、A にはさらなる倉曎しかありたせんでした。 チヌム A は、い぀、どのように D を壊したのかほずんど芚えおいたせん。アップグレヌドはさらに苊痛であり、さらに時間がかかりたす。 これにより、優先順䜍スタックの䞋䜍に送信されたす。 A でセキュリティ䞊の問題が発生し、ブランチを䜜成せざるを埗なくなる日たで。 チヌム A は時間を遡っお、D が安定しおいた時点を芋぀け、そこで問題を修正し、リリヌスの準備を敎えなければなりたせん。 これは人々が行う事実䞊の遞択であり、これたでで最悪の遞択です。 チヌムAもチヌムDもお互い無芖できれば良さそうです。

モノリポゞトリでは、XNUMX 番目は実際にはオプションではありたせん。 XNUMX ぀の方法のいずれかで状況に察凊する必芁がありたす。 XNUMX ぀のリリヌス ブランチを持぀堎合のコストを確認する必芁がありたす。 䞋䜍互換性を損なうアップデヌトから身を守る方法を孊びたしょう。 しかし最も重芁なこずは: 難しい䌚話を避けるこずはできたせん。

私の経隓では、チヌムが倧きくなるず、システム党䜓を念頭に眮くこずができなくなりたすが、それが最も重芁な郚分です。 システム内での䞍和の可芖性を改善する必芁がありたす。 チヌムが自分たちのコンポヌネントから目をそらし、他のチヌムや消費者の仕事に目を向けるように積極的に取り組む必芁がありたす。

はい、ポリリポゞトリの問題を解決しようずするツヌルを䜜成できたす。 しかし、倧䌁業で継続的デリバリず自動化を教えおきた私の経隓から、远加のツヌルを䜿甚しないデフォルトの動䜜が期埅される動䜜であるこずがわかりたす。 ポリリポゞトリのデフォルトの動䜜は分離であり、それが重芁です。 モノリポゞトリのデフォルトの動䜜は責任の共有ず透明性であり、それが重芁です。 どちらの堎合も、粗い゚ッゞを滑らかにするツヌルを䜜成したす。 リヌダヌずしお私は毎回モノリポゞトリを遞択したす。ツヌルは私が望む文化を匷化する必芁があり、文化は小さな意思決定ずチヌムの日々の仕事から生たれるからです。

登録ナヌザヌのみがアンケヌトに参加できたす。 ログむンお願いしたす。

最倧の熱狂者は誰ですか? サポヌタヌ:

  • モノレポ

  • さび

  • 䞍正な䞖論調査 / äž¡æ–¹

33 人のナヌザヌが投祚したした。 13名のナヌザヌが棄暩した。

出所 habr.com

コメントを远加したす