144
황희선 황선희 Fault Tolerant System 설계를 위한 패턴

Fault tolerant system_130629

Embed Size (px)

DESCRIPTION

fault tolerant system 설계를 위한 패턴 http://kcd.onoffmix.com/speaker.php 결함 허용 시스템? 결함(Fault) 안정성 (Reliability) 가용성 (Availability) 범위(Coverage) P(성공적으로 자동 복구됨|오류 발생) 계산 공식 = P(성공적인 오류 감지) X P(성공적인 오류 복구) 안정성과 가용성이 높은 시스템은 95% 이상의 커버리지 지향 결함 허용 시스템을 위한 Pattern Presence server 완화 단위 만들기 (UNIT OF MITIGATION) 완화 단위 만들기 (UNIT OF MITIGATION) 검사하고 수정하기 (CORRECTING AUDITS ) 검사하고 수정하기 (CORRECTING AUDITS ) 중복된 컴포넌트 및 기능 만들기 (Redundancy) 중복된 컴포넌트 및 기능 만들기 (Redundancy) 사람들의 간섭을 최소화하기(MINIMIZE HUMAN INTERVENTION ) 사람들의 간섭을 최소화하기(MINIMIZE HUMAN INTERVENTION ) 유지보수 인터페이스 만들기(MAINTENANCE INTERFACE) 유지보수 인터페이스 만들기(MAINTENANCE INTERFACE) 책임자 두기(SOMEONE IN CHARGE) 책임자 두기(SOMEONE IN CHARGE) 단계적으로 확대하기(ESCALATION) 단계적으로 확대하기(ESCALATION) 결함 감시자 두기 (FAULT OBSERVER) 결함 감시자 두기 (FAULT OBSERVER) 소프트웨어 업데이트 (SOFTWARE UPDATE) 소프트웨어 업데이트 (SOFTWARE UPDATE) 시스템 모니터(SYSTEM MONITOR) 시스템 모니터(SYSTEM MONITOR) 심장박동(HEARTBEAT) 심장박동(HEARTBEAT) 받았다고 알리기 (ACKNOWLEDGEMENT) 받았다고 알리기 (ACKNOWLEDGEMENT) 실제 임계값 (REALISTIC THRESHOLD) 실제 임계값 (REALISTIC THRESHOLD) 체크섬 (CHECKSUM) 체크섬 (CHECKSUM) 일시적인 것들은 무시하기 (RIDING OVER TRANSIENTS) 일시적인 것들은 무시하기 (RIDING OVER TRANSIENTS) 재시작 (RESTART) 재시작 (RESTART) 재시도 횟수를 제한하기 (LIMIT RETRIES) 재시도 횟수를 제한하기 (LIMIT RETRIES) 데이터 리셋 (DATA RESET) 데이터 리셋 (DATA RESET) 공평한 자원 할당 (EQUITABLE RESOURCE ALLOCATION ) 공평한 자원 할당 (EQUITABLE RESOURCE ALLOCATION ) 리소스 할당을 위해 큐에 넣기 (QUEUE FOR RESOURCES ) 리소스 할당을 위해 큐에 넣기 (QUEUE FOR RESOURCES ) 새로운 일부터 하기 (FRESH WORK BEFORE STALE) 새로운 일부터 하기 (FRESH WORK BEFORE STALE) 표시된 데이터(MARKED DATA) 표시된 데이터(MARKED DATA) 재통합 (REINTEGRATION) 재통합 (REINTEGRATION) 근본 원인 분석 (ROOT CAUSE ANALYSIS) 근본 원인 분석 (ROOT CAUSE ANALYSIS) 2. 제 때에 오지 않는 정보의 원인이 되는 결함 Wrap up 1 < 개념 설명 > 결함 허용 시스템이 무엇인지? 결함 허용 시스템 구조의 4가지 단계 용어설명 : 결함, 오류, 장애 안정성, 가용성, 커버리지 Wrap up 2 < 응답하라2013 서버 > 결함 허용 시스템을 만들 때의 마음가짐 초기 설계패턴 및 오류 감지, 오류 복구, 오류 완화 , 결함 치료 단계별 패턴 To do 더 많은 결함허용패턴들 실제 패턴 별 구현 방법 각자의 시스템에 결함 허용을 할 수 있도록 만들어 보기 참고 문헌 Robert S. Hammer, Patterns for fault tolerant software, Wiley, 2007 < 웹사이트 > http://www.slideshare.net/ufried/no-crash-allowed-fault-tolerance-patterns

