카오스 엔지니어링과 게임 데이
글을 안쓴지 꽤 오래되었다. 개인적으로 여유가 없었다. 최근에는 장애때문에 정신이 특히나 없었다. 연달아 여러가지 장애를 경험하다보니 여유가 더 없었다. 이번에 공유하는 것은 장애때문에 만든 자료다. 자료를 만들면서 사내 공유의 목적도 있었지만 여기에도 같이 공유한다는 목적도 가지고 작성했다.
원본은 Google Slides에 있으며 여기서는 그 Slides 자료를 페이지로 펼친 수준이다.
카오스 엔지니어링과 게임 데이
카오스 엔지니어링
- 운영환경에서의 혼란스러운 상황에서 빠른 복원력을 수행하고 또한 복원에 대한 신뢰성을 구축하고자 하는 실험
- 카오스 엔지니어링의 원칙
카오스 엔지니어링 목적
- 취약점의 증거를 제공 - Dark Debt
- 해당 취약점이 장애로 발전하기 전에 해결할 기회 제공
- 실제 장애 발생시 장애 해결과 복원에 대한 신뢰와 자신감 제공
카오스 엔지니어링의 필수 요소
- Observability: 관측 가능성. 카오스(장애)를 관측할 수 있는 요소들이 있어야 한다는 것.
- 요소들
- Transactions(API Requests)
- Business Metrics
- Machine Resources
- Performance
카오스 엔지니어링의 수행 (요약)
- 마음 자세
- ‘어떻게 시스템을 부술 수 있을까?’라는 마음가짐이 아닌 ‘우리는 무엇을 배워야 하는가?’라는 마음가짐으로 시작해야 함.
- 가설 수집
- 사후적 방식: 과거 발생한 사건 기반으로 가설을 수집하는 방식
- 사전적 방식: 사건이 발생하기 전 가설에 대해 다양하게 생각하면서 수집하는 방식
- 가설 수집에 대한 자세는 사후적 방식보다 사전적 방식이 좋음. 이 말이란 장애라는 사건이 발생해야 그 사건 기반으로 가설 수집하지 말고, 실제 사건이 없더라도 가설을 다양하게 생각하여 수집하라는 것.
- 가설 백로그 작성
- 발생 가능성과 장애 영향도를 기반으로 우선 순위를 지정.
- 4분위 매트릭스를 이용하는게 좋음
- 예: 발생 가능성(높음, 낮음)과 장애 영향도(많음, 적음)으로 구성
- 가설 백로그에 그에 대응하는 성질을 기입. 성질은 아래와 같은 것이며 이를 기입함으로서 우리가 어느 성질에 집중하고자 할 때 그에 대응하는 가설을 쉽게 선정할 수 있음.
- 성질: 신뢰성, 안전성, 보안성, 내구성, …
- 발생 가능성과 장애 영향도를 기반으로 우선 순위를 지정.
- 선정 후 수행
카오스 엔지니어링 방법
- 자동화된 실험
- 도구를 이용함
- Chaos Monkey, Chaos Monkey for Spring Boot, Chaos Mesh, Gremlin, …
- 게임 데이
- 적은 비용으로 시작할 수 있는 방법
- 통제되고 안전한 상태에서 카오스를 만드는 모든 부분에 대해 실험할 수 있음
- 카오스를 만드는 부분들은 다음과 같이 여러가지
- 인프라
- 플랫폼
- 애플리케이션
- 사람
- 관행과 프로세스
- 이런 연습을 통해 취약점과 개선을 위한 증거를 찾아 지속적 개선
게임 데이
- 통제되고 안전한 상태
- 스테이징 또는 샌드박스와 같은 안전한 환경에서 작은 폭발 반경으로 차츰 시작.
- 점차 폭발 반경을 키워나가고 궁극적으로는 운영 환경에서도 작은 폭발 반경에서부터 큰 폭발 반경으로 점진적으로 수행되어야 함.
- 단, 폭발 반경이 크더라도 고객에게 가는 영향은 가지 않거나 가더라도 최소한의 범위만 갈 수 있도록 제어되어야 함.
- 운영 환경이라면 실제 피해 규모를 적게 만들기 위해서 빠른 중단 기준과 빠른 롤백 수단이 필요
- 게임 데이에서 제공하는 혼란스러움을 통해
- 알람이 제때 동작하는지 확인
- 시스템의 정상 지표가 제대로 표시되는지 확인
- 팀원이 제때 어떻게 대응하는지 확인
- 게임 데이가 끝나면 되도록 바로 회고를 통해 그날의 배움을 학습
게임 데이의 대략적인 실행 방법
- 가설 선택
- 게임 데이 진행 유형 선택
- 사전 정보 제공 또는 미제공 (미제공 하는 방식을 Dungeons and Dragons 이라고도 함)
- 사전 정보를 미제공할 경우 혼란스러움이 극대화 됨
- 어떤 점을 개선할 것이가에 따라 게임 데이 진행 유형을 결정해야 함
- 참여자, 관찰자, 조정자를 선택
- 언제, 어디서, 얼마나 진행할 것인지 결정
- 게임 데이 설명
- 필요하다면 승인 후 진행
- 운영 환경에서 진행한다면 승인은 필수적