발행-구독 모델

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

발행/구독 모델은 비동기 메시지 패러다임이다. 보내는이의 메시지가 자신의 메시지를 특정한 수신자들에게 보내도록 프로그램되어 있지 않다. 그 대신에 발행된 메시지는 분류로 특징화된다. 구독자에 대한 어떠한 지식 없이도 가능하다. 구독자는 한개 이상의 분류에 대해 관심을 표현한다. 그러면 발행자에 대한 어떠한 지식 없이도 관심을 표현한 메시지만을 수신한다. 이러한 발행자와 구독자의 디커플링은 더 다이나믹한 네트워크 토폴로지와 높은 확장성을 허용한다.

발행/구독은 메시지 큐 패러다임의 형제같은 관계로, 일반적으로 대형 메시지 지향 미들웨어 솔루션의 일부이다. 대부분의 메시징 시스템들은 그들의 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) 가 미인증 접근으로부터 강한 보호를 할 수 있다.

발행/구독 모델을 구현한 미들웨어[편집]

  • 턱시도 : 확장성과 트랜잭션의 발행/구독 가용성을 제공하는 트랜잭션 처리 시스템

같이 보기[편집]