넷플릭스와 카오스 몽키
오늘 GTA5를 에픽스토어에서 무료로 배포한다고 밝혔다. 많은 사람들이 무료로 GTA5를 받기 위해서 갑자기 에픽스토어에 접속하다 보니 서버에 장애가 발생했다. 이로 인해 느린 페이지 로딩, 500 에러, 에픽런처 크래쉬 등이 일어났었다.
많은 트래픽으로 인해 서버장애를 일으킨 에픽스토어
https://twitter.com/EpicGames/status/1260949362085150722?s=20
위와 같은 서버장애로 인해 많은 사람들이 불편을 겪지 않게 서비스를 제공하는 것은 상당히 중요한 일이다. 왜냐하면, 잠재적인 고객과 현재 고객을 잃을 수 있어 회사의 수익에 큰 영향을 끼칠 수 있기 때문이다.그래서 많은 회사들이 이 부분에 상당한 노력을 기울이는데 넷플릭스가 대표적이라고 할 수 있다.
출처: 넷플릭스
넷플릭스는 탄력성있는 시스템을 구축하기 위해 “카오스 몽키”라는 것을 이용했다. 카오스 몽키란 서비스를 공급하는 인스턴스에 일부러 랜덤으로장애를 일으키는 것이다. 이를 통해 미래에 발생할 장애에 대해 빠르게 대응할 수 있는 시스템을 구축할 수 있게 된다. 즉, 사자성어 “유비무환”과 같은 개념이라고 볼 수 있다. 아래에 예를 들어 보겠다.
만약 당신이 차를 끌고 가다가 타이어에 문제가 생겼다고 생각해보자. 그렇다면 타이어를 갈아야 할 것 이다. 타이어를 갈기 위해선 스패어 타이어가 준비되어 있어야 한다. 또한, 타이어를 교환하기 위한 도구들도 준비되어 있어야 하고 타이어 교환 방법도 미리 숙지하고 있어야 한다. 그러나 앞서 언급한 것들이 준비되어 있지 않다면 발생한 문제에 대해 대응하는데 많은 시간이 소비될 것이다.
모든 서버는 장애로 부터 자유롭지 못하다. 사실, 서버내 에서 장애는 상당히 자주 일어난다고 한다. 따라서, 넷플릭스는 서버 장애 발생시 빠르게 대응하여 고객에게 원활한 서비스를 제공하는 것을 목표로 삼았고 카오스 몽키라는 시스템을 사용한 것이다.
카오스 몽키에는 다양한 장애를 일으키는 몽키들이 포함되어 있다.
1. 레이턴시 원숭이(Latency monkey)
RESTful 클라이언트- 서버 통신간에 일부러 인위적인 지연을 발생해 서비스 저하를 발생시키고 정상적으로 업스트림 서비스가 반응하는 지 측정하기 위해 만들어졌다. 게다가 아주 큰 지연을 일으켜 노드나 전체 서비스가 중단(실질적으로 인스턴스가 종료되지는 않음)되게 하는 역할을 수행할 수 도 있다.
2.순응 원숭이(Conformity monkey)
최상의 조건을 고수하지 않고 종료시키는 역할을 한다. 예를 들면, 자동 스케일링 그룹에 속하지 않는 인스턴스는 문제가 발생하게 되는데 이러한 것들을 찾아서 종료시키고 인스턴스를 재시작 시키는 것이다.
3.의사 원숭이(Doctor Monkey)
인스턴스들의 상태를 점검하고 CPU 부하율 같은 정보들을 모니터링 하여 불안정한 인스턴스를 탐지하는 역할을 한다. 불안정한 인스턴스가 발견시 서비스에서 제거하고 종료시키기도 한다.
4.관리 원숭이(Janitor Monkey)
클라우드 환경이 잡음이나 낭비 없이 작동하도록 보장해주는 역할을 한다. 사용되지 않는 리소스들을 찾고 제거한다.
5.보안 원숭이(Security Monkey)
순응 원숭이의 확장판으로 보안에 위배되거 취약점을 찾고 공격하는 인스턴스를 종료한다.
6.10–18 원숭이(10–18 Monkey)
다양한 언어와 문자를 사용하여 여러 지역에서 고객에게 서비스를 제공할 경우 설정 및 런타임 문제를 감지한다.
7.카오스 고릴라(Chaos Gorilla)
카오스 몽키랑 비슷한데 AWS의 가용성 영역을 전체적으로 중단 시키는 역할을 한다.
위와 같은 원숭이들을 이용해 넷플릭스의 데이터 센터(클라우드)에서 발생할 수 있는 문제를 미리미리 대비한다고 한다.
이렇게 문제를 인위적으로 발생시켜 미리미리 준비하는 방식을 카오스 엔지니어링이라고 한다. 카오스 엔지니어링의 원칙은 아래와 같은 4단계 형식을 취한다고 한다.
1. 시스템의 “정상 상태”를 정의해 정상 동작의 기준선을 설정한다.
2. 대조군과 실험군 양쪽에서 모두 이 정상 상태가 계속된다는 가설을 세운다.
3. 서버 멈춤, 하드 드라이브 고장, 네트워크 연결 끊김과 같은 실제 상황을 반영하는 변수를 도입한다.
4. 대조군과 실험군 사이의 차이점을 확인해 가설이 틀렸음을 입증한다.
출처: http://www.itworld.co.kr/news/152680
전 넷플릭스 엔지니어인 노라 존스와 케이시 로젠탈은 카오스 엔지니어링은 소프트웨어 산업 전반적으로 도입되고 앞으로 계속 발전될 것이라고 말했다. 카오스 몽키와 같은 카오스 엔지니어링은 시스템의 약점, 즉, 문제를 찾아내는 역할에 중점을 둔 것이므로 문제 해결방안을 생각하는 것이 중요다고 할 수 있다.