私たちは、相互に依存し合う多くのアプリとWebサービス(一部のパブリック向け製品、一部の内部およびプライベート「バックエンド」の一部)を持っています。これらの各コンポーネントには、4つの環境(特定の目的に役立つサーバー/ノードのクラスター)があります。
- 非生産
DEV
-CIがプッシュ変更を構築する統合開発環境。エンジニアがローカルで再現できないバグを見つけるのに役立ちますQA
-分離されたQA /テスト環境DEMO
-ビジネス関係者のための安定したUAT環境
- 製造
LIVE
-私たちのライブ/制作環境
コードの昇格は次のようになります:(LOCAL
開発者のマシン)=> DEV
=> QA
=> DEMO
=> LIVE
。
と呼ばれるmyapp
RESTful Webサービスによってサポートされるアプリケーションがありmyws
、それ自体がと呼ばれるDBによってサポートされているとしmydb
ます。
現在、これらの依存関係の中で私が「オーケストレーション」プロモーションと呼ぶものmyapp-dev
がmyws-dev
ありますmydb-dev
。が使用するポイント。同様に、myapp-qa
がmyws-qa
を使用することを指すmydb-qa
。同じのためにDEMO
とLIVE
。
これの問題は、たとえばにmyapp
変更を加えるたびにmyws
、mydb
にも変更を加える必要があることです。しかし、各DEV
環境は依存関係の環境を指しているため、DEV
これらの変更をすべて同時にスケジュールしてロールアウトする必要があります。さらに、1つのビルドが不安定になったり壊れたりすると、他の上流コンポーネントがダウンすることがよくあります。たとえば、開発者がを変更するときに何かを壊した場合、通常mydb-dev
、myws-dev
およびmyapp-dev
クラスターも不安定になります。
これを解決するために、私は「サイロ化された」プロモーション戦略と呼ぶものの提案をまとめます。すべてのコンポーネント間の依存関係はこのガイドラインに従います。
- 上流の依存
DEMO
関係は、すべての非実稼働環境(DEV
、QA
およびDEMO
)の下流の依存関係の環境に依存します。そして - 上流の依存
LIVE
関係は、本番環境の下流の依存関係の環境に依存します
この規則を使用myapp-dev
するとmyws-demo
、実際にはをポイントし、を使用しますmydb-demo
。同様に、およびmyapp-qa
も指します。myws-demo
mydb-demo
私は見つけることができることをここに利点があるビルドの安定化:それははるかに少ない可能性が高いということであるDEMO
コードはにそれを作ることができないので、特定のコンポーネントのための環境が不安定になるDEMO
の両方の厳格なテストなしDEV
とQA
。
この方法で見つけられる唯一の欠点DEMO
は、特定のコンポーネントで問題が発生した場合、すべての上流の依存関係のすべての非本番環境が突然破壊されることです。しかし、DEV
とで実行されたテストのために、これが非常にまれに発生するはずであることに反対しQA
ます。
これはしていまし解決して、この問題とその解決策が既に(私が画策/サイロ化呼び出しています何のほかに)それらに名前を持っている場合、私は驚かないだろう多くの開発者(ずっと賢く自分よりも経験)という問題です。だから私は尋ねます:サイロ化されたプロモーション戦略のメリットはどんな短所よりも重要ですか、そして私がここで見落としているかもしれない短所は何ですか?