Citation preview

Page 1: Fault tolerant system_130629

황희선 황선희

Fault Tolerant System

설계를 위한 패턴

Page 2: Fault tolerant system_130629

Google App Engine + Android Push Service

1. 결함 허용 시스템

에 대한 소개

2. 결함 허용 시스템

패턴 이용해

설계해보기

황희선황선희

Page 3: Fault tolerant system_130629

Google App Engine + Android Push Service

결함 허용 시스템의

정의

Page 4: Fault tolerant system_130629

Google App Engine + Android Push Service

결함 허용 시스템?

결함

“내 결함성 시스템”

“고 신뢰성 시스템”

다운이 허용될 수 없는 시스템(은행이나 e-Commerce)

실시간 프로세스 제어시스템 (좌석예약시스템 )

결함이 인명 손실에 영향을 주는 시스템(자동차, 병원)

연 중 보수작업이 불가능한 시스템(우주 항해 시스템)

결함이 막대한 경제적 손실을 야기하는 시스템

(원전 시스템)

Page 5: Fault tolerant system_130629

Google App Engine + Android Push Service

결함을 가진 시스템이

중단 없이

서비스를 제공하기 위해서

활용할 수 있는

4가지 기능이 있습니다.

Page 6: Fault tolerant system_130629

Google App Engine + Android Push Service

결함치료기능

오류복구기능

오류완화기능

오류감지기능

Page 7: Fault tolerant system_130629

Google App Engine + Android Push Service

Page 8: Fault tolerant system_130629

Google App Engine + Android Push Service

데이터방송 TV

방송정보 노래방

애플리케이션

Page 9: Fault tolerant system_130629

Google App Engine + Android Push Service

스레드 관리 모듈에

결함이 있는

데이터 방송 TV가

있다고 생각해 봅시다

Page 10: Fault tolerant system_130629

Google App Engine + Android Push Service

사용자가

채널을 돌리는 경우

Page 11: Fault tolerant system_130629

Google App Engine + Android Push Service

이전 채널의 애플리케이션 종료

새로운 채널의

애플리케이션 실행

TV 애플리케이션 관리 모듈은

Page 12: Fault tolerant system_130629

Google App Engine + Android Push Service

스레드 관리 모듈

스레드

결함이 없는 스레드 모듈은

애플리케이션 종료 시

스레드

스레드

Page 13: Fault tolerant system_130629

Google App Engine + Android Push Service

결함을 가진

스레드 관리 모듈

스레드

애플리케이션 종료 시

스레드

스레드

결함을 가진 스레드 관리 모듈

좀비스레드좀비스

레드

Page 14: Fault tolerant system_130629

Google App Engine + Android Push Service

애플리케이션의 실행과 종료가

반복되면

좀비 스

레드

좀비 스

레드

좀비 스

레드

좀비 스

레드

좀비 스

레드

좀비 스

레드

Page 15: Fault tolerant system_130629

Google App Engine + Android Push Service

새로운 애플리케이션 실행 시

좀비스레드로 인해

좀비 스

레드

좀비 스

레드

좀비 스

레드

좀비 스

레드

좀비 스

레드

좀비 스

레드실행이 느려지는 장애가 발생

Page 16: Fault tolerant system_130629

Google App Engine + Android Push Service

이 문제를 해결하기 위해

스레드 관리 모듈

좀비 스

레드

검사하는 기능 추가하였습니다.

주기적

검사기능스레드관리 모듈에

주기적으로 좀비스레드를

Page 17: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 감지 기능

Page 18: Fault tolerant system_130629

Google App Engine + Android Push Service

스레드 관리 모듈

주기적

검사기능

스레드

종료 기능좀비 스

레드

좀비 스

레드

좀비 스

레드

오류 완화를 위한 예제여전히 애플리케이션

실행과 종료 사이에서

좀비스레드가 쌓이지만

주기적으로 좀비스레드를

강제 종료 시켜주기 때문에

성능저하 장애는

방지할 수 있습니다.

Page 19: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 완화 기능

Page 20: Fault tolerant system_130629

Google App Engine + Android Push Service

좀비 스

레드

좀비 스

레드

좀비 스

레드

좀비 스

레드

좀비 스

레드

좀비 스

레드

오류 복구 기능 예제

좀비스레드로 인해

메모리 누수 오류가 발생하여

