본문 바로가기
공부/기타

[Chaos Engineering] 카오스 엔지니어링 in AWS

by haejang 2020. 12. 21.
728x90
728x90

 

먼저 카오스 엔지니어링이란 무엇인가?

 

서비스를 운영하면, 장애(Failure)와는 필연적으로 마주치게 된다

장애는 항상 언제 어디서든 일어날 수 있기 때문에, 장애가 일어나더라도 빨리 복원하거나 고객들이 알아채지 못하는 인프라를 구성하는 것이 중요하다

 

카오스 엔지니어링(Chaos Engineering)은 시스템이 각종 장애들을 견딜 수 있는지를 테스트하기 위해 분산 시스템을 실험하고 배우는 분야이다

통제된 환경에서 의도적으로 구성된 실험을 통해 잠재적인 문제를 선제적으로 발견하는 것이 목표

실제 프로덕션 환경에서 장애를 주입(Failure Injection)해 약점을 식별하고, 장애를 미리 탐지할 수 있는 복원성 높은 아키텍처를 만들어내야 한다

벨만 울리는 화재 비상 대피 훈련이 아닌, 실제로 화재를 일으켜 훈련을 하는 것과 마찬가지

 

카오스 엔지니어링의 원칙

정상 상태 행동에 관한 가설 구축

  • "정상 상태"를 정의 - 실제 비즈니스에 영향을 주는 임팩트를 통계치로 사용

현실 세계의 문제 시도하기

  • 현실의 문제(Event) 반영

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

자동화를 통한 지속적 실험

  • 실험들을 지속적으로 돌려보기

폭발 반경 최소화

  • 서비스에 영향 주는 부분을 최소화시킨다

 

카오스 엔지니어링 진행 과정

정상상태 정의

시스템이 정상(Normal) 운영되는 상태

시스템 내부 속성(CPU, memory 등)이 아닌 비즈니스 및 고객 경험과 연계된 운영 매트릭스 등이 기준이 됨

ex) Amazon - 페이지 로딩 시간, Netflix - 초당 시작 횟수

가설 수립

What if? 만약 이렇게 된다면 어떻게 할까?

장애 이력, 서비스 의존 관계를 참고하고, 다양한 역할 담당자들의 의견을 수렴해 작성해야 함

실험

실제로 장애를 주입하는 단계

실험 규칙

  • 작은 범위부터 시작 (Application, Host, Resource -> Network, AZ, Region 등)
  • 긴급 실험 중지 및 롤백 계획도 짜놔야 한다 (실험이 정상상태 유지 못하면 빠르게 롤백해야 함)

결과 검증

장애 감지 및 복구 등의 시간 측정(결과 정량화)

개선

실험을 통해 도출한 액션 아이템 실행

 

카오스 엔지니어링 도구

Simian Army (from Netflix)

AWS 인프라의 안정성, 복원력을 테스트하기 위해 Netflix에서 개발한 도구 모음

Chaos Monkey (2011 도입)

인프라에다 장애를 주입해 복원성을 테스트하는 카오스 엔지니어링 도구

실 서비스 환경의 Instance와 컨테이너들을 무작위로 죽인다

Chaos Gorilla/Chaos Kong

가용영역/Region 죽임

 

Monkey만 오픈소스이고 Gorilla와 Kong등은 넷플릭스 내부에서 운영한다

Spinnaker(CI/CD)와 통합되어 제공된다

Kube Monkey

Kubernates 클러스터의 Pods(컨테이너 단위)를 무작위로 종료한다

 

 

AWS Fault Injection Simulater (FIS) (2021 출시예정)

AWS 자체 카오스 엔지니어링 도구

원하는 장애를 쉽게 만들 수 있다고 한다

 

 

 

참고

www.youtube.com/watch?v=wF7du63Ld4U

www.youtube.com/watch?v=l5LPqRAEwaU&feature=emb_logo

channy.creation.net/blog/1173

728x90
728x90

댓글