본문 바로가기
IT/AWS

[Netflix] Part 6 - API 배포

by 물통꿀꿀이 2018. 12. 24.

https://medium.com/netflix-techblog/deploying-the-netflix-api-79b6176cc3f0

이번 글에서는 Netflix가 선택한 API 배포 techniques에 대해 소개한다.


이전 글을 보았다면 Netflix에서 API의 위치를 확인할 수 있다. (아래 참조)

http://timewizhan.tistory.com/entry/Netflix-Part-5-API-%EB%B0%B0%ED%8F%AC-%EC%A4%80%EB%B9%84?category=1026894


이처럼 Netflix는 API를 배포할 때, 보다 빨리 운영 환경에 적용하고 발생 할 수 있는 여러 risk를 최소화하기 위해 7가지 방법을 사용한다.


Moving Toward Continuous Delivery

개발된 기능을 빠르게 배포하기 위해 pipeline*을 구축하였다. 아래 Netflix에서 Delivery 시스템에 대한 2가지 개념에 대해 알아보자.

*pipeline을 통해 배포 중에 발생 할 수 있는 문제를 쉽게 파악하고 risk를 최소화 할 수 있다.

- 자동화(Automation) : 반복적인 수동 작업을 자동화

- 통찰력(Insight) : 숨겨진 문제를 파악하고 개선

모니터링 뿐만 아니라 다양한 tool도 내부에서 발생하는 문제를 파악하는데 도움이 된다. 이를 통해 빠르게 문제에 대해 대응하고 시스템의 안정성 및 성능을 높일 수 있다.


Development & Deployment Flow

그림 1은 code가 수정되었을 때, 진행되는 흐름도이다. 각 단계를 통해 수정된 code의 안정성을 확보 할 수 있다.

(Y축이 confidence인 것을 보면 만든 기능이 '정말 오류가 없군' 이라는 말을 함축하고 있는 것 같음)

그림 1. Logical Flow of Code


그림 2는 Continuous Integration 및 Deploy Flow를 보여준다. 해당 과정은 대부분 자동화로 동작하며 Insight를 얻기 위해 모니터링 또는 여타 tool을 사용한다.


그림 2. Continuous Integration & Deploy Flow


Branches

자동화되어 있는 3가지의 branch(Test, Release, Prod)를 사용한다. 각 branch는 사용 목적 및 환경이 다르다.


Confidence in the Canary

Canary 테스트를 수행하여 Metric(HTTP Status code, Response time, Exception counts, Load avg, etc.)을 확인하는 것이다.

아래 그림에서 확인 할 수 있듯이 모니터링 및 다양한 tools을 사용하여 새로운 코드를 적용한 시스템이 정상적인지 확인한다.



그림 3. Canary Analysis




Multi-region Deployment Automation

여러 지역에 배포를 "red/black push" 방법을 사용하여 자동화한다. 물론 여러 지역을 한 번에 관리하는 것은 아니고, 특정 지역에서 새로운 버전을 적용할 때가 되면 해당 지역만 버전 업을 하는 것이다. 

자세한 것은 원문에서 순서에 대한 내용을 읽어보면 알겠지만 간략히는 아래 그림으로 확인 할 수 있다.

(구 버전을 Black으로 표시하지만 새로운 버전에 문제가 생겼을 경우 Black으로 rollback 할 수 있다.)

그림 4. Red/Black Push




Keep the Team Informed

개발 팀에게 현재 진행 과정을 알릴 수 있도록 한다.

(배포 진행 중인 환경에서 어떤 일들이 발생하는지 확인하는 것이 중요함)


Move Fast, Fail Fast (and Small)

자동화된 Pipeline에서 발생하는 문제에 대한 feedback을 공개하여 빠르게 대응할 수 있도록 한다. 

(실제 시스템에 부정적인 영향을 주지 않도록 함)

'IT > AWS' 카테고리의 다른 글

[Netflix] Hystrix Overview  (0) 2019.01.14
[AWS] ElastiCache Redis Cluster  (0) 2019.01.06
[Netflix] Part 5 - API 배포 준비  (0) 2018.12.22
Circuit Breaker 패턴  (0) 2018.12.20
[Netflix] Part 4 - Fault Tolerance  (0) 2018.12.19

댓글