2010. 6. 4. 01:13

Service Broker::아키텍처

Service Broker 응용 프로그램은 Service Broker 데이터베이스 개체와 이 개체를 사용하는 하나 이상의 응용 프로그램으로 이루어집니다

대화 구성 요소 - 대화의 런타임 구조입니다. 응용 프로그램은 메시지를 대화의 일부로 교환합니다.

서비스 정의 개체 - 응용 프로그램의 기본 디자인을 지정하는 디자인 타임 구성 요소입니다. 이 구성 요소는 응용 프로그램의 메시지 유형, 응응 프로그램의 대화 흐름 및 응용 프로그램의 데이터베이스 저장소를 정의합니다.

라우팅 및 보안 구성 요소 - 이 구성 요소는 SQL Server 인스턴스 외부의 메시지를 교환하기 위한 인프라를 정의합니다.

대화(conversaction) 아키텍처#

 

개체 정의

메시지

메시지는 서비스 간에 교환되는 데이터입니다. 각 메시지는 하나의 대화에 속하며 각각 특정한 메시지 유형을 갖고 있습니다.

대화 기능

대화(Dialog)는 두 Service Broker 서비스 간의 양방향 대화(Conversation)입니다. Service Broker는 대화(Dialog)를 통해 EOIO(Exactly-Once-In-Order) 방식으로 메시지를 배달합니다. 각 대화(Dialog)는 하나의 대화(Conversation) 그룹에 속하며 특정 계약을 따릅니다.

대화 그룹

대화 그룹은 서로 연동하여 같은 작업을 완료하는 대화를 식별합니다. Service Broker는 대화 그룹을 사용하여 메시지 잠금을 관리하므로 소프트웨어 개발자가 동시성을 관리하는 데 도움이 됩니다. 응용 프로그램 개발자는 상태 관리에 대한 도움을 얻을 때도 대화 그룹을 사용합니다.

 메세지#

 메시지에는 메시지를 보내는 응용 프로그램에 따라 결정되는 특정 유형이 있습니다. 각 메시지에는 고유한 대화 ID와 함께 대화 내의 시퀀스 번호가 있습니다. 메시지를 받을 때 Service Broker는 메시지의 대화 ID와 시퀀스 번호를 사용하여 메시지를 순서대로 정렬합니다.

대화#

Service Broker가 보낸 모든 메시지는 대화의 일부입니다. 대화는 두 서비스 간의 통신입니다. 대화는 두 서비스 간의 안정적이고 지속적인 양방향 메시지 스트림입니다.

대화는 EOIO(Exactly-Once-In-Order) 방식으로 메시지 배달을 제공합니다. 대화는 각 메시지에 포함된 대화 식별자와 시퀀스 번호를 사용하여 관련된 메시지를 식별하고 올바른 순서로 메시지를 배달합니다. 대화는 두 서비스 간의 안정적이고 지속적인 메시지 스트림입니다.

대화에는 두 참가자가 있습니다. 시작자는 대화를 시작하고 대상은 시작자가 시작한 대화를 수락합니다. 대화에 대한 계약에 지정된 바와 같이 참가자가 대화를 시작하는지 여부에 따라 참가자가 보낼 수 있는 메시지가 결정됩니다.

 

 

 응용 프로그램은 메시지를 대화의 일부로 주고받습니다. SQL Server가 대화에 대한 메시지를 받으면 SQL Server는 대화에 대한 큐에 메시지를 넣습니다. 응용 프로그램은 큐에서 메시지를 받고 필요에 따라 메시지를 처리합니다. 처리 과정 중에 응용 프로그램이 메시지를 대화의 다른 참가자에게 보낼 수도 있습니다.

  • 대화수명
  • 대화 타이머

대화그룹#

대화 그룹이란 관련 대화의 그룹을 나타냅니다. 대화 그룹을 사용하면 응용 프로그램에서 특정 비즈니스 작업에 관련된 대화를 쉽게 조정할 수 있습니다.

