본문 바로가기
DevOps/CI·CD

[CI/CD] 배포 전략 (Rolling, Blue Green, Canary)

by 일상 속 둔치 2020. 8. 3.

실서비스를 하다보면 서버에 업데이트를 반영해야하는 일이 빈번히 발생한다!

 

그런데 서버에 업데이트를 할 때 중단 시점이 발생한다.

 

그러면 업데이트를 배포하는 동안에는 서비스를 이용하지 못할 것이다 ㅜㅜ

(3초만 안되도 VOC가)

 

그래서 우리는 유저가 다운타임을 못 느끼는 무중단배포를 해야한다!

 

이에 대한 배포 전략 3가지를 알아보자.

 

* 초록색은 배포 완료, 파란색은 배포 이전인 서버다.

 

1. Rolling

여러대의 서버가 있을 때 차례대로 배포하는 방법이다. 첫번째 서버가 배포 중이라 역할을 못할 때면 나머지 2개 서버가 대신 부하를 감당하며 서비스를 지속한다. 마찬가지로 나머지 서버들도 배포 중인 서버를 제외한 나머지 서버들이 부하를 감당해준다.

 

* Rolling에서 주의할 점은 하나의 서버가 중단 되었을 때 나머지 서버의 부하량을 잘 파악해야한다.

예를 들어, 100까지 감당 가능한 서버 3대가 있을 때 70,70,70씩 부하를 가지고 있다면,

한개 서버만 다운타임이 생겨도 0,105,105가 되버려서 모든 서비스가 마비가 되버린다.

 

2. Blue Green

구 버전의 서버와 함께 신 버전의 서버를 준비한다. 신 버전의 서버 준비하는 동안은 구 버전 서버로 트래픽을 흘린다.

그리고 배포 시점에 트래픽을 일제히 신 버전 서버로 돌린다.

 

장점으로는 빠른 롤백이 가능하다. 트래픽만 구 서버로 흘려주면 된다.

단점으로는 구 버전과 신 버전을 동시에 갖추어야하므로 다른 방법보다 리소스가 2배로 든다.

 

3. Canary

특정 서버만 배포를 해놓고 배포된 서버로 트래픽을 조금씩 흘려보낸다.

이때 정상적이라면 트래픽을 계속 흘려보내면서 다른 서버도 점진적으로 배포를 한다.

그래서 결국 최종적으로는 모든 서버에 배포한다.

 

이 방법은 오류 감지를 하는데 효과적이다. 조금씩 업데이트된 신 서버로 트래픽을 흘려보내면서 정상 여부를 체크하고 만약 정상적이지 않다면 바로 롤백할 수도 있고 정상적이라면 배포를 할 수도 있다.

'DevOps > CI·CD' 카테고리의 다른 글

[CI·CD] Heroku에 배포하기  (1) 2020.08.17

댓글