화면이 표시되지 않는

장애가 발생할 경우가 있습니다.

새로운 애플리케이션이 실행 시

Page 21: Fault tolerant system_130629

Google App Engine + Android Push Service

메모리 누수를 해결하기 위해

애플리케이션

관리 모듈

메모리

해제 기능좀비

스레드스레드

스레드

결과

애플리케이션 화면이

표시되지 않는 장애를

방지합니다.

Page 22: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 복구 기능

Page 23: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 감지, 복구, 완화 기능은

결함 자체를 제거하지 못합니다

따라서 결함을 가진 모듈이 실행되면

오류가 여전히 발생 합니다

소프트웨어 업데이트 모듈을 두어

결함자체를 치료할 수 있습니다

Page 24: Fault tolerant system_130629

Google App Engine + Android Push Service

결함 치료 기능

Page 25: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 감지 기능

오류 복구 기능

오류 완화 기능

결함 치료 기능

Page 26: Fault tolerant system_130629

Google App Engine + Android Push Service

결함, 오류, 장애에 대한

용어 정리

Page 27: Fault tolerant system_130629

Google App Engine + Android Push Service

결함

(Fault)오류

(Error)장애

(Failure)시스템이나 소프트웨어- 부정확한 요구사항 명세서- 잘못된 설계- 코딩 오류

이 결함을 가진 부분이 실행되면 오류를발생시킬 수 있습니다오류가 여러 번 반복되고

이런 오류가 서비스 실행에 관련이 있으면시스템이시스템 명세서대로 동작하지 않는 장애를 발생

> >

Page 28: Fault tolerant system_130629

Google App Engine + Android Push Service

시스템의

결함 허용 정도를

측정하는 기준

Page 29: Fault tolerant system_130629

Google App Engine + Android Push Service

안정성 (Reliability)

특정 기간 동안 장애가 없는 정도를 의미

MTTF : Mean Time To Failure

시간

장애 수리

(복구나 완화)장애

MTTF

안정성(=e-(1/MTTF) ) ∝ MTTF안정성 요구사항 예제시카고에서 로스앤젤레스로 가는 비행기 경우

MTTF가 5보다 커야 한다 비행 거리가 5이고 이 시

간에는 장애가 발생하면 안되기때문이다

Page 30: Fault tolerant system_130629

Google App Engine + Android Push Service

가용성 (Availability)

시스템이 기능 수행할 수 있는 기간이 전체 가동 기

간의 몇 퍼센트인지 나타냄

MTTR : Mean Time To Repair, MTTF

시간

장애 수리(복구나 완화) 장애 수리(복구나 완화)

MTTR MTTRMTTF

가용성 (=MTTF / (MTTF+MTTR))가용성 ∝ (1 / MTTR), 가용성 ∝ MTTF

가용성 요구사항 예제

4ESS™ 스위치는 40년간 고장시간은 2시간만 허용한다

즉 가용할 수 없는 시간이 연간 3분이어야 한다

Page 31: Fault tolerant system_130629

Google App Engine + Android Push Service

범위(Coverage)

P(성공적으로 자동 복구됨|오류 발생)

계산 공식

= P(성공적인 오류 감지) X P(성공적인

오류 복구)

안정성과 가용성이 높은 시스템은

95% 이상의 커버리지 지향

Page 32: Fault tolerant system_130629

Google App Engine + Android Push Service

내결함 처리를 위한 Core Patterns

결함 허용 시스템을 위한 Pattern

Architectural Patterns

오류 감지

Patterns

오류 복구

Patterns

오류 완화

Patterns

결함 치료

Patterns

시스템 설계 초기, 아키텍쳐 설계 시

결함 허용 기능을 위해 고려해야 할 사항이나 설계지침

Page 33: Fault tolerant system_130629

Google App Engine + Android Push Service

예제

황선희

Page 34: Fault tolerant system_130629

Google App Engine + Android Push Service

접속한 사용자들의 상태를

실시간으로 알려주는

간단한 서버를 하나 만들어 봅시다.

Page 35: Fault tolerant system_130629

Google App Engine + Android Push Service

Presence serverPresence Server

부재) 응답하라2013 서버

Page 36: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버

업데

이트저장

Page 37: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버

Page 38: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버

Page 39: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버

Page 40: Fault tolerant system_130629

Google App Engine + Android Push Service

결함 허용 시스템을

설계해보기!

