시스템을 구성할 때, 특히 서버시스템이라면 장애(Fault) 에 대한 처리는 상당히 중요한 이슈이다. 

오랜시간동안 어떤 종류의 문제가 일어나도 문제가 일어나기 전과 후의 성능이 동일해야하며, 아웃풋 또한 동일해야 한다. 

이런 요건들이 마련되었을 때 해당 시스템을 내구력있는(Tolerant) 시스템이라 한다.


시스템을 구성하는 일부에서 fault / failure 발생해도 정상적 / 부분적으로 기능을 수행할 있는 시스템을 만들기 위해서 수행하는 복구의 종류로는 일반적으로 roll forward 복구, roll back 복구가 존재한다


Role forward 복구는 오류 발생 후의 상태에서 시스템을 복구하고 roll back 복구는 오류 발생 이전 check point 시스템을 복구한다.


Role Forward 복구와 Role Back 복구 모두, 복구 point 에러 발생 지점 간의 멱등성{몇번 실행해도 1 실행과 결과가 동일함이 보장되는 성질} 만족해야 한다.


이를 구현하기 위해서는 다음과 같은 테크닉이 주로 이용된다.



(1) 이중화 시스템

-  Replication :  동일 시스템을 복수로 준비하여 병렬로 실행시켜 다수를 만족한 결과를 올바른 결과로 적용한다.

-  Redundancy : 동일한 시스템을 복수로 준비하여 장애 발생시 보조 시스템으로 전환한다.

-  Diversity : 같은 사양에 다른 H/W 시스템을 복수로 준비하여 운용한다.

( 경우 시스템은 같은 장애를 만들어내지 않는다.)


(2) 동작지속 고장나도 지속적으로 동작해야 하며 복구 작업 성능 간섭이 없어야 한다.


(3) 고장분리 시스템이 고장과 분리되어 정상적인 구성요소에 영향을 주지 말아야 한다.


(4) 고장전염 고장이 전염되지 않게 유의해야 한다.



(1)번과 (3)번 원칙은 주로 설계에 대한 내용들이며, (2)번과 (4)번은 구현에도 직접적인 연관이 있는 편이다. 

서비스마다 차이가 있겠지만, 가능한 발생할 수 있는 "장애"의 단위를 격리시키고, 정상적인 결과를 낼 수 있는 Flow 를 고안하면서(설령 Error 가 Report 되더라도) 동시에 처리할 수 있는 "백신"을 모듈화시키는 것이 중요하다.


+ Recent posts