Fault Tolerance

2015.9.20

Fault Tolerance의 의미는

  • 장애 허용 or 장애 감내

  • 일부 결함이나 고장이 발생해도 계속 사용

  • 단계별 성능 저하

고장을 복구하는걸까

vs

버티고 있는 걸까

이중화 시스템(replication)

  • Replication: 동일 시스템 복수 준비, 병렬실행

  • Redundancy: 동일 시스템 복수 준비, 전환실행

  • Diversity: 시스템이 다양하다.

장애 복구 시점에 따라 구분하면

  • roll-forward: 장애발생 시점부터 복구

  • roll-back: 장애발생 이전 시점으로 돌려서 복구

    • 멱등성: 복구를 여러번 시도해도 결과는 동일해야 한다.
출처: https://en.wikipedia.org/wiki/Fault_tolerance

장애 허용 시스템을 위한 설계

  • No Single Point of Failure

    • 복구작업과 무관하게 시스템이 운영되어야 한다.
  • Fault Isolation

    • 고장난 부분을 정상시스템으로부터 분리시킬수 있어야 한다.
  • Fault Containment

    • 고장난 부분이 나머지 시스템을 고장내지 않아야 한다.

Akka FT 전략

  • Fault containment or isolation
  • Structure
  • Redundancy
  • Replacement
  • Reboot
  • Component lifecycle
  • Suspend
  • Separation of Concern

Structure

고장난 컴포넌트를 격리시키려면

시스테이 격리할 실행부분의 구조를 정의할수 있어야 한다.

Redundancy

컴포넌트가 처리에 실패하면 백업 컴포넌트가 대신 처리한다.

Replacement

고장난 컴포넌트가 격리되면 새로운 컴포넌트로 대체한다.

시스템은 대체된 컴포넌트와 통신할수 있다.

Reboot

컴포넌트가 잘못되면 사전에 정의해 놓은 초기상태로 되돌릴수 있어야 한다.

하지만 컴포넌트간의 종속성때문에 가능한 모든 초기상태를 파악할수는 없다.

Component lifecycle

컴포넌트는 created, started, restarted, stopped, terminated 같은 상태를 갖는다.

Suspend

컴포넌트가 실패했을때 복구되거나 교체될때까지 요청을 유지시킨다.

장애 복구에 중요한 정보를 유지할수 있다.

Separtion of concerns

장애 복구 코드와 정상 코드는 분리되어야 한다.

예제로 보는 FT 구현

로그파일을 읽어서 DB에 집어넣는

멀티쓰레드 시스템

DB 연결에 문제가 발생하면

  • Fault isolation
    • 많은 쓰레드가 동시에 예외를 던지면 격리가 어렵다.
    • lock 기법을 직접 구현
  • Structure
    • 객체는 단순,방향성
    • 객체 추출은 직접 구현
  • Redundancy
    • 예외가 발생하면 (다른 컴포넌트에게) 입력데이터 컨텍스트를 전달할수 없다.
  • Replacement
    • 객체 인스턴스를 직접 호출하게 되면 새로운 인스턴스에 접근할수 없다.
  • Reboot
    • 자동으로 초기상태로 돌아가지 않으니 직접 구현
    • 종속된 컴포넌트를 고려하려면 복잡하다.
  • Component lifecycle
    • 직접 구현
  • Suspend
    • 버퍼에 입력받은 요청을 저장해야 한다.

FT에 대처하는 Akka의 자세

정상 처리와 장애 처리 흐름을 분리

  • 정상 컴포넌트가 실패하는지 수퍼바이저가 모니터링
  • 예외를 잡기 보다는 그냥 예외를 발생하도록 놔둔다.

Let it Crash

LogProcessingSupervisor가

고장여부를 모니터링한다.

dbWriter가 고장나면 새로운 dbWriter로 대체된다.

FT를 대하는 우리의 자세

  • 시스템은 망가진다. (그래서 FT가 필요하다.)

  • 주요 모듈만 고장나지 않았으면 버틴다.

    • 고장이 확산되지 않도록 분리하라.
  • 어떤모듈은 고장나면 안된다.

    • 다른머신에 액티브 백업을 준비한다.

Fault Tolerance

By k16wire

Fault Tolerance

  • 1,292