What is Chaos Engineering

1 분 소요

Chaos Engineering

카오스 엔지니어링이란 프로덕션 서비스의 각종 장애 조건을 견딜 수 있도록 시스템을 실험하는 분야이다.

카오스 엔지니어링 시작하기

카오스 엔지니어링은 분산 시스템의 불확실성을 구체적으로 해결하기 위한 목적을 갖는다.

즉, 카오스 엔지니어링은 실험을 통해 시스템의 약점을 찾아내기 용이하게 해준다. 이러한 실험은 4단계로 진행된다.

  1. 정상 동작 상태일 때 시스템의 측정 가능한 통계치를 활용하여 정상 상태 정의하기
  2. 정상 상태가 대조군과 실험군 모두에서 지속된다고 가정하기
  3. 서버 장애, 하드 디스크 오작동, 네트워크 끊김 등과 같은 실제 문제에 대한 변수 정의하기
  4. 대조군과 실험군 사이의 정상 상태 차이를 조사하여 가설 검증하기

정상 상태에서 벗어나는 것이 어려울수록 시스템 동작에 대한 신뢰도는 높아진다. 약점이 발견되었다면, 해당 요인이 실제 시스템에 나타나기 전에 개선한다.

고급 원칙

아래 원칙은 위에서 설명한 4가지 실험 단계에 적용할 때, 카오스 엔지니어링의 이상적인 방식을 설명한다.

정상 상태와 동작에 대해 가설을 세운다

시스템의 내부 속성보다는 측정 가능한 시스템 결과물에 중점을 두어야 한다. 짧은 시간 동안의 결과 측정을 통해 시스템의 정상 상태를 정의한다.

예를 들어, 전체 시스템의 처리량, 오류율, 대기 시간 비율 등은 정상 상태의 동작을 나타내는 측정 기준의 일부이다. 실험 중에 체계적인 동작 패턴에 중점을 둠으로써 시스템이 작동하는 방식에 대한 검증보다는 정말로 잘 작동하는지의 여부를 확인한다.

다양한 현실 세계의 사건

카오스 변수는 현실의 사건(event)을 반영한다. 잠재적 영향이나 예상 빈도에 따라 문제의 우선 순위를 지정한다. 서버 중단과 같은 하드웨어 장애, 잘못된 응답과 같은 소프트웨어 장애, 트래픽 급증 또는 시스템 확장(scaling)과 같은 비장애 사건을 고려해야 한다. 정상 상태를 방해할 수 있는 모든 사건은 카오스 실험에서 잠재적인 변수이다.

프로덕션 환경에서 실험하기

시스템은 환경 및 트래픽 패턴에 따라 다르게 동작한다. 시스템 사용률 패턴은 언제든지 변할 수 있기 때문에, 실제 트래픽을 샘플링하는 것이 요청 경로를 안정적으로 파악하는 유일한 방법이다. 시스템이 작동되는 방식에 대한 신뢰성과 현재 배포된 시스템의 관련성을 보장하기 위해 프로덕션 환경에서 집접 실험하는 것을 강하게 권장한다.

자동화를 통한 지속적인 실험

실험을 수동으로 진행하는 것은 개발자의 시간을 빼앗게 되고 결국 지속불가능하게 된다. 실험을 자동화하고 지속적으로 실행해야 한다. 카오스 엔지니어링은 오케스트레이션과 분석을 추진하기 위해 시스템 내에 자동화를 구축한다.

폭발 반경 최소화

프로덕션 환경에서의 실험은 고객에게 불편을 야기할 수 있다. 단기간의 부정적인 영향에 대해서는 어느 정도 허용되어야 하지만, 실험의 피해를 최소화하고 억제하는 것은 카오스 엔지니어의 책임이자 의무이다.

Chaos Engineering은 세계에서 가장 큰 일부 기업에서 소프트웨어를 계획하고 개발하는 방식을 이미 바꾸고 있는 강력한 방법이다. 다른 방법이 속도와 유연성 문제를 다루는 반면, 카오스는 특히 분산 시스템의 시스템적 불확실성을 다룬다. The Principles of Chaos은 대규모로 신속하게 현식하고 고품질 고객 서비스를 제공하는 데 필요한 자신감을 제공한다.

참고