Post

안정적인 배포를 위한 다양한 배포 전략

안정적인 배포를 위한 다양한 배포 전략

서버에서 발생가능한 다양한 장애 상황


서비스 운영 과정 속, 서버에는 정말 다양한 장애 상황이 발생 가능하다.

서비스 회사라면 이런 장애 상황에 정말 민감하게 반응할 수 밖에 없을 것이다.

장애 발생으로 인해 고객에게 영향을 끼치게 된다면, 서비스에 대한 신뢰가 떨어지고 고객이 이탈할 수 있다.

그렇다면 장애 상황의 원인에는 어떤 것들이 있을까?

폭발적으로 늘어난 트래픽

Image

가장 먼저 폭발적으로 늘어난 트래픽이 있을 수 있다.

수강신청이나 티켓팅을 할 때에 특정 시간에 사람이 급격하게 몰린다면 흔히 볼 수 있는 장애이다.

서버나 네트워크의 물리적 장애

Image

다음으로는 서버나 네트워크의 물리적 장애가 있을 수 있다.

가장 대표적인 사례로는 22년 10월 15일, SK C&C 판교 데이터센터에 화재가 발생하면서 카카오의 일부 서비스에 장애가 발생한 사건이 있을 것이다. 카카오의 모든 기능이 정상적으로 복구되는 데에는 5일의 시간이 걸렸고, 카카오는 이를 계기로 ‘시스템 전체의 이중화’를 적용하였다.

잘못된 코드가 배포

Image

또한 오류가 있는 잘못된 코드가 서버로 배포된 경우도 있을 것이다.

이러한 경우에는 빠르게 이전 버전으로 롤백을 하는 등, 신속한 대응이 필요할 것이다.

장애 상황을 예방하는 방법

그렇다면 이런 장애 상황을 예방하려면 어떻게 해야할까?

물리적인 장애나 외적인 요소로 인해 발생하는 장애를 예방하는 것은 정말 어려울 것이다.

그렇지만 잘못된 코드가 배포되는 경우는 어떨까?

어떻게 하면 문제가 있는 코드를 빠르게 알아내고 서비스에 영향을 최소화하며 대응할 수 있을까?

아마 적절한 배포 전략을 통해서 새로운 코드를 서버로 배포하고 문제를 확인한다면 이를 최소화할 수 있을 것이다.

그렇다면 서버의 안정성을 높일 수 있는 다양한 배포 전략들에는 어떤 것이 있을까?

상황에 맞는 배포 전략들


롤링 배포


롤링 배포는 전체 시스템을 중단하지 않고 새로운 버전을 점진적으로 배포, 업데이트하는 방식이다.

롤링 배포의 과정

  1. 가장 먼저 첫번째 서버에만 새로운 버전을 업데이트한다.

    Image

  2. CD 테스트로 첫번째 서버의 배포에 문제가 있는지 확인하고 문제가 있다면 롤백한다.

    Image

  3. 문제가 없다면 다음으로 두번째 서버를 업데이트한다.

    Image

  4. 이렇게 순차적으로 서버를 업데이트하며 모든 서버의 업데이트를 진행한다.

    Image

롤링 배포의 장점

  • 전체 시스템의 처리 능력을 대부분 유지할 수 있다.
    • 아래와 같은 경우 75%의 처리량을 유지할 수 있게 된다.
    • 서버의 개수가 더 많다면 처리량을 더욱 높게 유지할 수 있을 것이다.

    Image

  • 점진적인 적용을 통해 리스크를 최소화할 수 있다.

    Image

롤링 배포의 단점

  • 배포 속도가 느리다.
    • 서버의 개수에 비례하는 배포 속도가 발생하게 된다.

    Image

  • 동시에 서로 다른 버전으로 서비스할 수 밖에 없다.
    • 이를 통해서 유저 경험이 떨어질 수도 있다.

    Image

블루그린 배포


블루그린 배포는 전체 시스템을 중단하지 않고 새로운 버전을 별도 환경에 배포하고 즉시 전환하는 방식이다.