모든 대화는 하나의 대화 그룹에 속합니다. 모든 대화 그룹은 특정 서비스와 관련되어 있으며 그룹의 모든 대화는 해당 서비스 간의 대화입니다. 대화 그룹에 포함할 수 있는 대화 수에는 제한이 없습니다.

 SQL Server에서는 대화 그룹을 사용하여 특정 비즈니스 작업에 관련된 메시지에 대해 EOIO(Exactly-Once-In-Order) 방식으로 액세스를 제공합니다

 

응용 프로그램이 메시지를 보내거나 받을 때 SQL Server에서 메시지가 속한 대화 그룹을 잠급니다. 그러면 한 번에 한 세션만 대화 그룹의 메시지를 받을 수 있습니다. 대화 그룹을 잠그면 응용 프로그램이 각 대화 그룹의 메시지가 EOIO 방식으로 처리됩니다. 대화 그룹에 둘 이상의 대화를 포함할 수 있으므로 응용 프로그램에서는 대화 그룹을 사용하여 같은 비즈니스 작업에 관련된 메시지를 식별하고 해당 메시지를 함께 처리할 수 있습니다.

응용프로그램 상태구성#

 대화 그룹의 한 가지 이점은 대화 그룹 식별자가 응용 프로그램 상태를 식별하고 검색할 수 있는 편리한 키라는 사실입니다.

 대화 그룹 식별자를 사용하면 데이터베이스에서 응용 프로그램 상태를 쉽게 유지 관리할 수 있습니다. 계속해서 메시지 교환과 관련된 작업 수행이 증가할 경우 응용 프로그램 상태를 유지 관리하기 위해 응용 프로그램을 계속 실행하는 것은 비효율적입니다.

 

SQL Server에서 응용 프로그램이 메시지를 보내거나 받을 때마다 대화 그룹을 잠그므로 응용 프로그램은 다른 프로그램이 동시에 같은 상태 데이터를 업데이트하지 않도록 명시적으로 방지할 필요가 없습니다. 응용 프로그램은 간단하게 대화 그룹을 잠그고 상태를 복원하고 메시지를 처리하며 상태를 업데이트한 다음 트랜잭션을 커밋합니다.

 대화 그룹 수명#
  • 응용 프로그램이 기존 대화 그룹과 관련되지 않은 새 대화를 시작합니다. Service Broker는 새 대화 그룹을 만들어 대화 그룹에 새로운 식별자를 할당합니다.
  • 응용 프로그램이 현재 존재하지 않는 대화 그룹 식별자와 관련된 대화를 시작합니다. 이 경우 Service Broker는 지정된 식별자를 가진 새 대화 그룹을 만듭니다. 그러면 대화 그룹 식별자에 원하는 값을 직접 할당할 수 있습니다
  • Service Broker가 다른 서비스에서 시작한 새 대화의 첫 번째 메시지를 받습니다. 이 경우 Service Broker는 서비스 이름과 Broker 인스턴스 식별자(있을 경우)를 사용하여 다음을 수행합니다.

    1. 알맞은 큐를 찾습니다.
    2. 새 대화 그룹을 만들고 대화 그룹을 큐에 연결합니다.
    3. 새 대화 핸들을 만들어 새 대화 그룹에 추가합니다.
    4. 들어오는 메시지를 큐에 넣습니다

서비스 아키텍처#

 메시지 유형 - 응용 프로그램 간에 교환된 메시지의 이름을 정의합니다. 필요에 따라 메시지에 대한 유효성 검사를 제공합니다.

  • 계약 - 특정 대화의 메시지 방향 및 유형을 지정합니다.
  • 큐 - 메시지를 저장합니다. 이 저장 메커니즘은 서비스 간 비동기 통신을 허용합니다. Service Broker 큐는 같은 대화 그룹에 있는 메시지의 자동 잠금과 같은 추가 이점을 제공합니다.
  • 서비스 - 대화에 대해 주소를 지정할 수 있는 끝점입니다. Service Broker 메시지는 한 서비스에서 다른 서비스로 전송됩니다. 서비스는 메시지를 보관할 큐를 지정하고 대상이 될 수 있는 서비스에 계약을 지정합니다. 계약은 서비스에 잘 정의된 메시지 유형 집합을 제공합니다.

 

 

