1

数百台のコンピューター(ノード)のグループにインストールされた分散ソフトウェアシステムを想像してみてください。ノードは、スケジュールされたタスクを自動的に実行する責任があります。何百ものタスクがあり、すべてのタスクは約5〜10ノードで実行されるようにスケジュールされています。ノードは数日間停止する場合があり、システムから削除される場合があります。すべてのタスクは、1つ以上のソースファイルとノード固有の構成ファイルによって定義されます。コードはノード上で直接開発およびテストされます(リモートアクセスを使用)。これらのノードのみに特別なハードウェアが装備されており、タスクの実行に必要なネットワークコンテキストがあります(別のテストシステムを構築するとコストがかかりすぎます)。すべてのタスクのソースファイルは共有ソースファイル(ライブラリ)を参照し、ライブラリは他のライブラリを参照する場合があります。タスクとライブラリの依存関係ツリーは複雑です。

分散バージョン管理システムの経験はありませんが、このシステムはDVCSを中心に構築できると思います。さまざまなライブラリ、およびさまざまなタスクのソースファイルには、独自のリポジトリがあります。特定のタスクを実行するすべてのノードには、そのタスクのリポジトリのインスタンスが必要です。ノードの少なくとも1つのタスクで使用されるすべてのライブラリのリポジトリも、そのノードに存在する必要があります。開発者はcommit、ノード上でローカルに変更およびコーディングし、DVCS技術を使用して他のノード上のリポジトリに変更を配布します。

質問#1 コードの変更を他のノードに配布するための最良のアプローチは何でしょうか?

考えられるシナリオ:

  1. 開発者pushは、同じリポジトリのインスタンスを持つ他のすべてのノードへの変更を行います。(しかし、彼らはそうすることを忘れるか、そうする時間がないかもしれません。)
  2. ノードpullは、他のすべてのリモートリポジトリからのすべての変更とupdateそれ自体を自動的に変更します。(ただし、競合が発生する可能性があります。)
  3. リポジトリごとに、インスタンスの1つが「参照」として使用されます。開発者pushはこのインスタンスへの変更を行い、インスタンスを持つ他のすべてのノードpullはここから自動的に実行されupdateます。(ただし、参照インスタンスを持つノードが停止する場合があります。)

質問#2 依存関係を処理するための最良の方法は何でしょうか?

複数のタスク(またはライブラリ)が同じライブラリを参照していて、参照されたライブラリを変更する必要がある場合、1つまたは複数の参照タスク(またはライブラリ)が機能しなくなる可能性があります(依存関係地獄)。最初に参照されたバージョンを維持し、適切なテストを行った後、新しいバージョンにアップグレードすることをお勧めします。つまり、同じソースファイルの複数のバージョンが同じリポジトリに存在する必要がありますが、これは不可能と思われます。branch参照されたライブラリの新しいバージョン用に新しいライブラリを作成する必要がありますか?はいの場合、参照リポジトリをどのようにアップグレードする必要がありますか?

ご協力ありがとうございました。

4

1 に答える 1

1

分散バージョン管理システムの経験はありませんが、このシステムはDVCSを中心に構築できると思います。

間違った感じ、共通して。VCS(SCM)はバージョン管理システム(ソース管理管理)、つまり-track

  • 変更
  • 主に歴史的側面で
  • 複雑な依存関係のないフラット配列として(一部の依存関係は引き続き考慮されます)

デプロイ、ポリシー、複雑な依存関係、条件などをネイティブに処理する構成管理ソフトウェアなど、別のカテゴリのツールを確認する必要があります。

DVCSを使用してCMの反復を行うことはできますが、結果として、既存の定評のあるツールのハードワークと淡い類似性になります。

于 2012-10-24T19:03:56.010 に答える