블루그린 배포의 과정

  1. 먼저 기존의 서비스는 블루 환경에서 운영한다고 가정한다.

    Image

  2. 다음으로 새로운 버전의 배포를 위해 사용자가 없는 그린 환경에 새로운 버전의 소프트웨어를 배포한다.
    • 해당 그린 환경에서 CD테스트를 하거나 개발자가 직접 다른 여러가지 테스트를 하기도 한다.

    Image

  3. 그린 환경에서 배포가 문제 없다고 확인되면 블루에서 그린으로 전환하여서 실제 유저들이 그린 환경을 사용하도록 한다.
    • 이때 보통 로드밸런싱 설정을 변경하면서 블루그린 환경을 변경하고, 즉각적으로 변화가 반영되어 사용자는 이를 거의 느끼지 못한다.
    • 또한 혹시 모르는 서비스 장애에 대응을 위해 일정시간 블루 환경을 유지하고 실제로 문제가 발생하면 다시 블루 환경으로 롤백하여 대응한다.

    Image

블루그린 배포 장점

  • 즉각적인 전환과 롤백이 가능하다.
    • 즉각적으로 버전 업데이트가 가능하고, 문제시에도 바로 롤백이 가능해 서비스 중단 시간을 최소화할 수 있다.

    Image

  • 새 버전을 실제 환경과 동일한 조건에서 테스트할 수 있다.
    • 이를 통해 예상치 못한 문제 발생을 많이 줄일 수 있고 성능 테스트도 진행이 가능하다.

    Image

블루그린 배포 단점

  • 리소스 사용량이 많다.
    • 아래와 같은 경우에는 서버가 2배로 필요하기 때문에 그만큼 비용이 발생한다.

    Image

  • 복잡한 설정과 관리가 필요하다.
    • 로드밸런서 설정, 네트워크 구성, 모니터링 설정 등 복잡한 설정이 필요하다.

    Image

롤링 배포와 블루그린 배포 비교


 롤링 배포블루그린 배포
배포 방식하나씩 순차적으로 진행동일한 서버군 생성 후 한방에 전환
배포 속도느림빠름
문제 발생시배포된 서버만 영향모든 사용자가 영향, 롤백은 간단
비용추가적인 서버가 필요하지 않음일시적으로 두배의 리소스 필요
복잡성상대적으로 단순상대적으로 복잡

카나리 배포


카나리 배포는 일부 서버, 혹은 일부 사용자에게만 수정된 내용 반영하고, 부분적으로 문제가 없는지 확인하고 문제가 없다면 전체 서버에 배포하는 방식이다.

카나리 배포 과정

  • 일부 서버에 배포시
    • 일부 서버에만 새로운 버전의 서비스를 배포하고, 배포한 서버에서 문제가 없는지 확인한다.
    • 롤링 배포와 비슷해 보일 수 있지만, 베포 성공 후 바로 다음 서버에 배포하는 것이 아닌 사용자를 모니터링한다는 점에서 다르다.

    Image

  • 일부 사용자에 대해 배포시
    • 사용자를 기준으로 카나리 배포 대상을 지정하려면 사용자가 가진 속성(id, 지역, 연령대 등)을 활용할 수 있다.
    • 요청마다 무작위로 고를거라면 로드밸런서에 의해 자동으로 처리하도록 설정한다.
  • 카나리 배포에서 문제 발생시
    • 이전 버전으로 롤백될 수 있도록 한다.

    Image

카나리 배포의 장점

  • 점진적 배포를 통해 리스크를 줄일 수 있다.
    • 새로 오픈한 기능이 성능 측면에서 우려되는 부분이 있다면 점진적 적용을 통해 성능을 확인할 수 있다.

    Image

카나리 배포의 단점

  • 설정, 관리가 어렵고 복잡하다.
    • 적용을 위해서는 보통 카나리 배포를 위한 툴을 활용한다.
  • 사용자 경험이 일관되지 않는다.
    • 새로운 기능이라면 사용자들의 불만이 있을 수도 있다.

배포 타이밍


위와 같은 배포 전략뿐만 아니라 어떤 시점에 배포를 하는지도 서비스의 안정성에 많은 영향을 준다.

일반적인 배포 타이밍 규칙

  • 사용자가 적은 시간대에 배포
    • 대부분의 서비스는 밤에 사용자가 적을 것, 일부 서비스는 다를 수 있음
  • 주식, 금융 관련 서비스의 배포
    • 시장이 닫혀있을 때를 이용해 배포

    Image

  • 금요일 저녁에 배포하지 않기
  • 주요 이벤트 직전 배포 자제
    • 쇼핑몰 서비스라면 세일 기간
    • 티케팅 서비스라면 티케팅 도중

    Image

  • 배포 후 모니터링할 수 있는 시간 확보
This post is licensed under CC BY 4.0 by the author.