Page 41: Fault tolerant system_130629

Google App Engine + Android Push Service

간단한 서버로 보이지만

고려해야 할

여러 단계가 있어요.

Page 42: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 감지 패턴

오류 복구 패턴

오류 완화 패턴

결함 치료 패턴

초기 설계단계에서 고려해야 할 패턴

Page 43: Fault tolerant system_130629

Google App Engine + Android Push Service

초기 설계단계에서

고려해야 할 패턴들

Page 44: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍트는

원래 필요한 패턴들을

미리 알고

해당 시스템에 필요한

패턴들만 선택해서 목록을 만

들어야 합니다.

Page 45: Fault tolerant system_130629

Google App Engine + Android Push Service

아직 패턴에 익숙지 않으시니

응답하라2013 서버에 필요한

패턴 목록 즉 패턴 랭귀지와

패턴을 보여드리고

쓰임새를 설명할게요.

Page 46: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

완화 단위

만들기

units of

mitigation

아키텍쳐

Page 47: Fault tolerant system_130629

Google App Engine + Android Push Service

완화 단위 만들기

(UNIT OF MITIGATION)

결함 허용 시스템의 기본단위

오류를 복구할 수 있는 메커니즘 포함

기능 수행 자가체크

& 정상수행 안 할 경우 멈추거나 복구

초기 단계 설계 패턴

Page 48: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버

완화 단위 만들기

(UNIT OF MITIGATION)

정보를 받는 부분

처리하는 부분

보내는 부분으로 나누어

각각의 단위에

셀프 체킹 기능과

자동으로 복구하는 메커니즘을 넣는다.

Page 49: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

검사하고

수정하기

Correcting

Audits

완화 단위

만들기

units of

mitigation

Page 50: Fault tolerant system_130629

Google App Engine + Android Push Service

검사하고 수정하기

(CORRECTING AUDITS )

하드웨어 or 소프트웨어 에러 발생시 자

동 수정

데이터 구조의 특성

(링크드리스트, 바운더리)

위생 상태 체크(체크섬)

초기 단계 설계 패턴

Page 51: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버예를 들면

정보를 받는 부분에서

받은 정보가 정확한 정보인지를

체크섬으로 확인하고

틀리면

자동으로 수정하거나 리셋한다.

검사하고 수정하기

(CORRECTING AUDITS )

Page 52: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

중복된 컴포넌

트 및 기능

만들기

Redundancy

검사하고

수정하기

Correcting

Audits

Page 53: Fault tolerant system_130629

Google App Engine + Android Push Service

중복된 컴포넌트 및 기능 만들기

(Redundancy)

중복된 컴포넌트나 기능을 제공하여

에러 처리를 병렬적으로 할 수 있게 함.

시스템 이용성이 증가

Page 54: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버이 시스템은 프로세서가

더 추가 된다는 요구사항을 가지고

있다.

프로세서가 더 추가되면

시스템을 이용할 수 있는

가용성(Availability)이 증가 된다.

중복된 컴포넌트 및 기능 만들기

(Redundancy)

Page 55: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

사람들의 간섭

을 최소화하기

Minimize

human

intervention

중복된 컴포넌트

및 기능

만들기

Redundancy

Page 56: Fault tolerant system_130629

Google App Engine + Android Push Service

사람들의 간섭을 최소화하기

(MINIMIZE HUMAN INTERVENTION )

사람의 개입은

시스템의 속도를 저하시키거나

잘못된 오류를 일으키기 쉬움

최대한 사람의 간섭을 배제시킴

초기 단계 설계 패턴

Page 57: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버예를 들면

오류를 복구하는 과정에서

가능한 한 사람의 Yes or No같은

응답을 요구하지 않게

자동 복구로 설계한다.

사람들의 간섭을 최소화하기

(MINIMIZE HUMAN INTERVENTION )

Page 58: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

유지보수 인터

페이스 만들기

Maintenance

interface

사람들의 간섭을

최소화하기

Minimize human

intervention

Page 59: Fault tolerant system_130629

Google App Engine + Android Push Service

유지보수 인터페이스 만들기

(MAINTENANCE INTERFACE)경험 있고 실력 있는 전문가는

더 빠른 시간 내에

더 잘

해결할 수 있으니

시스템을 모니터링 하거나

복구할 수 있도록

인터페이스를 둔다.

초기 단계 설계 패턴

Page 60: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버유지보수 인터페이스를 만들어

전문가가

