본문 바로가기

Design Pattern

[Design pattern] Master-Slave

Master-Slave 

- 디자인 패턴은 마스터 컴포터가 자신과 동등한 역활을 하는 Slave에 컴포넌트에 작업을 분산하고, 

이 Slave들에서 반환된 결과들로 부터 최종 결과를 계산해내는 패턴이다.


문제.

- 클라이언트는 계산이 분할-정복 원칙에 근거하고 있다는 사실을 알 필요가 없다. 

- 클라이언트나 서브태스크의 처리는 작업을 분할하고 최종 결과를 모으는 알고리즘에 좌우되어서는 안 된다.

- 서브태스크들을 처리하기 위해서는 (예를 들어 계산 정확도를 향상시키기 위한 경우처럼) 서로 다르지만 

의미적으로 동일한 구현들을 사용하는 것이 좋다. 

- 서브태스크들을 처리할 때 간혹 조정이 필요하기도 하다.



해법.

장애 허용성 – 서비스의 실행을 여러 개의 복제된 구현들에 위임한다. 분할된 서비스의 실행들에 장애가 발생하는지 탐지하고 처리한다.

병렬 컴퓨팅 – 복잡한 태스크를 병렬로 실행되는 일정 개수의 동일한 서브태스크들로 분할한다. 이 서브태스크들을 처리해 얻게 되는 결과들을 활용해 최종 결과를 얻는다.

계산 정확도 – 서비스의 실행을 각기 다른 몇 개의 구현들에 위임한다. 정확하지 못한 결과들을 탐지하고 처리한다.


동작

구현.

작업을 분할한다.

서브태스크의 결과들을 조합한다.

마스터와 슬레이브 간의 협력을 정의한다.

- 1단계에서 파악해낸 서브서비스의 인터페이스를 정의.

   이 인터페이스는 슬레이브에 의해 구현되며, 마스터는 이 인터페이스를 

   사용해 개별 서브태스크들의 처리를 위임.

   ※ 서브테스크들을 마스터에서 슬레이브로 넘기는 방법

       1. 서브태스크를 매개변수로 포함시킨다.

       2. 마스터가 서브태스크들을 저장하고 슬레이브들이 저장된 

           서브태스크들을 가져올 리포지토리를 정의.

       ☞ 위 두 방법들 중 어느 것을 선택하느냐는 서브태스크를 슬레이브로 넘기는 비용,

           테이터 구조를 복제하는 비용, 공유된 데이터 구조를 여러 슬레이브에서 

           처리하는 비용등을 고려하여 선택.

슬레이브 컴포넌트를 구현한다.

마스터 컴포넌트를 구현한다.


장점.

교환가능성과 확장성이 도입된다.

- 추상 슬레이브 클래스를 제공함으로써 마스터에 큰 변경을 가하지 않고서도 기존에 

   있던 슬레이브 구현물을 교환하거나 새 슬레이브 구현물을 추가할 수 있게 된다.

역할의 분리가 가능하다.

효율이 향상된다.


단점.

실행가능성이 떨어진다.

머신 종속성의 제약을 받는다. 

구현이 어렵다.

이식성이 떨어진다.

'Design Pattern' 카테고리의 다른 글

[Design pattern] Command Processor  (0) 2013.02.21
[Design pattern] Proxy  (0) 2013.02.21
[Design pattern] Whole-Part  (0) 2013.02.21
[Design pattern] 팩토리 매서드 패턴  (0) 2013.02.20
[Design pattern] 빌더 패턴  (0) 2013.02.20