[NAVER D2] 네이버 뉴스 서비스가 장애를 예방하는 방법 - 카오스 엔지니어링
https://d2.naver.com/helloworld/8857983
▲원문 기사
카오스 엔지니어링
- 프로덕션 또는 사전 프로덕션 환경에서 의도적이고 통제된 방식으로 장애를 일으켜 그 영향을 파악하고 더 나은 방어 태세와 인시던트 유지 관리 전략을 계획하는 것
- 향후 발생할 수 있는 잠재적 문제를 식별하여 엔지니어링 팀이 사전에 문제를 해결하고 추후 라이브 환경에서 문제를 방지할 수 있도록 함.
https://www.ibm.com/kr-ko/topics/chaos-engineering
카오스 엔지니어링이란 무엇인가요? | IBM
카오스 엔지니어링은 프로덕션 또는 사전 프로덕션 환경에서 의도적이고 통제된 방식으로 장애를 일으켜 그 영향을 파악하고 더 나은 방어 태세와 인시던트 유지 관리 전략을 계획하는 것입니
www.ibm.com
카오스 엔지니어링의 필요성
네이버 뉴스는 외부에서 관리하는 인프라에 의존함
(장) 직접 관리할 필요 無
(단) 해당 인프라 장비에 직접 장애 상황을 만들어 테스트 할 수 없다는 어려움 有
네이버는 자사의 분산 저장 플랫폼인 nbase-arc를 테스트하려했고 장애 상황 모사를 위해 Toxiproxy를 사용했다.
https://d2.naver.com/helloworld/614607
▲nbase-arc 설명
nbase-arc 구성
ZooKeeper | Redis 클러스터의 게이트웨이 주소를 저장하고 있다가 app실행 시 gateway address를 전달 클러스터 노드 관리, 상태 정보 중앙에서 통제하는데 사용 |
Redis cluster | Redis 인스턴스들을 클러스터로 묶어 관리 단일 인스턴스의 용량 한계 해결 위해 여러 인스턴스를 클러스터로 운영하는 구조 |
nbase-arc의 장애 상황 모사를 위해서는 위 두개를 다운시켜야 함.
-> 다운 후 재시행하면 불편하고 시간 소모가 多
-> Toxiproxy사용
Toxiproxy
애플리케이션 서버와 인프라 장비 등의 서버 사이에 프록시 서버를 만들어 해당 장비들의 장애 상황을 네트워크 상태로 모사하여 테스트할 수 있는 도구.
테스트 환경은 위와 같이 Toxiproxy 서버로 구성한 프록시 서버에 nbase-arc Redis 게이트웨이를 연결 후 프록시 서버의 주소를 docker의 zookeeper에 저장해 app이 프록시 서버의 주소를 받도록했다.
테스트 방법
1. HTTP요청으로 proxy를 추가 후 결함 주입
# add proxy
POST http://{toxiproxy-server}/proxies
{
"name": "{proxy name}",
"listen": "{proxy listen addr}",
"upstream": "{proxy upstream addr}",
"enabled": true
}
# toxic proxy
POST http://{toxiproxy-server}/proxies/{proxy name}
{
"enabled": false
}
위와 같은 테스트를 통해 ZooKeeper장애 발생 시 WAS가 실행되지 않음을 확인했다고 한다.
WAS
Web Application Server
웹 어플리케이션 실행해서 필요한 기능 수행 후 그결과를 웹 서버에 전달하는 역할
본문에 나온 Toxiproxy 깃허브다
https://github.com/Shopify/toxiproxy
GitHub - Shopify/toxiproxy: :alarm_clock: A TCP proxy to simulate network and system conditions for chaos and resiliency testing
:alarm_clock: :fire: A TCP proxy to simulate network and system conditions for chaos and resiliency testing - GitHub - Shopify/toxiproxy: :alarm_clock: A TCP proxy to simulate network and system co...
github.com