발행-구독 모델

발행-구독 모델은 비동기 메시징 패러다임이다. 발행-구독 모델에서 발신자의 메시지는 특별한 수신자가 정해져 있지 않다. 대신 발행된 메시지는 정해진 범주에 따라, 각 범주에 대한 구독을 신청한 수신자에게 전달된다. 수신자는 발행자에 대한 지식이 없어도 원하는 메시지만을 수신할 수 있다. 이러한 발행자와 구독자의 디커플링은 더 다이나믹한 네트워크 토폴로지와 높은 확장성을 허용한다.

발행-구독은 메시지 큐 패러다임과 형제같은 관계로, 일반적으로 대형 메시지 지향 미들웨어 솔루션의 일부이다. 대부분의 메시징 시스템의 API(예: JMS)들은 발행-구독과 메시지 큐 모델을 모두 지원한다.

메시지 필터링
발행/구독 모델에서 구독은 이론적으로 전체 발행된 메시지의 부분집합만을 받는다. 수신자 별로 메시지를 분류하는 프로세스와 처리를 필터링이라 부른다. 필터링에는 일반적으로 토픽 기반과 콘텐츠 기반의 2가지 형태가 있다. 토픽 기반 시스템에서 메시지는 "토픽"으로 발행되거나 논리 채널들로 명명된다. 토픽 기반 시스템에서 수신자는 구독하고자 하는 모든 발행 메시지들을 받는다. 그리고 해당 토픽의 수신자들은 모두 같은 메시지를 받을 것이다. 발행자는 구독자가 구독할 메시지의 클래스를 정의한다. 콘텐츠 기반 시스템에서, 메시지는 구독자에 의해 정의된 메시지 콘텐츠나 속성의 제한적 일치시에 전달된다. 구독자는 메시지를 분류할 책임이 있다.

토폴로지
많은 발행/구독 시스템에서 발행자는 중개 브로커에게 메시지를 전달한다. 그리고 구독자들은 해당 브로커에 구독을 등록한다. 브로커는 일반적으로 발행자들로부터 구독자들에게 store-and-forward 명령을 이용하여 메시지를 전달할 루트를 정한다. 또 다른 발행/구독 시스템에서는 분산 라우팅과 필터링 기능에 의해 발행자와 구독자 사이의 메시지 브로커를 제거하였다. 때때로 데몬의 도움이 요구된다. 특별히 고성능옵션을 포함하는 발행/구독 토픽들은 IP 멀티캐스트 그룹들에 맵핑된다. 그래서 데이터는 발행자로부터 구독자들에게 직접적으로 전달될 수 있다. 콘텐츠 기반의 필터링은 메시지가 애플리케이션 레이어로 전달되기 전에 구독자 내에서 수행될 수 있다.

역사
최초의 발행-구독 시스템은 Isis 툴킷내의 "뉴스" 부 시스템이었고, 1987년 ACM심포지움의 OS 구조 컨퍼런스에서 발표되었다. 논문은 "Exploiting Virtual Synchrony in Distributed Systems. 123-138"이다. 발행-구독 기술은 완전한 기능적 발행-구독 솔루션을 개발한 최초의 사람으로 명성을 얻은 프랭크 슈먹(Frank Schmuck)에 의해 개발되었다.
장점
느슨한 결합:발행자는 구독자들과 느슨하게 결합되고, 서로의 존재를 알 필요가 없다. 관심사는 토픽에 있고, 발행자와 구독자는 시스템 토폴로지를 몰라도 상관이 없다. 각각은 서로를 고려하지 않은 채 동작을 지속할 수 있다. 전통적으로 강하게 결합된 클라이언트-서버 패러다임에서는 서버 프로세스가 Running 상태가 아니면 클라이언트가 서버로 메시지를 보낼 수 없고 서버또한 클라이언트가 동작하기 전까지는 메시지를 받을 수 없다. 많은 발행-구독 시스템은 발행자와 구독자간의 위치뿐만 아니라, 일시적인 것들까지도 모두 디커플링한다.

확장성:연관된 작은환경의 설치에서, 발행-구독은 병렬 수행, 메시지 캐싱, 트리기반 또는 네트워크기반 라우팅 등을 통해 전통적인 클라이언트-서버 구조 보다 더 나은 확장성의 기회를 제공한다. 그러나, 시스템들이 수천개의 데이터 센터급으로 확장되어 발행-구독 기반으로 공유될 때 이러한 장점이 간혹 상실된다. 사실상, 대형배치, 고부하 하에서의 발행-구독 제품에서의 확장성은 연구 도전거리이다.

단점
대부분의 발행-구독 시스템의 심각한 문제는 그들이 갖는 주된 장점에 대한 부작용이다. 구독자로부터 발행자가 디커플링되는 경우 문제는 이것이 애플리케이션에서 엔드투엔드에서 필요로 할 수 있는 강한 속성 명세가 어렵다는 점이다. 브로커를 이용하는 발행-구독 시스템에서 구독자에게 메시지를 보내기 위해 브로커의 동의는 in-band이고 보안 문제가 야기될 수 있다. 브로커는 잘못된 클라이언트에 알림을 보낼 수 있고, 클라이언트에 대해 서비스 거부에 대해 과장할 수 있다. 브로커는 생성된 구독에 대해 추적하기 위해 리소스를 할당하여 과부하 될 수 있다. 시스템이 브로커에 의존하지 않더라도 구독자는 받기 허락되지 않은 데이터를 받을 수 있다. 허락되지 않은 발행자가 잘못되거나 손상된 메시지를 발행/구독 시스템 내에서 발표할 수 있다. 특히 이러한 문제는 브로드캐스트나 멀티캐스트에서의 메시지에서 발생한다. 암호화(예: SSL/TLS) 가 미인증 접근으로부터 강한 보호를 할 수 있다.

발행/구독 모델을 구현한 미들웨어
 턱시도 : 확장성과 트랜잭션의 발행/구독 가용성을 제공하는 트랜잭션 처리 시스템

 같이 보기 
 데이터 분산 서비스
 푸시 풀 전략

분류:아키텍처 패턴
분류:메시지 지향 미들웨어