비동기 호출 API
비동기 호출 API를 사용하여 SIP(Session Initiation Protocol) 애플리케이션 세션에서 처리해야 하는 이벤트를 애플리케이션 세션 ID를 기반으로 클러스터의 임의 서버로 전송합니다.
비동기 작업 디스패처라고도 하는 비동기 호출 API는 SIP 애플리케이션 세션의 컨텍스트에서 처리해야 하는 이벤트를 관련 애플리케이션 세션 ID를 사용하여 클러스터의 임의 서버로 전송할 수 있습니다. 이런 전송은 일반적으로 다른 서버에 있는 SIP 세션으로 상태 변경되는 이벤트로 트리거됩니다. 비동기 작업 디스패처는 이벤트 태스크를 실행하려는 올바른 서버로 전송합니다.
Websphere Application Server에서 관련된 모든 SIP 메시지는 클러스터에서 동일한 서버로 전달되고 세션은 항상 동일한 SIP 컨테이너에 상주합니다. 동기화 및 잠금 문제를 방지하기 위해 동일한 애플리케이션 세션의 태스크는 동시에 처리될 수 없으며(즉, 다른 스레드 또는 프로세스에서) 이로 인해 특정 유형의 이벤트 처리가 제한됩니다.
SIP 세션 및 SIP 애플리케이션 세션과 해당 관계에 대한 자세한 정보는 JSR(Java™ Specification Request) 289의 6절을 참조하십시오.
다음 두 시나리오는 비동기 호출 API를 구현하여 해결됩니다.
- 동일한 SIP 애플리케이션 세션에 관련된 두 요청은 다른 두 스레드에서 동시에 실행됩니다. 예를 들어, 메시지 구동 Bean(MDB)으로 작업 중인 Java EE(J2EE) 애플리케이션은 특정 SIP 애플리케이션 세션의 SIP 메시지를 전송하기 위해 이벤트를 검색할 수 있습니다. 동시에, SIP 컨테이너는 동일한 애플리케이션 세션에 연결된 다른 세션의 수신 SIP 메시지를 수신하고 이를 다른 스레드에서 처리합니다. 경쟁 조건을 방지하고 모든 세션 속성이 동기화되도록 하기 위해 세션 액세스를 동기화할 필요는 있습니다. SIP 애플리케이션 세션이 여러 개의 SIP 세션을 포함할 수도 있기 때문에 이런 경우에는 잠금 메커니즘을 사용하는 것은 적절하지 않습니다.
- 특정 SIP 애플리케이션 세션을 소유하지 않는 서버는 해당 세션의 컨텍스트에서 메시지를 전송하기 위해 비SIP 프로토콜을 통해 요청을 수신합니다. 예를 들어, SIP 대화 상자를 시작하는 웹 서비스는 반드시 사용해야 하는 SIP 애플리케이션 세션을 소유하는 서버와는 다른 서버에 상주할 수 있습니다.
비동기 호출 API를 통해 SIP 애플리케이션 세션 ID에 따라 특정 애플리케이션 코드가 올바른 서버 및 올바른 스레드에서 실행됩니다.
비동기 호출 API는 다음과 같은 장점이 있습니다.
- 셋 이상의 서버가 비동기 호출 프로세스에 관련되지 않습니다. 한 서버는 작업 태스크를 검색하는 서버이고 다른 서버는 해당 태스크에 대한 SIP 애플리케이션 세션을 처리하고 태스크가 전송되는 대상 서버입니다.
- 비동기 호출을 사용하면 스레드 안전 방식으로 작업할 수 있습니다. 이런 접근방식으로 한 개의 스레드만 SIP 애플리케이션 세션에 연관된 메시지를 처리합니다. 따라서, 세션에 대한 액세스를 동기화할 필요가 없습니다.
- 비동기 호출은 조정 가능한 솔루션을 제공합니다. 클러스터에 서버가 더 많이 추가되어도 성능에는 영향을 주지 않습니다.
- 교차 서버 호출은 필요한 경우에만 사용되어 성능을 향상시킵니다.