Broker Architecture 와 Dispatcher Architecture 는 Client와 Server 간 높은 QoS를 제공하기 위해 적용되는 Architecture Style이다. QoS는 Quality Of Service 로 풀이되며 서비스의 품질을 나타내는 요소이다. 네트워크 및 통신 시스템에서 데이터 전송 및 서비스 제공의 품질을 관리하고 제어하는 기술이나 메커니즘을 나타낸다. 주로 다음과 같은 상황에서 중요하게 사용된다. QoS를 확보하기 위해선, 다음과 같은 설계 결정을 내릴 수 있다.
- 특정 데이터 유형 또는 서비스에 대한 대역폭을 확대
- 서비스에 대한 우선순위 정의하여 우선순위 기반 서비스
- 패킷 전송 및 라우팅 조절하는 방법 (Scheduling)
- 패킷 필터링 및 분류를 통한 데이터 식별하여 트래픽 분류 및 제어
- QoS 정책 설정
위와 같은 설계 결정을 고려한 Arhictecture Style이 바로 Broker 와 Dispatcher Style이다. Client 와 Server 사이에 Broker나 Dispatcher가 배치되어 서비스 품질을 높이고자 한다. Client 와 Server 가 느슨한 결합을 가능하게 한다. 서로의 존재를 명시적으로 드러내지 않아 유연성과 확장성을 제공한다.
1. Broker Architecture Style
Broker는 Client와 Server 사이에 배치되며, 모든 Service를 중재한다. Client는 Broker에게 Service를 전달하고, Broker는 여러 Server 중 가장 높은 QoS를 제공하는 Server에게 전달한다. 여러 Server간 가장 적합한 인스턴스를 찾고 Load 밸런싱하는 역할을 수행한다. 시스템에서 중앙화된 중재자(브로커)가 Tier간 결합도를 낮추고 효과적인 통신을 지원한다.
Broker Style의 구성 요소는 다음과 같다.
- Broker : 컴포넌트 간의 통신을 중개하고 관리하는 주체로 메시지나 이벤트를 수신하고 전달한다.
- Client : 브로커와 연결되는 컴포넌트 이며, 브로커를 통해 Server와 통신한다.
- Server : 서비스 또는 리소스를 제공하는 컴포넌트이다. 브로커는 서버를 등록하고, Client에게 제공한다.
Broker Style을 통해 로깅과 모니터링을 강화 할 수 있다. 중앙화된 방식으로 Client와 Server간 통신 모니터링이 용이하다. 또한 비교적 새로운 컴포넌트 추가나 스케일링이 간단하게 이루어진다.
2. Dispatcher Architecture Style
Dispatcher는 직접 Service를 전달하지 않는다. 가장 적합한 Server를 선택하여 Handler를 Client에게 전달하고, Client가 직접 Server와 상호작용을 수행한다. Client와 Server가 직접 상호작용을 수행하기 때문에, 더 높은 성능을 얻을 수 있다.
Broker의 경우, 중재자를 통해 메시지를 전달하기 때문에, Broker가 병목이 될 수 있다. Dispatcher Style Client와 가장 효율적인 Server가 직접 메시지를 전달하기 때문에 병렬 처리에 유리하다.
Broker의 경우, 컴포넌트 간에 직접적인 통신이 없기 때문에, 컴포넌트 간의 상호 작용을 추상화하고 유연성 제공이 가능하다. 반면 Dispatcher 는 컴포넌트를 직접적으로 알아야 하기 때문에 유연성이 떨어진다.
위 두 Style은 각각 사용처의 목적이 다르다
- Broker Architecture Style : 중재자 기반의 통신 관리와 메시지 라우팅이 필요한 경우.
- Dispatcher Architecture Style : 컴포넌트간 병렬 처리가 필요한 경우.
3. Master-Slave Architecture Style
Master-Slave Architecture Style은 분산 시스템에서 사용되는 Style로 작업을 시키는 Component 와 작업을 지시 받는 Component로 구성된다. 이 스타일은 병렬 처리와 장애 복구 및 고가용성을 제공하기 위해 사용된다.
여러 Slave를 두고, Master가 이를 통제하여 복구를 시도할 수 있다. 마스터는 작업을 조정하고 지시하는 주체로써, 작업을 분할 하여 각 Slave에게 할당할 수 있으며, 작업의 진행 상황을 모니터링 한다. 마스터를 서버의 결과를 수집하여 통합하고 최종 결과를 만들어 Client에게 제공한다.
Slave는 마스터로부터 할당된 작업을 수행하는 주체이다. Slave는 독립적으로 작업을 수행하고, 마스터에게 결과를 보고한다. 여러 Slave에게 작업을 분산 시켜 병렬 처리를 가능하게 하고, Slave를 추가하여 확장성을 제공할 수도 있다. 작업 부하가 증가하면 부하를 분산 처리 가능하다. 이는 시스템의 성능을 향상 시키고, 사용 가능한 자원을 최대한 활용할 수 있게 한다.
Slave 하나가 장애가 발생하게 되더라도, 다른 Slave가 해당 작업을 계속 수행 할 수 있다. 이는 시스템의 신뢰성을 향상 시키고, 고가용성을 제공한다. Master가 Slave 제어의 권한을 갖고, 데이터를 처리하여 병렬 처리, 분산 등 다양한 분야에 사용될 수 있으며, 성능, 확장, 가용성 등을 향상 시키는데 도움을 준다. Slave는 일련의 작업을 병렬로 수행하고 결과를 마스터에 보고하며, 마스터는 이러한 결과를 수집하고 조정한다.
Master는 수행해야 할 작업을 여러 작은 작업으로 분할하고, 이 작업들이 병렬로 처리될 수 있도록, Slave들에게 할당한다. 이로써 시스템의 처리량이 향상된다. 마스터는 진행 상황을 모니터링하고 필요한 경우 다른 Slave로 재할당 할 수 있다.
Master Slave Style의 구성요소는 다음과 같다.
- Master : 시스템의 중앙 제어 역할을 한다. 마스터는 작업을 Slave에게 분배하고 모니터링하고, 결과를 수집하고 조합한다.
- Slave : 마스터에 의해 분배 된 작업을 수행하는 역할을 한다. Slave는 동시에 여러 작업을 수행 할 수 있으며, 작업을 마칠 때마다 결과를 마스터에게 보고한다.