본문으로 바로가기

[자바]17. Message Queue의 구조

category Language/자바 2021. 12. 1. 17:23
728x90
반응형
SMALL

Message Queue

JMS 1.1 사양을 준수하는 안정적인 비동기 메시징 서비스이다.

 

메시지 서비스 구조

  • 메시지 서버
  • 클라이언트 런타임
  • 관리 대상 객체
  • 관리 도구
Message Queue 메시징의 기능 부분을 보여주는 다이어그램. 그림은 텍스트에 설명되어 있습니다.
  • 자바 또는 C API를 통해 메시지를 주고 받는다.
  • API는 브로커와의 연결을 생성하고 요청된 연결 서비스에 적적하게 비트를 패키지 화 하는 실제 작업을 런타임 라이브러리에 구현한다.
  • 브로커는 메시지 경로를 지정/전달 한다.

 

메시지 서버

하나 이상의 브로커로 구성되어 메시지 경로 및 전달을 수행하는 메시지 큐 서비스 의 핵심이다.

* 브로커가 작업을 수행하는 과정

  • 사용자의 인증 및 수행할 작업의 권한 부여

ㄴ사용자? : 메시지 수신에 사용되는 세션에서 작성한 객체(MessageConsumer)

  • 클라이언트와의 통신 채널 설정
  • 생성자 클라이언트로부터 메시지를 수신하여 각 물리적 대상에 저장
  • 하나 이상의 사용자 클라이언트로 메시지 경로 지정 및 전달
  • 안정적인 전달 보장
  • 시스템 성능을 모니터하기 위한 데이터 제공

브로커구조

브로커의 기능 구성 요소를 보여주는 다이어그램. 구성 요소 및 그 사용에 대해서는 다음 테이블을 참조하십시오.

메시지 전달을 수행하려면 브로커가 클라이언트와의 통신 채널을 설정하고, 인증 및 권한 부여를 수행하며, 메시지 경로를 올바르게 지정하고, 안정적인 전달을 보장하며 시스템 성능을 모니터링할 데이터를 제공해야 한다.

  • 주요 브로커 구성 요소 및 기능
구성 요소 설명/기능
연결 서비스 브로커와 클라이언트 사이의 물리적 연결을 관리하면서 받고 보내는 메시지 전송을 담당합니다.
메시지 라우터 메시지 경로 지정 및 전달을 관리합니다. 여기에는 JMS 메시지를 비롯하여 Message Queue 메시징 시스템이 JMS 메시지 전달을 지원하기 위해 사용하는 제어 메시지도 포함됩니다.
지속성 관리자 영구 저장소에 대한 데이터 쓰기를 관리하여 시스템 오류로 인해 JMS 메시지 전달 오류가 발생하지 않게 합니다.
보안 관리자 브로커와의 연결을 요청하는 사용자에게 인증 서비스를 제공하고 인증된 사용자에게 권한 부여 서비스(액세스 제어)를 제공합니다.
모니터링 서비스 브로커를 모니터링 및 관리할 때 사용할 수 있는 다양한 출력 채널에 기록 가능한 메트릭 및 진단 정보를 생성합니다.

 

브로커가 지원하는 연결 서비스

