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 |