그림에서와 같이 ProcessExpenses 계약은 세 가지 메시지 유형 SubmitExpense, AcceptDenyExpense 및 ReimbursementIssued를 지정합니다. 계약은 비용 보상 작업을 수행하는 대화에 필요한 메시지 유형을 나열합니다. ProcessExpenses 계약은 ProcessExpense 서비스 간의 대화와 ProcessExpense 서비스로 대화를 시작하는 모든 대화를 제어합니다. ProcessExpense 서비스는 들어오는 메시지와 나가는 메시지를 ExpenseQueue 큐에 저장합니다. ExpenseProcessing 저장 프로시저는 이 큐에서 메시지를 받아서 처리한 다음 회신이 필요한 경우 해당 Broker로 라우팅하는 데 사용하는 큐로 메시지를 다시 보냅니다.

 메세지 유형
  • Servive Broker를 사용하는 응용프로그램은 서로 메세지를 대화의 일부로 보내 통신한다.
  • 대화 참가자는 각 메시지의 이름과 내용에 동의해야한다. 메세지 유형개체 는 메세지의 유형의 이름을 정의하고 메세지의 포함된 데이터 유형을 정의한다.
  • 메세지 유형은 생성된 데이터 베이스에서 유지되며, 대화에 참가한 각 데이터 베이스의 동일한 메세지 유형을 만든다.
  • 빈 메세지의 경우 메세지 본문에 데이터가 없어야 한다.
  • DEFAULT 라는 기본 제공 메세지 유형을 제공하고 Service Broker SEND 명령에 메세지 유형을 지정하지 않으면 DEFAULT메세지 유형을 사용한다.
계약
  • 응용프로그램에서 특정 작업을 수행하는데 사용하는 메세지 유형을 정의한다.
  • 각 서비스가 특정 작업을 수행하기 위해 보내는 메세지의 대한 두 서비스 간의 게약이다., 생성된 데이터베이스에서 유지된다.
  • 대화에 참여한 각 데이터베이스는 동일한 게약을 만든다.
  •  DEFAULT 라는 기본 계약도 포함되어 있다. DEFALT 계약에는 SENT BY ANY 메세지 유형만 포함된다.
  • 메세지를 저장한다. 메세지를 받으면 서비스는 큐에 메세지가 삽임된다. 서비스에 메세지를 가져오기 위해 응용 프로그램은 쿠에서 메세지를 받는다.
  • 각 서비스는 하나의 큐에 연결된다.  큐에서 메세지는 하나의 행이 된다.
서비스
  • 서비스는 특정 비즈니스 작업 또는 비즈니스 작업 집하의 이름입니다
  • 서비스 간에 대화가 발생합니다. 
  • 서비스 브로거는 서비스 이름을 사용하여 데이터베이스 내의 올바른 큐로 메세지를 배달하고 베세지를 라우팅하고 대화를 위한 계약을 강제 적용하고 새 대화를 위한 원격 보안을 결정합니다.

 네트워킹 및 원격 보안

 

  설명

원격 서비스 바인딩

Broker가 대화 보안에 사용하는 인증서를 설정하는 방법에 대해 설명합니다. 대화 보안은 특정 서비스에 대한 대화에 종단 간 암호화와 원격 권한 부여를 제공합니다.

경로

서비스 위치와 서비스가 포함된 데이터베이스를 지정하는 방법에 대해 설명합니다. Service Broker가 메시지를 배달하려면 경로가 필요합니다. 기본적으로 각 데이터베이스에는 다른 어떤 경로도 정의되지 않은 서비스가 현재 인스턴스 내에서 배달되도록 지정하는 경로가 포함됩니다.

Service Broker 끝점

TCP/IP 연결을 통해 메시지를 보내고 받을 수 있도록 SQL Server를 구성하는 방법에 대해 설명합니다. 끝점은 끝점에 대한 무단 연결을 방지하는 전송 보안을 제공할 수 있습니다.

 

 

이 글은 스프링노트에서 작성되었습니다.

'Service Broker' 카테고리의 다른 글

Sesrvice Broker::보안  (0) 2010.06.04
Service Broker::장점  (1) 2010.06.04
Service Broker::소개  (0) 2010.06.04