포스트

Release 의 모든 것 (17장)

Release 의 모든 것 (17장) 의 내용 중, 인상적이었던 부분을 발췌 및 요약합니다.

카오스 공학

인스턴스를 죽인다는 것은 과격하지만 생각처럼 미친 생각은 아니다. 이것이 카오스 공학 이다.

개선을 위한 파괴

카오스 공학은 분산 시스템이 난기류와 같은 운영 상황을 견뎌낼 수 있는지를 실험한다. 즉, 경험론에 입각한 테스트를 통해서 시스템의 작동 방식을 학습하는 것이다.
운영 환경과 스테이징 환경은 다르기 때문에, 운영 환경에서도 견딜 수 있는 시스템을 만들어야 한다. 카오스 공학은 개별 구성 요소에서는 관찰되지 않는 돌발적인 특성을 다룬다.

카오스 공학의 선구자

다른 힘이 없다면 우리는 시스템으로 최대의 이득을 얻도록 최적화할 것이다. 그러나, 이 시스템은 한계를 맞이하고 무너질 것이다. 고효율 시스템일수록 장애에 취약하다. 카오스 공학은 균형을 찾도록 해준다.
고장이 잦은 물건을 고치는 방법은 배우지만, 고장이 잘 나지 않는 물건을 고치는 방법은 모른다. 즉 잘 고장나지 않는 물건이 고장나면 상황이 더 심각해진다. 시스템이 큰 일을 감당하게 하기 위해서는 지속적으로 고장률을 낮춰야 한다.

유인원 부대

가장 유명한 카오스 공학의 예는 넷플릭스의 카오스 멍키이다. 이 원숭이는 때때로 깨어나서는 자동으로 규모가 조정되는 클러스터의 인스턴스를 죽인다. 클러스터는 자동으로 인스턴스를 복구해야 한다.
이는 넷플릭스가 AWS 와 마이크로 서비스 아키텍처리 이전하면서 탄생했다. 모든 클러스터의 배치를 견고하게 만들기 위해서 안정성 패턴의 적용과, 실험적 장애를 자주 발생시킨 것이다. 이를 통해 시스템이 견고해질 수 있었다.

나만의 원숭이 입양

카오스 멍키가 출시되었을 때, 대부분의 개발자는 카오스 멍키가 찾아낸 취약점이 너무 많아서 놀랐다. 인스턴스가 끝없이 늘어나거나, 오랫동안 사용되지 않는 IP 가 목록에 남아 있기도 했다.

사전 조건

먼저, 카오스 공학을 실행하면서 회사나 고객에 피해를 주어서는 안된다. 요청의 가치가 큰 시스템에서는 카오스 공학이 적합한 방식은 아니다. 시스템을 고장내더라도 막대한 비용 손실이 발생해서는 안된다.
뿐만 아니라, 카오스 테스트의 노출로 고객이 나쁜 경험을 하는 것에 있어서도 정밀하게 설계가 필요할 것이다. 이를 통해서 우리는 ‘건강하다’ 라는 것이 무엇인지 알 수 있다. 장애율이 0.01 % 정도면 건강한 것일까? 이를 확인할 수 있는 모니터링 시스템이 갖춰져 있는가?
마지막으로 복구 계획이 있어야 한다. 카오스 테스트가 종료된 후에도 시스템이 자동으로 정상 상태로 돌아기자 않을 수 있다.

실험 설계

가설을 세울 때는 격렬한 조건 속에서도 시스템이 유지되기를 바라는 불변성의 관점에서 생각해라. 내부 작동이 아닌 외부에서 관찰할 수 있는 작동에 초점을 맞추어야 한다.
가설을 기각하게 될 만한 증거로 무엇이 있을지도 생각해라. 실패 원인이 무엇인지도 파악해야 한다.

혼돈 주입

시스템의 지식을 이용해 혼돈을 주입해보자. 시스템의 구조를 알고 있다면, 혼돈을 쉽게 주입할 수 있을 것이다. 그러나 인스턴스 강제 종료는 가장 기본적이고 조잡한 유형이다. 레이턴시 멍키는 호출에 지연을 더한다.

카오스 대상 선정

카오스 멍키는 무작위로 한 클러스터를 선정한 후에 무작위로 한 인스턴스를 선택해서 죽인다. 카오스 공학을 막 시작하려고 한다면 무작위 선택은 다른 어떤 진행 방식보다 좋다.
대부분 소프트웨어는 문제가 많아서, 무작위로 대상을 선정해서 공격하더라도 놀라운 무언가를 발견할 수 있을 것이다. 그러나 어떤 시점이 되면 무작위성에만 의존할 수 없고, 대상을 특정해야 한다.

자동화와 반복

최고의 시스템에서 카오스는 지루한 작업이어야 한다. 카오스 테스트를 아무리 수행해도 시스템이 변함 없이 평소처럼 운영되어야 하기 때문이다. 취약점을 찾았다면 복구 단계는 흥미로울 수 있을 것이다.
카오스 테스트를 자동화할 방법을 찾아야 하고, 절제가 필요하다.

재해 시뮬레이션

조직 내 사람은 한계가 있고 실수를 한다. 장애 지점이 바로 매일 퇴근하는 누군가일 수도 있다. 고신뢰 조직에서는 인간 영역에서도 시스템적 약점을 찾으려고 한다. 이 훈련을 통해서, 사람이 빠졌을 때 멈추는 취약 지점을 찾을 수 있을 것이다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.