Akashic Records

안정성 안티패턴 - 1 본문

오래된글/Articles

안정성 안티패턴 - 1

Andrew's Akashic Records 2018. 4. 19. 14:48
728x90

안정성 안티패턴

하나 이상의 시스템 고장을 일으킨 근본원인에서 발견한 패턴


1. 통합지점

통합지점(엔터프라이즈 통합 프로젝트에서 각 컴포넌트들의 연동 지점)은 시스템을 살해하는 최고의 킬러다. 모든 소켓, 프로세스, 파이프나 원격 프로시저 호출은 행이 걸리거나 걸릴 수 있다. 모든 데이터베이스 호출은 명백하고 미묘한 방식으로 행이 걸릴 수 있다. 시스템으로 향하는 모든 피드는 가장 안 좋은 시점에 시스템에 행이 걸리게 하거나, 시스템을 충돌시키거나, 다른 충격을 만들 수 있다.

도구 : Thread Dump, TCP Dump

  • 통합지점, 필요악을 경계하자. - 모든 통합지점은 어떤 식으로든 고장이 나기 때문에, 이러한 고장에 대비해야 한다.

  • 다양한 종류의 고장에 대비하자. - 통합지점 고장에는 몇가지 형태가 있는데, 여러 가지의 네트워크 에러에서 의미상의 오류까지 다양하다. 정의된 프로토콜을 통해서 배달되는 멋진 에러 응답을 받는 대신, 다양한 종류의 프로토콜 위반, 느린 응답이나 완전한 행과 만나게 된다.

  • 추상화를 언제 건드려야 할지 알아야 한다. - 통합지점 고장을 디버깅하기 위해 추상화된 계층을 들여다 봐야 한다. 흔히 어플리케이션 계층에서의 고장을 디버그하기가 쉽지 않은데, 대부분의 고장은 상위 계층의 프로토콜을 위반하기 때문이다.

  • 고장은 빠르게 전파 된다. - 원격 시스템에서 발생한 고장은 곧 문제가 되는데, 코드가 충분히 방어적이지 않을 때 대게 연속적인 고장의 형태로 나타난다.

  • 통합지점 문제를 막으려면 패턴을 적용하자. - 통합지점에서의 위험을 피하는 데 도움이 되는 차단기, 제한시간, 분리하는 미들웨어, 핸드셰이킹을 이용하여 방어적으로 프로그래밍하자.


2. 연쇄반응

  • 서버 하나의고장 때문에 나머지 서버도 위험에 빠진다. - 서버 하나의고장은 다른 서버에게 짐을 보태기 때문에 연쇄 반응을 일으킨다. 늘어난 부하 때문에 나머지 서버는 더욱 고장나기 쉽다. 연쇄 반응은 곧 전체 계층을 고장 나게 할것이다. 이런 계층에 의존하는 다른 계층은 반드시 스스로를 보호해야 한다. 그렇지 않으면 연속적인 고장 때문에 다운될 것이다.

  • 자원 누수를 찾아라. - 대부분의 경우, 어플리케이션에 메모리 누수가 있을 때 연쇄 반응이 일어난다. 서버 하나가 메모리 누수를 겪고 다운되면, 다른 서버는 축은 서버의 짐을 가져간다. 증가된 트래픽은 나머지 서버에서 메모리 누수가 더 빨리 진행되다는 것을 뜻한다.

  • 모호한 타이밍 버그를 찾아라. - 트래픽도 모호한 경쟁 상태를 일으킬 수 있다. 서버 하나가 교착상태 때문에 다시 다운된다면, 다른 서버에 늘어난 부하는 나머지 서버도 교착상태에 빠트릴 것이다.

  • 칸막이 패턴으로 방어하자. - 칸막이들이 이것을 사용하는 호출자가 다운되는 것을 돕지는 못하더라도, 칸막이 패턴으로 서버를 나누는 것은 전체 서비스를 전복시키는 연쇄 반응을 막을 수 있다. 호출하는 쪽에서는 이러한 연쇄반응을 막기 위해 차단기 패턴을 사용하자.


3. 연속적인 고장

  • 크랙이 경계를 뛰어넘는 것을 막자. - 연속적인 고장은 크랙이 한 시스템이나 한 계층에서 다른 곳으로 도약할 때 일어나는데, 대개 통합지점에서 심각한 문제가 생길수 있다고 생각하지 않기 때문이다. 연쇄 반응이 아래 계층에서 일어난 후연속적인 고장이 발생할 수도 있다. 시스템은 다른 엔터프라이즈 시스템을 안전하게 호출해야 한다. 다른 시스템이 다운되더라도 살아남아야 하기 때문이다.

  • 리소스 풀을 철저히 검사하자. - 연속적인 고장은 연결 풀과 같은 리소스 풀에서 자주 일어난다. 이런 풀들은 요청에 대한 응답을 할 수 없을 때 고갈되어 버린다. 연결을 얻으려는 스레드는 영원히 블록된다. 따라서연결을 기다리던 다른 모든 스레드도 블록된다. 안전한 리소스 풀은 리소스를 얻기 위해 스레드가 기다릴 수 있는 시간을 항상 제한한다.

  • 제한시간과 차단기를 이용해 방어하자. - 무언가가 이미 잘못되고 나면 연속적인 고장은 일어난다. 차단기는 문제가 생긴 통합지점에 대한 호출을 피함으로써 시스템을 보호한다. 제한시간을 사용하여 문제가 생긴 통합 지점을 호출하는데서 빠져나올 수 있다.


728x90
Comments