우리는 서로 상호 의존하는 많은 앱과 웹 서비스 (일부 공개 제품, 일부 내부 및 개인 "백엔드")를 보유하고 있습니다. 이러한 구성 요소 각각에는 4 가지 환경이 있습니다 (특정 목적을 수행하는 서버 / 노드 클러스터).
- 비 생산
DEV
-CI가 푸시 변경을 구축하는 통합 개발 환경; 엔지니어가 로컬에서 재현 할 수없는 찾기 어려운 버그를 해결하는 데 유용QA
-격리 된 QA / 테스트 환경DEMO
-비즈니스 이해 관계자를위한 안정적인 UAT 환경
- 생산
LIVE
-라이브 / 프로덕션 환경
코드 승격 : LOCAL
(개발자 시스템) => DEV
=> QA
=> DEMO
=> LIVE
.
라는 myapp
RESTful 웹 서비스에 의해 지원되는 응용 프로그램이 있고 myws
그 자체는이라는 DB에 의해 지원됩니다 mydb
.
현재 우리는 이러한 의존성들 중 " 오케스트레이션 "프로모션 이라고 myapp-dev
하는 myws-dev
것을 사용하고 mydb-dev
있습니다. 마찬가지로을 사용하는 myapp-qa
지점을 가리 킵니다 . 동일에 와 .myws-qa
mydb-qa
DEMO
LIVE
이 문제는 말,에 나는 변화를 만드는 것이 언제이며 myapp
,이 변경하게 저를 필요로 myws
하고 mydb
도 있습니다. 그러나 각 DEV
환경은 종속 환경을 가리 키 므로 DEV
이러한 변경 사항을 동시에 예약하고 롤아웃해야합니다. 또한 하나의 빌드가 불안정하거나 깨지면 다른 업스트림 구성 요소가 다운되는 경우가 많습니다. 변경하는 경우 예를 들어 개발자 나누기 뭔가 경우 mydb-dev
의 myws-dev
및 myapp-dev
클러스터는 일반적으로도 불안정해질.
이 문제를 해결하기 위해 "사 일드 (siled) "프로모션 전략 이라고하는 제안을 작성하고 있습니다 . 모든 구성 요소 간 종속성은이 지침을 따릅니다.
- 업스트림 종속성은
DEMO
다운 스트림 종속성, 모든 비 프로덕션 환경 (DEV
,QA
및DEMO
) 에 대한 환경 에 따라 다릅니다 . 과 - 업스트림 종속성은
LIVE
프로덕션 환경의 다운 스트림 종속성에 대한 환경에 따라 다릅니다.
이 규칙을 사용하면 myapp-dev
실제로는를 가리킬 myws-demo
것 mydb-demo
입니다. 마찬가지로 및을 myapp-qa
가리킬 수도 있습니다 .myws-demo
mydb-demo
여기서 찾을 수있는 장점은 빌드 안정화입니다 . DEMO
코드가 DEMO
on DEV
및 에서 엄격하게 테스트하지 않으면 특정 구성 요소 의 환경이 불안정해질 가능성이 훨씬 줄어 듭니다 QA
.
만약이 방법으로 찾을 수있는 유일한 단점은, 그입니다 DEMO
특정 구성 요소에 대한 휴식을 수행, 모든 모든 업스트림 의존성에 대한 비 생산 환경이 갑자기 파손됩니다. 하지만이 때문에에서 수행 된 시험의 매우 드물게 발생하지 것을 반대 것 DEV
하고 QA
.
이것은있다 얻었다 (매우 똑똑하고 자신보다 경험) 많은 개발자들이 해결 한 것을 문제,이 문제와 그 솔루션은 이미 그들에게 이름을 가지고 있다면 놀라지 않을 것이다 (나는 조율 / 사일로 호출하고있는 무슨 외에). 그래서 나는 묻습니다. 사일로의 프로모션 전략의 장점이 단점보다 더 중요합니까? 여기서 간과 할 수있는 단점은 무엇입니까?