복잡한 분산 시스템 환경에서 시스템의 신뢰성을 확인하기 위해, 인위적인 혼돈(Chaos)을 가하여 시스템의 취약한 부분을 찾고 보강하는 방식의 엔지니어링 기법
무작위로 예상치 못한 작업을 반복적으로 요청하여 미처 파악하지 못했던 약점을 파악하는 것이 목적이라고 할 수 있다.
복잡한 분산 시스템에서 에러가 발생하는 부분을 찾을 때 매우 유용하다고 한다.
카오스 엔지니어링 vs 스트레스 테스팅
|
카오스 엔지니어링 |
스트레스 테스팅 |
| 범위 |
불분명한 이슈 해결을 위한
범용적인 테스트 |
한 번에 하나의 컴포넌트
위주로 테스트하며 국소적 |
| 목적 |
일어날 가능성이 희박하거나
이유가 분명하지 않은 버그를
찾을 때 사용 |
의도한 방향으로 프로그램이
잘 동작하는 가 확인할 때 사용 |
분산 컴퓨팅의 8가지 오류
- 네트워크는 안정적이다.
- 레이턴시가 없다.
- 대역폭이 무한정하다.
- 네트워크는 안전하다.
- 망구성 (포톨로지) 은 변하지 않는다.
- 관리자는 한 명이다.
- 전송 비용이 없다.
- 네트워크가 균일하다.
이 모든 오류들이 네트워크 프로세싱에 지대한 영향을 끼친다. 그러므로 분산 시스템에서는 예측하기 힘든 버그들도 캐치해내야 하는데 이를 잡기위한 기술이 카오스 엔지니어링이다.
Chaos Engineering 의 단계
- 정상 상태를 정의하고 측정
- 정상 상태는 시스템의 측정 가능한 결과물로, 시스템의 기대 동작을 의미함
- 처리량, 에러율, 지연시간 등이 정상상태의 지표로 사용될 수 있음.
- 가설 세우기
- 정상 상태가 어떤 변수에 의해 방해될 수 있는 지 예측
- 서버 중단, 트래픽 급증, 네트워크 지연 등등
- 실험 수행
- 변수를 시스템에 적용, 정상 상태의 변화를 관찰하고 가설을 검증함
- 대조군과 실험군을 나눠서 진행할 수 있음
- 결과 분석, 개선
- 실험의 결과를 통해서 시스템의 약점을 발견하고 개선 방안을 제시할 수 있음
- 실험을 주기적으로 진행하여 시스템 복원력을 향상
적용방법 (Toxiproxy)
- Client 에 직접 적용하는 방법
- Application Server 에 직접 라이브러리를 설치하여 HTTP 요청을 통해 테스팅 할 수 있다.
- HTTP API 를 사용하는 방법
- API Server 를 따로 구축한 뒤 HTTP 요청을 보내 테스팅 할 수있다.
- CLI 를 사용하는 방법
- 구축한 프록시 서버에서 종단 서버를 Toxiproxy 로 연결하여 테스팅 할 수 있다.
- Chaos Monkey : 넷플릭스에서 개발한 도구이며 시스템 내에 원숭이를 집어넣는다는 의미로 예상치 못한 에러를 발생시키는 툴
- ToxiProxy : 네트워크 단에서 연결 시뮬레이션을 할 수 있다.
- Gremlin, SimianArmy, ChaosKong 등 여러 툴들이 존재한다.
출처