![[z/OS]](../images/ngzos.gif)
z/OS에서 메시지 구동 Bean의 MDB 감속기 설정
"MDB 감속기"의 다양한 설정을 조정하여 지정된 시간에 서버가 처리하는 MDB 작업량을 제어할 수 있습니다.
MDB 감속기 - 상위 및 하위 임계값
MDB 감속기 지원은 리스너 포트마다 현재 in-flight 메시지 수를 유지보수합니다.
- in-flight 계수가 상위 임계값 이하이면 작업 레코드는 WLM 큐에 넣어집니다.
- 인플라이트 계수가 상위 임계값을 초과하면, MRH를 실행 중인 큐 에이전트 스레드가 블로킹되어 대기 상태에 들어갑니다. 즉, 감속기가 "블로킹" 상태입니다.
인플라이트 계수는 해당 리스너 포트의 작업 레코드가 완료되었음을 제어기에 알릴 때마다 1씩 감소합니다(애플리케이션 트랜잭션이 커미트되었는지 여부에 관계없이). 감소된 후, in-flight 계수는 해당 리스너 포트의 하위 임계값과 비교합니다. in-flight 계수가 하위 임계값으로 떨어지면 이전에 블록킹된 큐 에이전트 스레드가 인식합니다(알림). 이 시점에서 새 작업 레코드를 WLM 큐에 넣을 수 있습니다. 즉, 감속기가 "해제"되었습니다.
하위 임계값 및 상위 임계값은 하나의 설정인 리스너 포트 최대 세션 수 매개변수로 외부에서 설정됩니다. 상위 임계값은 외부에서 정의된 최대 세션 수 값과 동일하게 내부에서 설정됩니다. 하위 임계값은 하위 임계값 = (상위 임계값 / 2) 공식으로 계산되어 내부에서 설정됩니다. 이 때 값은 가장 가까운 정수로 반내림됩니다.
- 제어기가 다른 메시지의 처리를 시작하고 인플라이트 개수가 3으로 설정됩니다. 이는 높은 임계값을 초과하여 낮은 임계값에 도달할 때까지 제어기의 스레드를 일시정지시킵니다.
- 첫 번째 메시지에 대한 하위(servant)의 MDB가 리턴되고 인플라이트 개수가 3에서 2로 감소하므로 낮은 임계값에 도달하지 않았습니다.
- 두 번째 메시지에 대한 하위(servant)의 MDB가 리턴되고 인플라이트 개수가 2에서 1로 감소합니다. 낮은 임계값에 도달하고 메시지 처리 및 SR에 대한 메시지 디스패치가 계속됩니다.
하지만 사용자 정의 특성 MDB.THROTTLE.THRESHOLD.LOW.EQUALS.HIGH가 정의되고 값이 "true"로 설정된 상태로 메시지 리스너 서비스가 구성된 경우 낮은 임계값은 외부에서 설정된 리스너 포트의 최대 세션 수 특성인 높은 임계값으로 내부적으로 설정됩니다.
MDB 감속기 - 성능 조정
일부 하위에 사용 가능한 작업자 스레드가 있는 경우, 블로킹된 MDB 감속기 때문에 대기 상태로 두지 않도록 리스너 포트 "최대 세션 수" 값을 확장 가능한 서버의 모든 하위(servant)에서 사용 가능한 작업자 스레드 수의 두 배(2*WT)로 설정해야 합니다. 즉, 빈 WLM 큐, 사용 가능한 하위 작업자 스레드 및 블록킹된 감속기를 갖는 것을 원하지 않습니다.
- 하나의 사용 가능한 하위 작업자 스레드가 있습니다.
- WLM 큐에 전혀 없습니다.
- 하나의 메시지 참조를 찾았지만 작업 요청이 WLM 큐에 추가되지 않았습니다.(대신 블로킹된 감속기에 추가됨)
게다가, 상위 임계값을 2*(WT+N)로 설정하여 하위 작업자 스레드가 감속기를 해제할 때 N개의 메시지가 사전 처리된 백로그가 있고 WLM 큐가 디스패치 준비 상태에 있는지 확인할 수 있습니다. 그러나 값을 너무 높게 설정하면, 방지하기 위해 감속기가 도입된 WLM 큐 과부하 문제점이 발생합니다. 이 시나리오에서는 큐(또는 토픽)가 처리할 메시지로 완전히 부하되었다고 가정함을 주의하십시오.
따라서 상위 임계값을 높이면, 서버가 사전 처리된 메시지의 작은 백로그를 작성하여 워크로드 급상승이 발생하는 경우 WLM 큐에 놓을 수 있습니다. 그러나 상위 임계값이 증가하면, 지정된 메시지의 작업 레코드가 지정된 메시지에 대해 애플리케이션을 디스패치하기 전에 제한시간을 초과하는 경우가 증가할 수 있습니다. 즉, 서버가 MDB 제한시간 한계에 도달할 수 있습니다. 지정된 메시지는 결국 서버로 다시 전달되지만 해당 시간이 소비되고 나서야 나중에 처리가 완료됩니다. 또한 상위 임계값이 너무 높으면 WLM 큐가 과부하될 수 있는 경우에 MDB 감속기 기능이 사실상 생략됩니다. 이로서 서버가 실패합니다.
MDB 감속기 - 대체 성능 조정
처리량 최대화 목적을 위해 확장 가능 서버가 디자인되었지만, 다른 워크플로우 관리 목적을 위해 리스너 포트 설정을 사용할 수 있습니다.
예를 들어, 상위 임계값 설정을 ‘1'로 설정하면 대상에 수신되는 순서대로 메시지가 처리되도록 보장됩니다.
서버가 달리 지원하는 것보다 훨씬 낮은 동시성으로 특정 리스너 포트를 제한하기 위해, 용량 또는 기타 요인에 따라 다른 비즈니스 이유도 있을 수 있습니다. 확실히 지원되는 구성이기는 하지만 사용 가능한 대기 상태의 작업자 스레드가 있으면 감속기가 블로킹될 수 있습니다.
MDB 감속기 예
최대 서버 인스턴스 수 값을 3으로 설정하고 워크로드 프로파일이 IOBOUND인 서버를 구성한다고 합시다. 두 개의 CPU가 있으므로, WebSphere® Application Server는 각각의 하위(servant)에서 6개의 작업자 스레드를 작성합니다. 애플리케이션(큐에 맵핑된 단일 MDB)은 상대적으로 빠르게 각 메시지를 처리하며(따라서 제한시간을 초과할 위험이 적음) 사용자는 이 메시지의 MDB 디스패치가 종료될 때까지 MDB 큐에서 지정된 메시지가 도착한 이후의 총 시간이 가능한 한 적게 되기를 원합니다.
작업이 급증하는 경우에 빠른 응답 시간을 제공하기 위해 더 큰 백로그를 선택합니다. 리스너 포트 최대 세션 수 값을 100 = 2 * (3 * 6 + 32)로 설정합니다.