현재 처리되는 상황을

모니터링하거나

오류를 처리할 수 있도록 한다.

유지보수 인터페이스 만들기

(MAINTENANCE INTERFACE)

web 형식의 인터페이스

Page 61: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

책임자

두기

Someone in

charge

유지보수 인터페

이스 만들기

Maintenance

interface

Page 62: Fault tolerant system_130629

Google App Engine + Android Push Service

책임자 두기(SOMEONE IN CHARGE)

장애 발생시 시스템이 멈추지 않도록 에

러를 감시하고 처리하는

책임자 두기

Page 63: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버전체 시스템을

모니터링 하는

시스템 모니터가 있어서

오류가 발생할 경우

처리를 요청한다

책임자 두기(SOMEONE IN CHARGE)

Page 64: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

단계적으로

확대하기

Escalation

책임자 두기

Someone

In charge

Page 65: Fault tolerant system_130629

Google App Engine + Android Push Service

단계적으로 확대하기

(ESCALATION)

에러복구나 에러 완화에 실패하면

다음 단계의 더 강한 액션을 취함

초기 단계 설계 패턴

Page 66: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버서버가 멈췄을 경우

ACK가 오는지 확인하거나

그래도 오지 않을 경우

몇 차례 재시도를 하거나

그래도 안될 경우

재시작을 한다.

단계적으로 확대하기

(ESCALATION)

단계별로 좀 더 강한 액션을 취한다.

Page 67: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

결함 감시자

두기

Fault observer

단계적으로

확대하기

escalation

Page 68: Fault tolerant system_130629

Google App Engine + Android Push Service

결함 감시자 두기

(FAULT OBSERVER)

모든 오류를 감시자에 레포트하면

결함 감시자는 관심을 가진 수신자에게

에러를 보냄

초기 단계 설계 패턴

Page 69: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버예를 들어 결함감시자가

오류의 발생을

유지보수 인터페이스에

알려주면

관리자는 유지보수 인터페이스를

통하여 오류를 복구 할 수 있다.

결함 감시자 두기

(FAULT OBSERVER)

Page 70: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

소프트웨어

업데이트

Software

update

결함 감시자

두기

Fault observer

Page 71: Fault tolerant system_130629

Google App Engine + Android Push Service

소프트웨어 업데이트

(SOFTWARE UPDATE)

소프트웨어 업데이트를 통해

지속적으로

결함을 제거하거나

기능을 향상시킴

초기 단계 설계 패턴

Page 72: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버소프트웨어 업데이트 기능은

기능을 중간에 추가할 경우

고려사항이 많아지기 때문에

초기 설계단계에서

기능을 추가하여야 한다

소프트웨어 업데이트

(SOFTWARE UPDATE)

Page 73: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

소프트웨어

업데이트

Software update

Page 74: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 감지 패턴

오류 복구 패턴

오류 완화 패턴

결함 치료 패턴

초기 설계단계에서 고려해야 할 패턴첫 번째 미션 클리어!

Page 75: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 감지 패턴

Page 76: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

시스템 모니터

System monitor

오류 감지

Page 77: Fault tolerant system_130629

Google App Engine + Android Push Service

시스템 모니터(SYSTEM MONITOR)

시스템이 제대로 수행되는지 확인

관찰하던 컴포넌트가 멈출 경우

결함 감시자에게 레포트하고

올바른 초기화를 수행함

Page 78: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버시스템 상에서만 확인할 수 있는

오류를

감지하는 역할을 한다.

시스템 모니터(SYSTEM MONITOR)

Page 79: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

심장박동

Heartbeat

시스템 모니터

System monitor

Page 80: Fault tolerant system_130629

Google App Engine + Android Push Service

심장박동(HEARTBEAT)

이 방법을 통해 시스템 모니터는

관찰 하는 컴포넌트가

잘 수행 되고 있다는 것을 알 수 있음

관찰 되는 컴포넌트로부터

주기적으로 반응이 전달됨

오류 감지 패턴

Page 81: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버일정한 시간 간격에

맞춰서

시스템의 상태를

시스템의 나머지 부분들에 보낸다.

심장박동(HEARTBEAT)

Page 82: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

받았다고

알리기

acknowledgeme

nt

심장박동

Heartbeat

Page 83: Fault tolerant system_130629

Google App Engine + Android Push Service

받았다고 알리기

(ACKNOWLEDGEMENT)

두 개의 태스크 사이에서

