휴식의 아름다움 : 카오스 엔지니어링을 통한 탄력적 시스템 만들기

작가: Laura McKinney
창조 날짜: 2 4 월 2021
업데이트 날짜: 1 칠월 2024
Anonim
[GAIC 2020] 개회식 및 기조강연
동영상: [GAIC 2020] 개회식 및 기조강연

콘텐츠


출처 : pressureUA / iStockphoto

테이크 아웃 :

다운 타임을 피하기 위해 현대 시스템은 혼돈을 처리 할 수 ​​있어야합니다. 그렇기 때문에 시스템을 철저히 테스트하고 복원력을 확보하는 것이 그 어느 때보 다 중요합니다.

이를 방지하기위한 최선의 노력에도 불구하고 IT 사고는 피할 수없는 일입니다. 비즈니스에 영향을 미치는 다운 타임을 앞서 기 위해 노력하는 것은 점점 까다로워지고 있습니다. 오늘날의 시스템은 긴밀하게 연결되고 점점 복잡해지고 있으며, 움직이는 부품이 많을수록 문제가 발생할 기회가 더 많습니다.

이것이 서비스 가용성을 높이고 장애에 대한 복원력을 높이기 위해 점점 더 많은 조직이 마이크로 서비스로 전환하는 이유 중 하나입니다. 그러나 이것들은 모 놀리 식 애플리케이션을 깨기위한 훌륭한 전제이지만, 복원력을 염두에두고 명시 적으로 설계하지 않는 한 실패의 위험을 잠재적으로 악화시킬 수 있습니다.

실패 준비

분산 시스템의 본질적으로 혼란스러운 특성을 고려할 때 서비스는 장애를 예상 할뿐만 아니라 장애가 발생한 경우 자동으로 복구되도록 개발되어야합니다. 이는 시스템이 최종 고객에 대한 서비스를 방해하지 않고 혼란을 처리 할 수 ​​있도록 정기적으로 장애를 유발하는 것을 의미합니다. 이를 위해서는 테스트 환경에서 프로덕션과 유사한 트래픽을 시뮬레이션 할 수 있어야합니다.

물론 변경 사항이 프로덕션 환경에 적용되기 전에 탄력성을 테스트하는 것이 좋습니다. 이 작업을 수행하지 않으면 서비스가 평균 및 최대로드를 모두 지원할 수 있는지 확인할 수 없습니다. 실제로 가장 안전한 방법은 제품을 확장하지 않고도 최대량의 최대 두 배를 처리 할 수 ​​있도록하는 것입니다.

복원력 테스트와 관련하여 올바른 도구는 요청이 처리되는 방식에 너무 신경을 쓰지 않아야하며 요청이 올바른 영향을 미치기 만합니다. 특정 조건에서 입력 서비스는 요청을 나머지 시스템에 전달하지 못하지만 실패는보고하지 않을 수 있습니다. 엔드-투-엔드 검증이 실제로 발생하는지 확인하여 모니터링 레이더 아래에서 비행하는 문제를 위험에 빠뜨리지 마십시오. (자세한 내용은 기술 실패 : 우리는 그들과 함께 살 수 있습니까?를 참조하십시오.)


다음 단계

서비스가로드 상태에서 작동하는 방식을 이해 한 후에는 실패 이벤트를 도입 할 차례입니다. 모든 소프트웨어 테스트와 마찬가지로 시나리오를 쉽고 빠르게 재현 할 수있는 자동화 된 도구를 사용하는 것이 가장 좋습니다. 따라서 다양한 인프라 기술에 영향을 미치는 복잡한 이벤트를 조정할 수 있습니다. 또한 서비스의 수정 사항 및 변경 사항을 확인하는 기능 외에도 모든 환경 및 일정에 따라 임의의 실패 시나리오를 실행할 수 있습니다.