서비스 이름 서비스 유형 프로토콜 유형
jms NORMAL TCP
ssljms NORMAL TLS(SSL 기반 보안)
httpjms(엔터프라이즈판) NORMAL HTTP
httpsjms(엔터프라이즈판) NORMAL HTTPS(SSL 기반 보안)
admin ADMIN TCP
ssladmin ADMIN TLS(SSL 기반 보안
  • 각 연결 서비스는 특정 인증 및 권한부여 기능을 지원하며, 다중 스레드 방식으로서, 다중 연결을 지원한다.
  • 특정 포트에서 사용가능하며, 브로커의 호스트 이름과 포트 번호로 지정된다.
  • 포트는 동적 할당이 가능하며, 사용자가 연결 서비스에 사용 가능한 포트를 직접 지정이 가능하다.

 

연결 서비스 지원

연결 서비스가 포트 매퍼 및 스레드 풀 관리자와 통신하는 것을 보여주는 다이어그램

포트매퍼

  • 포트 매퍼는 표준 포트번호 7676에 위치한다.
  • MQ클라이언트 런타임이 브로커와 연결을 설정할 때 포트 매퍼에 접속하여 원하는 연결 서비스의 포트 번호를 요청한다.

 

스레드 풀 관리자

  • 다중 스레드 방식으로서 다중 연결을 지원한다.
  • 스레드 풀 관리자를 구성하여 최소/최대 스레드 수를 설정할수 있다

 

HTTP/HTTPS 지원

  • MQ 클라이언트는 직접 TCP 연결이 아닌 HTTP 프로토콜을 사용하여 브로커와 상호 작용할 수 있다.
  • 클라이언트가 방화벽으로 브로커와 분리되어야 할 경우 방화벽을 통해 통신을 허용하므로 HTTP/HTTPS 서비스를 사용할 수 있다.

 

HTTP/HTTPS 지원구조


HTTP 프록시와 HTTP 터널 서블릿이 방화벽을 통해 메시지를 전달하는 방법을 보여주는 다이어그램. 그림은 텍스트에 설명되어 있습니다.
  1. MQ 클라이언트 쪽에서는 HTTP 또는 HTTPS 전송 드라이버가 JMS 메시지를 HTTP 요청으로 캡슐화하고 요청이 정확한 순서로 웹 서버에 전송되는지 확인한다
  2. 클라이언트는 HTTP 프록시 서버를 사용하여 웹 서버와 통신할 수 있다.
  3. MQ와 함께 제공되는 HTTPS 터널 서블릿이 웹 서버에 로드되고 JMS 메시지를 브로커로 전달하기 전에 클라이언트 HTTP 요청으로 부터 추출하는데 사용된다.
  4. 그리고 다시 터널 서블릿은 브로커 응답을 클라이언트로 보낸다.(보낸 요청을 상대방이 받았다 라고 확인할수 있는 ACK 신호를 다시 보내는??)
  5. 한 HTTP/HTTPS 터널 서블릿은 여러 브로커에 엑세스 할 수 있다.
  6. 브로커쪽은 터널 서블릿으로의 브로커 연결은 브로커 시작 시 설정된다. 메시지가 HTTP 또는 HTTPS 터널 서블릿에서 전송될 때 httpjms 또는 httpjms 연결 서비스는 각각 메시지를 분해하여 브로커의 메시지 라우터 구성 요소로 제출한다.메시지 라우터

 

 

메시지 라우터


 지원되는 연결 서비스를 사용하여 클라이언트와 브로커 사이에 연결이 설정되면 경로 지정 및 메시지 전달을 할 수 있다.

1.먼저 생성자 클라이언트에서 브로커의 물리적 대상으로 전달된다.메시지 라우터는 도착하는 메시지를 적절한 대상에 넣은 다음 메시지를 적절한 사용자에게로 경로 지정하고 전달하는 프로세스를 관리한다

.2.브로커의 대상에서 하나 이상의 사용자 클라이언트로 메시지가 전달된다.MQ 메시징은 2단계 메시지 전달을 기반으로 한다. 

 

메모리 자원관리

메시지 서버는 메모리, CPU 사이클 등 자원이 제한되 있다.

브로커가 지원하는 응용 프로그램에 의해 메시지 서버가 넘쳐 응답하지 않거나 불안정하게 될 수 있다.

메시지 라우터에는 메모리 자원을 관리하고 브로커의 메모리 부족을 방지하기 위한 매커니즘이 존재한다.

  1. 대상 메시지 제한

단일 메시지의 크기 제한 또는 최대 메시지 수 조절

메시지 라우터에서는 네 가지의 응답을 지정할 수 있다.

* 메시지 생성자의 속도 줄이기
* 가장 오래된 메시지 삭제
* 보존 기간을 기준으로 우선순위가 가장 낮은 메시지 삭제
* 최신 메시지 거부
  1. 시스템 전체 메시지 제한

브로커의 모든 대상에 한꺼번에 적용되는 시스템 전체 제한을 지정할 수 있다,

이리 되면 메시지 라우터는 새 메시지를 거부한다.

 

  1. 시스템 메모리 임계값비지속성 메시지의 생성자 억제한 뒤 결국 브로커로 향하는 메시지 흐름을 중지시킴. 지속성 메시지 흐름은 브로커가 각 메시지가 확인해야 하기 때문에 자동으로 제한됨.가이드에서는 메모리 자원을 최적화 하라는데...주니어인 나는 이것도 이해하기 버겁......
  2. 조치는 성능을 떨어트린다.
  3. 데이터 저장소에서 지속성 메시지의 메모리 내 사본 삭제

 

지속성 관리자

오류 발생시 브로커를 복구하려면 메시지 전달 작업 상태를 다시 작성해야 한다.

모든 지속성 메시지와 기본적은 경로 지정 및 전달 정보를 데이터저장소에 저장해야 한다.

지속성 관리자는 이 모든 상태의 정보 저장 및 복원을 관리한다.

 

지속성 관리자가 플랫 파일 저장소나 JDBC호환 데이터 저장소를 사용함을 보여주는 다이어그램

 

 

모니터링 서비스

로거 입력, 오류 수준 및 출력 채널을 보여주는 다이어그램. 그림은 텍스트에 설명되어 있습니다.

메트릭 생성자?

브로커 내부 및 외부로의 메시지 흐름, 브로커 메모리의 메시지 수 및 해당 메시지가 사용하는 메모리, 열려있는 Connection 개수, 사용중인 스레드 수 같은 정보를 제공해준다.

 

 

클라이언트 런타임

클라이언트 런타임과 메시지 서버 사이의 상호 작용을 보여주는 다이어그램. 그림은 텍스트에 설명되어 있습니다.
    • Java 클라이언트 런타임. JMS API를 구현하고 Message Queue 메시지 서버와 상호 작용하는 데 필요한 모든 객체와 함께 Java 클라이언트 응용 프로그램 및 구성 요소를 제공합니다. 이러한 인터페이스 객체에는 연결, 세션, 메시지, 메시지 생성자 및 메시지 사용자가 포함됩니다.

 

  • C 클라이언트 런타임. Message Queue 서버와 상호 작용하는 데 필요한 C 프로그래밍 인터페이스와 함께 C 클라이언트 응용 프로그램 및 구성 요소를 제공합니다. C 클라이언트 런타임은 JMS API 메시징 모델의 절차상 버전을 지원합니다.

 

연결처리

클라이언트가 연결하려는 브로커의 호스트이름, 포트 및 원하는 연결 서비스 유형을 지정해야 한다.

클라이언트 아이디

클라이언트 아이디는 메시지가 주제 대상으로 전달될 시점에 비활성인 영구 가입자를 식별하는 데 사용됩니다.

사용자에게 메시지 배포

클라이언트 사용 시 클라이언트 런타임이 세션 대기열을 지원하는 것을 보여주는 다이어그램. 그림은 텍스트에 설명되어 있습니다.

메시지는 각 세션 대기열에서 한번에 하나씩 동기식 메소드(receive() 메소드를 호출하는 클라이언트 스레드 를 통해) 또는 비동기식(메시지 수신기 객체의 onMessage() 메소드 호출하는 세션 스레드)를 통해 사용됩니다.(세션은 단일 스레드로 구성)

 

안정적인 메시지 전달

브로커는 일반적으로 단 한 번의 메시지 사용을 보장하기 위해 사용된 작업을 완료했을 때 클라이언트 런타임으로 확인을 보낸다.

 

메시지 흐름제어

연결에서 흐르는 일반적인 JMS 페이로드 메시지를 비롯하여 안정적인 전달을 보장하고 연결에서의 메시지 흐름관리 및 제어 기능에 사용되는 제어 메시지를 보낸다.

 

 

통합 지원 기능

  • 다중 전송 지원

Message Queue는 TCP와 HTTP 등 다양한 전송방식, 보안 연결을 사용하여 클라이언트가 MQ 메시지 서버와 상호 작용하는 기능을 지원한다.

  • HTTP 연결
  • 웹 서버 환경에서 실행되는 HTTP 터널 서블릿을 이용하여 연결이 가능하다.
  • 보안 연결

TCP/IP 및 HTTP 전송을 통해 SSL(Secure Socket Layer)표준에 기반한 메시지를 안전하게 전송한다.

SSL 기반 연결 서비스를 사용하면 클라이언트와 브로커 사이에서 보내는 메시지를 암호화 할 수 있다

  • C 클라이언트 인터페이스
  • 자바 뿐만 아니라 C언어 인터페이스 또한 제공한다.
  • SOAP(XML) 메시징 지원

SOAP(Simple Object Access Protocol) 사양을 준수하는 메시지 생성 및 전달을 지원한다.

ㄴSOAP: XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜

MQ는 SOAP 메시지를 JMS 메시지로 변환 그리고 역으로도 변환하는 유틸리티를 제공한다.

SOAP 종점 간에 안정적으로, 비동기식으로 SOAP 메시지를 교환하는 기능을 지원

  • J2EE 자원 어댑터

 

확장성 기능

  • 확장 가능한 연결 용량

MQ 브로커는 수 천 개의 연결을 동시에 처리할 수 있다. 각 연결은 전용 브로커 스레드에 의해 처리된다.

  • 브로커 클러스터

브로커를 통해 전달되는 연결 수와 메시지 수가 증가함에 따라 MQ 서버에 추가 브로커 인스턴스를 추가하여 추가 로드를 관리할 수 있다.

브로커 클러스터는 많은 브로커 인스턴스 간의 클라이언트 연결 및 메시지 전달의 균형을 조정하여 메시지 서버를 크게 확장할 수 있다.

  • 다중 사용자로의 대기열 전달

로드 균형 조정 방식을 사용하여 다중 사용자에게 대기열을 전달하여 시스템적인 부담을 나눈다.

 

가용성 기능

서비스 중단 시간을 최소화 하는 많은 기능을 제공한다.

  • 메시지 서비스 안정성
  • MQ는 메모리 과부하 또는 성능 정체를 피하는 메커니즘을 제공한다.(메시지 서버, 클라이언트 런타임에서 모두 작동한다.)
  • 메시지 서버 자원 관리

대게 메시지 생성 속도가 사용 속도를 훨씬 능가할 때 발생한다고 한다. 앞선 대상 메시지 제한 이라는 키워드의 방법으로 이를 해결한다.

  • 클라이언트 런타임 메시지 흐름제어

클라이언트가 메모리를 고갈시키지 않도록 하면서 클라이언트 런타임으로 메시지 전달을 최적화 하는 매커니즘을 제공한다.

  • 메시지 서버에 자동 재연결
  • Sun Cluster를 통한 고 가용성

MQ는 브로커 클러스터링을 통한 확장성이 뛰어난 메시지 서버를 제공하지만 클러스터의 한 브로커 인스턴에서 다른 인스턴스로의 페일오버를 지원하지 않는 다.

허나 Sun Cluster 소프트웨어와 통합하여 사용하면 브로커가 실패해도 메시지 서버를 사실상 중단 없이 바로 투명하게 복원하여 상태 데이터가 전혀 손실되지

않게 한다.

 

관리성 기능

  • 강력한 관리 도구

MQ 메시지 서버 관리, 트랜잭션, 영구가입, 보안관리 등 을 위한 GUI 도구 제공

  • 메시지 기반 모니터링 API

JMS 기반 모니터링 API를 제공한다.(메트릭 메시지 키워드를 참고하자!)

  • 조정 가능한 성능

메시지 서버와 클라이언트 런타임을 모두 조정하여 최적의 성능을 얻는 방법을 제공한다.

 

유연한 서버 구성 가능

  • 구성 가능한 지속성
  • LDAP 서버 지원

 

 

 

출처

https://docs.oracle.com/cd/E19435-01/819-2222/intro.html#wp966542

728x90
반응형
LIST