상대방이 살아있고

제대로 기능한다는 것을

알리는 방법

일정한 시간이 지난 후

ACK가 오지 않으면

결함 감시자에게 레포트 함

오류 감지 패턴

Page 84: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버송신자에게

수신자가

살아있음을

알리는 방법이다.

받았다고 알리기

(ACKNOWLEDGEMENT)

Page 85: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

실제 임계값

Realistic

Threshold

받았다고 알리기

Acknowledgeme

nt

Page 86: Fault tolerant system_130629

Google App Engine + Android Push Service

실제 임계값

(REALISTIC THRESHOLD)

ACK를 받기 까지 기다린 시간을

결함관리자에게

오류 레포트를 함

실제 임계값과 비교하여

임계값을 넘을 경우

상황에 따른 임계값 리스트가 필요

오류 감지 패턴

Page 87: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버임계값을 상황에 맞게 설정하여

20ms 안에 ACK오지 않으면

오류로 간주하고 재시도를 한다 던지

실제 임계값

(REALISTIC THRESHOLD)

100ms 안에 오지 않으면

결함 관찰자에게 알리던지 하는 등

임계값에 따라 ACK, 심장박동에서

오류여부를 판단한다.

Page 88: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

체크섬

Checksum

실제 임계값

Realistic

threshold

Page 89: Fault tolerant system_130629

Google App Engine + Android Push Service

체크섬 (CHECKSUM)

데이터 값이 정확한지

알아보는 방법

오류 감지 패턴

Page 90: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버데이터 값이

오류가 있는지

판단할 수 있도록

정보가 추가 된다.

체크섬 (CHECKSUM)

Page 91: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

일시적인 것들

은 무시하기

Riding over

transients

체크섬

Checksum

Page 92: Fault tolerant system_130629

Google App Engine + Android Push Service

일시적인 것들은 무시하기

(RIDING OVER TRANSIENTS)

결함 상관관계 패턴을 통하여

일시적인 결함이라고 판단되면

발생 빈도만 모니터링 한 후

기대한 이상으로 발생하지 않을 때

해당 결함은 무시함

시스템을 모니터링 하다가

결함이 발견되어

오류 감지 패턴

Page 93: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버일시적인 오류를 판단하여

처리하느라 시스템에

무리가 가지 않도록

일시적인 것들은 무시하기

(RIDING OVER TRANSIENTS)

무시하기도 한다.

Page 94: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

일시적인 것들은

무시하기

Riding over

transients

Page 95: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 감지 패턴

오류 복구 패턴

오류 완화 패턴

결함 치료 패턴

초기 설계단계에서 고려해야 할 패턴첫 번째 미션 클리어!

두 번째 미션 클리어!

Page 96: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 복구 패턴

Page 97: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

재시작

Resart

오류 복구

Page 98: Fault tolerant system_130629

Google App Engine + Android Push Service

재시작 (RESTART)오류 복구 패턴

오류 복구가 불가능 할 때

시스템을 재 시작함.

Page 99: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버복구를 할 수 없을 경우

단계에 맞춰

재시작을 한다.

소프트웨어만 재시작하는 경우

하드웨어만 재시작하는 경우

재시작 (RESTART)

둘 다 재시작 하는 경우가 있다.

Page 100: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

재시도 횟수를

제한하기

Limit retries

재시작

Restart

Page 101: Fault tolerant system_130629

Google App Engine + Android Push Service

재시도 횟수를 제한하기

(LIMIT RETRIES)

오류 복구 패턴

똑같은 자극이 주어지면

똑같은 오류가 발생한다.

똑같은 오류가 발생 할 때마다.

재 시도 하지 말고

해당 오류를 다룰 수 있는

전략이 필요하다.

Page 102: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버같은 상황에서

계속 동일한 오류가 발생할 수 있어서

그럴 때는 다른 방법으로 해결해야

재시도 횟수를 제한하기

(LIMIT RETRIES)

한다.

예를 들어 네트워크 인터페이스가

문제일 경우

계속해서 ACK를 보내지 않도록 한다.

Page 103: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

데이터 리셋

Data reset

재시도 횟수를 제

한하기

Limit retries

Page 104: Fault tolerant system_130629

Google App Engine + Android Push Service

데이터 리셋 (DATA RESET)오류 복구 패턴

수정할 수 없는 데이터가 있을 경우

초기값으로 리셋하기