의미있는 실패 이벤트는 주로 서비스 레이아웃에 따라 달라지며 사용자와 관련된 특정 질문을하여이를 구성 할 수 있습니다. 예를 들어, 특정 기간 동안 데이터베이스에 접근 할 수없는 경우 프런트 엔드를 사용하는 사람들에게 미치는 영향은 무엇입니까? 해당 사용자가 여전히 웹 UI를 탐색 할 수 있습니까? 그들은 여전히 ​​자신의 정보에 대한 업데이트를 발행 할 수 있으며 데이터베이스에 다시 접근 할 수있게되면 해당 업데이트가 올바르게 처리됩니까?

여러 마이크로 서비스를 실행하는 경우 개별 서비스가 충돌 할 경우 글로벌 중단이 있는지 여부를 물어볼 수 있습니다. 또는 서비스 간 통신을 버퍼링하는 대기열 메커니즘이있는 경우 소비자 서비스 (또는 서비스)의 작동이 중지되면 어떻게됩니까? 사용자는 여전히 응용 프로그램을 사용할 수 있습니까? 그리고 평균 부하가 주어지면 대기열이 오버플로되기 전에 얼마나 오래 걸리고 s를 잃기 시작합니까?

버그 없음, 스트레스 없음-인생을 파괴하지 않고 인생을 바꾸는 소프트웨어를 만드는 단계별 가이드

아무도 소프트웨어 품질에 신경 쓰지 않으면 프로그래밍 기술을 향상시킬 수 없습니다.


인프라에 대한 몇 가지 주요 질문을 정의한 후에는 이러한 실패를 시뮬레이션하는 다양한 방법을 나열 할 수 있습니다. 특정 서비스 나 데이터베이스 서버를 중지하는 것으로 충분할 수 있습니다. 컨테이너가 여전히 응답하고 실행되는 동안 교착 상태를 시뮬레이션하기 위해 서비스의 기본 스레드를 차단하려고 할 수 있습니다. 특정 서비스 간의 트래픽을 차단하기 위해 네트워크에 규칙을 도입하기로 결정할 수 있습니다. Linux 환경에서는 'tc'와 같은 도구를 사용하여 높은 대기 시간, 손실, 손상 또는 복제 된 패킷과 같은 네트워크 상황을 에뮬레이션 할 수 있습니다. (사용자를 테스트에 참여시키는 것이 중요 할 수 있습니다. 최종 사용자가 UAT 전에 테스트에 참여해야하는 4 가지 이유를 자세히 읽어보십시오.)

훈련을 통한 학습 및 개선

장애 시나리오를 만드는 데있어 가장 귀중한 측면 중 하나는 시스템이 실패 할 수있는 모든 잠재적 인 방법을 노출하여 자체 치료 논리로가는 길을 개척 할 수 있다는 것입니다. 팀은 서비스를 수동으로 복구하는 단계를 밟습니다. 그런데 SLA 내에서이를 수행 할 수 있는지 확인하기위한 훌륭한 훈련입니다. 이 복구 프로세스의 자동화 작업을 수행 할 수 있지만 그 동안 팀이 서비스를 제대로 복구하는 과정을 진행했음을 쉽게 알 수 있습니다. 실패 시나리오를 임의적이고 규칙적으로 작성하고 실행의 전체 세부 사항을 공개하지 않으면 서 드릴에 대한 발견 및 진단을 포함시킬 수 있습니다. 결국 SLA의 중요한 부분입니다.

카오스 엔지니어링의 핵심은 주어진 시스템의 복잡성을 고려하여 새롭고 이상한 조건을 시뮬레이션하여 테스트하고 시스템의 반응을 관찰하는 것입니다. 이는 데이터 엔지니어링 팀이 시스템을 재 설계하고 재구성하여 복원력을 높이는 데 필요합니다. 새롭고 유용한 것들을 배울 수있는 많은 기회가 있습니다. 예를 들어 다운 스트림 서비스가 변경 될 때 서비스가 업데이트되지 않는 인스턴스 또는 모니터링이 완전히 누락 된 인스턴스가있을 수 있습니다. 제품을보다 탄력 있고 견고하게 만드는 흥미로운 방법이 부족하지 않습니다!