Page 105: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버데이터의 구조도 복구할 수 없고

데이터 값도 알 수 없을 때

초기값으로 리셋하여

초기 단계로 전환되게 한다.

데이터 리셋 (DATA RESET)

Page 106: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

데이터 리셋

Data reset

Page 107: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 감지 패턴

오류 복구 패턴

오류 완화 패턴

결함 치료 패턴

초기 설계단계에서 고려해야 할 패턴첫 번째 미션 클리어!

두 번째 미션 클리어!

세 번째 미션 클리어!

Page 108: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 완화 패턴

Page 109: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

공평한자원할당

Equitable

resource

allocation

오류 완화

Page 110: Fault tolerant system_130629

Google App Engine + Android Push Service

공평한 자원 할당

(EQUITABLE RESOURCE ALLOCATION )

오류 완화 패턴

모든 비슷한 요청을

요청 풀(Pool)에 넣고

우선순위에 맞춰

공평하게 자원을 할당한다.

Page 111: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버하나의 엔터티에서

정보를 너무 많이 요청할 경우

다른 엔터티는

느려지거나 정보를 받을 수 없기에

우선순위에 맞게 자원을 할당하여

공평한 자원 할당

(EQUITABLE RESOURCE ALLOCATION )

정보를 전달할 수 있게 한다.

Page 112: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

리소스 할당을

위해 큐에 넣기

Queue for

resources

공평한 자원할당

Equitable

resource

allocation

Page 113: Fault tolerant system_130629

Google App Engine + Android Push Service

리소스 할당을 위해 큐에 넣기

(QUEUE FOR RESOURCES )

오류 완화 패턴

즉시 처리할 수 없는

요청은 큐에 넣어

순서에 맞춰

리소스를 할당 받는다.

Page 114: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버큐를 사용하여

요청을 처리하면

우선순위에 맞게

리소스를 할당 받을 수 있다.

리소스 할당을 위해 큐에 넣기

(QUEUE FOR RESOURCES )

Page 115: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

새로운 일부터

하기

Fresh work

before stale

리소스 할당을 위

해 큐에 넣기

Queue for

resources

Page 116: Fault tolerant system_130629

Google App Engine + Android Push Service

새로운 일부터 하기

(FRESH WORK BEFORE STALE)

오류 완화 패턴

LIFO 큐를 사용하여

새로운 요청을 가장 먼저 처리한다.

적어도 몇몇은

좋은 서비스를 받게 된다.

Page 117: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버요청을 순서대로 처리하다 보면

나중에 들어온 요청은

또 앞에서 처리하는 시간 만큼

기다려야 하기 때문에

새로운 일부터 하기

(FRESH WORK BEFORE STALE)

새로운 요청부터 처리하면

적어도 몇몇 요청은

좋은 서비스를 받을 수 있다.

Page 118: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

표시된 데이터

Marked data

새로운 일부터 하

Fresh work

before stale

Page 119: Fault tolerant system_130629

Google App Engine + Android Push Service

표시된 데이터(MARKED DATA)

오류가 있는 데이터에

표시를 하여

오류 처리를 할 수 있도록

룰을 정의한다.

Page 120: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버오류가 있는 데이터에

표시를 해주어

나중에 한꺼번에

특정 블록에서

처리하는 로직을 둘 수 있다.

표시된 데이터(MARKED DATA)

Page 121: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

표시된 데이터

Marked data

Page 122: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 감지 패턴

오류 복구 패턴

오류 완화 패턴

결함 치료 패턴

초기 설계단계에서 고려해야 할 패턴첫 번째 미션 클리어!

두 번째 미션 클리어!

세 번째 미션 클리어!

네 번째 미션 클리어!

Page 123: Fault tolerant system_130629

Google App Engine + Android Push Service

결함 치료 패턴

Page 124: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

재통합

Reintegration

결함 치료

Page 125: Fault tolerant system_130629

Google App Engine + Android Push Service

재통합 (REINTEGRATION)결함 치료 패턴

미리 정해진 절차에 따라

수정된 컴포넌트를

시스템에 재통합한다.

Page 126: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버소프트웨어 업데이트나

완화 기술에 의해

결함이 치료되면

치료된 컴포넌트를

재통합하여 기능을 수행토록 한다.

재통합 (REINTEGRATION)

Page 127: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

근본 원인 분석

Root cause

analysis

재통합

Reintegration

Page 128: Fault tolerant system_130629

Google App Engine + Android Push Service

근본 원인 분석

(ROOT CAUSE ANALYSIS)

결함 치료 패턴

오류나 결함의 근본 원인을 분석할 때

왜? 라는 질문을 5번 이상 하면

근본 원인을 찾아

수정할 수 있다.

Page 129: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버일시적인 수정이 아닌

소프트웨어 업데이트 기능 같은 경우

결함을 제거할 수 있기 때문에

정확한 근본 원인을 분석하여야지

재발이 되지 않는다.

근본 원인 분석

(ROOT CAUSE ANALYSIS)

Page 130: Fault tolerant system_130629

Google App Engine + Android Push Service

아키텍처 오류감지 오류복구 오류완화 결함치료

완화 단위 만들기단계적으로 확대하

기시스템 모니터 재시작 공평한 자원할당 재통합

검사하고 수정하기 결함 감시자 두기 심장박동재시도 횟수를 제한

하기

리소스 할당을 위해

큐에 넣기근본원인분석

중복된 컴포넌트 및

기능 만들기

소프트웨어 업데이

트받았다고 알리기 데이터 리셋 새로운 일부터 하기

사람들의 간섭을 최

소화하기실제 임계값 표시된 데이터

유지보수 인터페이

스 만들기체크섬

책임자 두기일시적인 것들은 무

시하기

근본 원인 분석

Root cause

analysis

Page 131: Fault tolerant system_130629

Google App Engine + Android Push Service

오류 감지 패턴

오류 복구 패턴

오류 완화 패턴

결함 치료 패턴

초기 설계단계에서 고려해야 할 패턴첫 번째 미션 클리어!

두 번째 미션 클리어!

세 번째 미션 클리어!

네 번째 미션 클리어!

다섯 번째 미션 클리어!

Page 132: Fault tolerant system_130629

Google App Engine + Android Push Service

사실은

가장 먼저!!

Page 133: Fault tolerant system_130629

Google App Engine + Android Push Service

결함허용시스템을

만들기 위해서는

가장 먼저

마음가짐이 필요했다!

Page 134: Fault tolerant system_130629

Google App Engine + Android Push Service

이 부분을 이렇게 하면 어떤

문제가 발생할까?

숨겨진 결함은 어디 있을까?

Page 135: Fault tolerant system_130629

Google App Engine + Android Push Service

발생할 여지가 있는 결함을

찾아 목록을 만든다.

그리고 나서 해결방법에 대한

패턴을 적용한다

Page 136: Fault tolerant system_130629

Google App Engine + Android Push Service

2. 제 때에 오지 않는 정보의 원

인이 되는 결함

서버가 수신자에게 정보를 보

내주지 않을 경우.

받았다고 알리기

심장박동

시스템 모니터

Page 137: Fault tolerant system_130629

Google App Engine + Android Push Service

이렇게 각 단계에 맞는

패턴을 적용하여 구성하면

응답하라 2013

결함 허용 시스템 설계가

완성 됩니다!

Page 138: Fault tolerant system_130629

Google App Engine + Android Push Service

응답하라 2013 서버

업데

이트저장

Page 139: Fault tolerant system_130629

Google App Engine + Android Push Service

Wrap up 1

< 개념 설명 >

결함 허용 시스템이 무엇인지?

결함 허용 시스템 구조의 4가지 단계

용어설명 : 결함, 오류, 장애

안정성, 가용성, 커버리지

Page 140: Fault tolerant system_130629

Google App Engine + Android Push Service

Wrap up 2

< 응답하라2013 서버 >

결함 허용 시스템을 만들 때의 마음가짐

초기 설계패턴 및 오류 감지, 오류 복구, 오류 완화 , 결함 치료 단계별 패턴

Page 141: Fault tolerant system_130629

Google App Engine + Android Push Service

To do

더 많은 결함허용패턴들

실제 패턴 별 구현 방법

각자의 시스템에 결함 허용을 할 수 있도록

만들어 보기

Page 142: Fault tolerant system_130629

Google App Engine + Android Push Service

참고 문헌

Robert S. Hammer, Patterns for fault tolerant software, Wiley, 2007

< 웹사이트 >

http://www.slideshare.net/ufried/no-crash-allowed-fault-tolerance-patterns

Page 143: Fault tolerant system_130629

Google App Engine + Android Push Service

Page 144: Fault tolerant system_130629

Google App Engine + Android Push Service

감사합니다.