KR101612682B1 - 분산 및 병렬 환경에서 비동기 메시지를 시퀀싱하는 방법, 시스템 및 컴퓨터 프로그램 제품 - Google Patents
분산 및 병렬 환경에서 비동기 메시지를 시퀀싱하는 방법, 시스템 및 컴퓨터 프로그램 제품 Download PDFInfo
- Publication number
- KR101612682B1 KR101612682B1 KR1020157002898A KR20157002898A KR101612682B1 KR 101612682 B1 KR101612682 B1 KR 101612682B1 KR 1020157002898 A KR1020157002898 A KR 1020157002898A KR 20157002898 A KR20157002898 A KR 20157002898A KR 101612682 B1 KR101612682 B1 KR 101612682B1
- Authority
- KR
- South Korea
- Prior art keywords
- message
- sequence
- processor
- messages
- outbound
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
- Multi Processors (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Information Transfer Between Computers (AREA)
Abstract
본 발명은, 인바운드 핸들러 층을 형성하는 복수의 인바운드 핸들러 및 아웃바운드 핸들러 층을 형성하는 복수의 아웃바운드 핸들러를 구비하는 분산 및 병렬 시스템에서 분산비동기 메시지를 시퀀싱하는 시스템 및 컴퓨터로-구현되는 방법을 제공하고, 상기 방법은, 적어도 하나의 데이터 프로세서에서 수행되는 다음 단계, 즉: 입력 메시지는 입력 메시지를 포함하는 시퀀스를 식별하는 시퀀스 상관 값을 포함하고, 복수의 인바운드 핸들러 중에서 임의의 인바운드 핸들러에서 입력 메시지를 수신하는 단계; 공유된 시퀀스 저장소에서 시퀀스의 시퀀스 상태를 체크하는 단계; 입력 메시지가 시퀀스에서 메시지의 순서를 유지하기 위해 처리될 그 다음 메시지인지 여부를 결정하는 단계;를 포함하고, - 시퀀스 상태가 아웃바운드 핸들러 층에 있는 아웃바운드 핸들러 중 그 어느 것도 시퀀스의 메시지를 현재 처리하고 있지 않는 것을 나타내는 경우 및 입력 메시지가 시퀀스에서 처리될 그 다음 메시지인 것으로 결정된 경우, 입력 메시지를 공유된 큐 저장소에 전달하고 나서, 처리를 위해 아웃바운드 핸들러 층에서 이용가능한 아웃바운드 핸들러에 의해 메시지를 검색하고; - 시퀀스 상태가 아웃바운드 핸들러 층에 있는 아웃바운드 핸들러 중 적어도 하나가 시퀀스의 메시지를 현재 처리하고 있는 것을 나타내는 경우; 또는 공유된 큐 저장소가 시퀀스에서 처리될 메시지를 이미 포함하는 경우; 또는 입력 메시지가 시퀀스에서 처리될 그 다음 메시지가 아닌 것으로 결정된 경우, 추가적인 처리를 유지하기 위해 입력 메시지를 공유된 오버플로우 저장소의 메모리에 저장하는 것을 특징으로 한다.
Description
본 발명은 일반적으로 통신 시스템에서 데이터 및 정보 처리에 관한 것으로, 보다 상세하게는 분산 및 병렬 처리 환경에서 시퀀스의 비동기 메시지를 처리하는 방법, 장치 및 시스템에 관한 것이다.
분산 소프트웨어 아키텍처를 사용하여, 서비스 호출 또는 이벤트 처리에서, 메시지의 전송이 동기식이거나 또는 비동기식일 수 있다. 이 메시지는 완전히 수신자를 분리하여 분배되고 멀티캐스팅되는데, 여기서 각 멀티캐스트 메시지는 서로 독립적으로 처리된다.
도 1은 2개의 시스템, 즉 한쪽에 호출 시스템(calling system)(110)과 다른 쪽에 원격 시스템(120) 사이에 메시지 또는 서비스 호출을 동기적으로 전송하는 것을 도시하며, 여기서 호출 시스템(110)은 메시지 처리 순서를 제어한다. 이 경우에, 호출 시스템(110)은 원격 처리 결과를 기다리고, 결국 호출자는 메시지들이 서버 시스템 또는 원격 시스템에서 실제 처리되는 메세지의 순서에 관한 마스터이다.
호출 시스템(110)으로부터 제1 메시지 A를 전송(111)하는 것은 원격 시스템(120)에서 처리되고 이후 처리된 메시지 A(121)는 호출 시스템(110)으로 리턴된다. 처리된 메시지 A가 수신되면, 호출 시스템(110)은 제2 메시지 B를 원격 시스템(120)으로 전송(113)하기 시작할 수 있다. 제2 메시지 B는 원격 시스템(120)에서 처리되고 처리된 메시지 B(123)는 호출 시스템(110)으로 리턴된다.
이 예시적인 흐름도에서, 호출 시스템(110)과 원격 시스템(120) 사이에 동기적인 호출 또는 메시지를 연대순으로 처리(chronological processing)하는 것은 서버 시스템 또는 원격 시스템(120)에 의해 제1 메시지 A를 처리(112)하는 것은 제2 메시지 B를 처리(114)하기 전에 일어나는 것을 도시한다.
도 2는 호출 시스템(210)과 서버 시스템 또는 원격 시스템(220) 사이에 메시지 또는 서비스 호출을 비동기식으로 전송하는 것을 도시하며, 여기서 호출 시스템(210)은 서비스 호출 또는 메시지를 서버 시스템 또는 원격 시스템(220)으로 송신하고, 이 시스템은 그 자체 스케줄링에 기초하여 이 메시지를 처리한다. 클라이언트 시스템 또는 호출 시스템(210)은 메시지 처리 타이밍을 느슨하게 제어한다.
호출 시스템(210)으로부터 제1 메시지 A를 전송(211)하는 것은 원격 시스템(220)에서 처리된다. 그 동안에, 호출 시스템(210)은 제2 메시지 B를 원격 시스템(220)으로 전송(213)을 시작한다. 제2 메시지 B는 이후 원격 시스템(220)에서 처리되고, 메시지 A가 처리되기 전에 처리된 메시지 B는 호출 시스템(210)으로 리턴될지 여부는 결정될 수 없다.
이 예시적인 흐름도에서, 호출 시스템(210)과 원격 시스템(220) 사이에 비동기 호출 또는 메시지를 연대순으로 처리하는 것은 서버 시스템 또는 원격 시스템(220)에 의해 제1 메시지 A를 처리(212)하는 것은 제2 메시지 B를 처리(214)하는 것과 거의 동시에 일어나는 것을 도시한다. 제2 메시지 B는 제1 메시지 A 전에 처리되어 메시지 A 및 B를 포함하는 시퀀스의 관련성에 심각히 영향을 미칠 수 있을 가능성이 있을 수 있다.
도 3은 분산 시스템에서 서비스 호출 또는 메시지를 병렬 처리하는 것을 도시하는 예시적인 흐름도이다. 분산 시스템에서, 탄력성(resilience) 및 스케일가능성(scalability) 요구조건에 순응하기 위하여, 서비스 호출 또는 메시지는 인스턴스화(instantiation) 및/또는 다중 스레드(multithreading)에 의해 병렬로 처리된다. 이 도면에서, 공정 시스템의 인스턴스 1, 2, 3, ... , 및 n (310-1, 310-2, ... 및 310-n)는 인바운드 시퀀스(inbound sequence)로 메시지 큐(queue)(340)에 있는 4개의 메시지 1, 2, 3 및 4를 처리한다.
병렬화된 처리는, 연속 서비스 호출 또는 메시지가 처리되고 완성되는 순서를 보장하지 않는다. 그러나, 서비스 호출 또는 메시지 공정은 종종 상관된 이벤트 또는 메시지 간을 시퀀스로 수행할 것을 강하게 요구한다.
도 3에 도시된 예에서, 메시지 1은 인스턴스 2에서 처리되고 메시지 2는 인스턴스 3에서 처리되고, 메시지 3은 인스턴스 1에서 처리되고 메시지 4는 메시지 2와 같이 인스턴스 3에서 처리된다. 메시지 처리 순서는 조정되지 않기 때문에, 메시지 2가 제일 먼저 처리되고 나서, 메시지 1이 처리되고 이후, 메시지 4가 처리되고 마지막으로 메시지 3이 처리된다. 이것은 거래 처리 순서와 일치하지 않는다.
이 도면에서, 시퀀스는 서비스 호출 또는 메시지가 분산 시스템에 의해 운반되거나 및/또는 처리되는 순서를 말한다. 이 순서는 일반적으로 비지니스 처리(business process) 또는 산업 표준에 의해 구동된다. 이 순서를 고려하지 않으면, 부적절한 처리 결과를 초래하거나 최악의 경우에는 저장된 기능 데이터가 회복 불가능하게 손상될 수 있는데, 이는 데이터베이스 손상이라고도 불리운다.
도 4는 메시지 및 손상된 데이터 처리 순서를 벗어날(de-ordering) 위험을 초래하는 분산 공정 시스템에서 비동기 호출 또는 메시지를 병렬로 처리하는 것을 도시하는 예시적인 흐름도이다.
동기적인 환경에서, 시퀀싱은 발송자(emitter) 시스템 또는 호출 시스템에 의해 보장되는데, 이 시스템은 메시지를 원격 시스템으로 하나씩 개시하여, 상관된 메시지들 사이에 시퀀스 흐름을 사실상 제어한다.
발송자 시스템 또는 호출 시스템(410)이 비동기적인 및 분산공정을 처리해야 할 때, 원격 시스템(420)에서는 메시지 처리의 종료를 결정할 수 없어서 이 시퀀싱이 불가능하게 된다. 도 4는 제1 메시지 A를 호출 시스템(410)으로부터 원격 시스템(420)으로 전송(411)한 후 제2 메시지 B를 전송(413)하는 위험을 도시한다. 제2 메시지 B를 처리(414)하는 것은 제1 메시지 A를 처리(414)하는 처리(412) 전에 시작한다. 그리하여, 메시지 처리가 역전될 수 있어서, 부적절한 처리를 초래할 수 있고, 최악의 경우에는 저장된 기능 데이터를 회복 불가능하게 손상시키거나 또는 데이터베이스 손상을 초래할 수 있다.
그리하여, 본 발명은, 전술된 문제를 완화시키고 저장된 기능 데이터를 회복 불가능하게 손상시키거나 또는 임의의 데이터베이스를 손상시키는 것을 회피하는 것을 목적으로 한다.
일 실시예에서, 본 발명은, 인바운드 핸들러 층(inbound handler layer)을 형성하는 복수의 인바운드 핸들러 및 아웃바운드 핸들러 층(outbound handler layer)을 형성하는 복수의 아웃바운드 핸들러를 구비하는 분산 및 병렬 시스템에서 분산비동기 메시지를 시퀀싱(sequencing)하는 컴퓨터로-구현되는 방법으로서, 상기 방법은, 적어도 하나의 데이터 프로세서에서 수행되는 다음 단계, 즉:
복수의 인바운드 핸들러 중에서 임의의 인바운드 핸들러에서 입력 메시지(incoming message)를 수신하는 단계로서, 입력 메시지는 입력 메시지를 포함하는 시퀀스를 식별하는 시퀀스 상관 값(sequence correlation value)을 포함하는, 입력 메시지를 수신하는 단계;
공유된 시퀀스 저장소(shared sequence storage)에서 시퀀스의 시퀀스 상태(sequence state)를 체크하는 단계;
입력 메시지가 시퀀스에서 메시지의 순서를 유지하기 위해 처리될 그 다음 메시지인지 여부를 결정하는 단계;를 포함하고
시퀀스 상태가 아웃바운드 핸들러 층에 있는 아웃바운드 핸들러 중 그 어느 것도 시퀀스의 메시지를 현재 처리하고 있지 않는 것을 나타내는 경우 및 입력 메시지가 시퀀스에서 처리될 그 다음 메시지인 것으로 결정된 경우, 입력 메시지를 공유된 큐 저장소에 전달하고 나서 이후 처리를 위해 이용가능한 아웃바운드 핸들러에 의해 메시지를 검색하고;
시퀀스 상태가 아웃바운드 핸들러 층에 있는 아웃바운드 핸들러 중 적어도 하나가 시퀀스의 메시지를 현재 처리하고 있는 것을 나타내는 경우; 또는 공유된 큐 저장소가 시퀀스에서 처리될 메시지를 이미 포함하는 경우; 또는 입력 메시지가 시퀀스에서 처리될 그 다음 메시지가 아닌 것으로 결정된 경우, 추가적인 처리를 유지하기 위해 입력 메시지를 공유된 오버플로우 저장소의 메모리에 저장하는 것을 특징으로 하는 방법을 제공한다.
따라서, 분산 및 병렬 시스템은, 많은 시퀀스에 속하는 메시지를 수신하는 인바운드 핸들러 층에서 서로 병렬로 배열된 인바운드 핸들러; 및 공유된 시퀀스 저장소, 큐 저장소 및 공유된 오버플로우 저장소를 포함하고 인바운드 핸들러로부터 메시지를 수신하고 이 메시지를 메모리에 저장하도록 구성된 저장소 층을 포함하는 라우터로 보일 수 있다. 시퀀스 저장소는 오버플로우 저장소를 포함할 수 있다. 분산 및 병렬 시스템은, 아웃바운드 핸들러 층에서 서로 병렬로 배열되고 시스템이 각 시퀀스에서 메시지의 올바른 시퀀싱을 보장하면서 처리를 위해 공유된 큐 저장소로부터 메시지를 검색하도록 적응된 아웃바운드 핸들러를 더 포함한다. 아웃바운드 핸들러는, 메시지를 수신하고 이 메시지를 처리하고 이 메시지를 올바른 수신자에 전달할 수 있도록 구성된다.
오버플로우 저장소 및 시퀀스 저장소는 인바운드 핸들러 및 아웃바운드 핸들러에 의해 공유된다. 이들 저장소는 병렬 인바운드 핸들러 및 병렬 아웃바운드 핸들러에 의해 공통으로 사용된다.
그리하여 본 발명은 분산환경에서 여러 시퀀스를 병렬 처리하면서 동일한 시퀀스에 속하는 메시지의 순서를 유지하는 솔루션을 제공한다. 나아가, 아웃바운드 핸들러로부터 인바운드 핸들러를 분리하면 수신자의 처리량으로부터 발송자의 처리량을 분리할 수 있다. 나아가, 인바운드 핸들러의 개수 및 아웃바운드 핸들러의 개수는 매우 독립적으로 스케일러블가능하다. 추가적으로, 본 발명은 시퀀스와 인바운드/아웃바운드 핸들러 사이에 친화성(affinity)이 생성되는 것을 회피하여, 임의의 인바운드/아웃바운드 핸들러가 임의의 시퀀스의 메시지를 핸들링할 수 있게 한다. 따라서, 본 발명은 강한 탄력성을 제공하는데 그 이유는 일부 핸들러 또는 아웃바운드 핸들러가 중지(outage)되어도 메시지 처리에 영향을 미치지 않기 때문이다.
본 발명에 따른 방법은 다음 추가적인 특징 및 단계 중 어느 하나를 더 포함할 수 있다:
일 실시예에서, 입력 메시지가 시퀀스에서 메시지의 순서를 유지하기 위해 처리될 그 다음 메시지인지 여부를 결정하는 단계는,
- 시퀀스에서 입력 메시지의 순서를 표시하는 메시지 랭킹(rank)을 결정하는 단계,
- 메시지 랭킹을, 시퀀스에서 처리될 그 다음 메시지의 랭킹을 한정하는 시퀀스 랭킹과 비교하는 단계,
- 메시지 랭킹이 시퀀스 랭킹과 같은 경우, 메시지를 시퀀스에서 메시지의 순서를 유지하기 위해 처리될 그 다음 메시지인 것으로 결정하는 단계,
- 메시지 랭킹이 시퀀스 랭킹을 초과하는 경우, 메시지를 시퀀스에서 메시지의 순서를 유지하기 위해 처리될 그 다음 메시지가 아닌 것으로 결정된 단계를 포함한다.
시퀀스에 포함되고 특정 순서로 처리될 것을 요구하는 메시지는 본 명세서에서 메시지 랭킹으로 언급되는 메시지 랭킹 번호를 구비할 수 있다. 메시지 랭킹은 시퀀스에서 메시지의 순서를 한정한다. 메시지는 메시지의 발신자(originator) 또는 제3자에 의한 메시지 랭킹을 구비할 수 있다. 메시지 랭킹은 시퀀스의 메시지의 도착 순서에 따라 시스템에 의해 할당될 수도 있다.
본 명세서에서 이해되는 시퀀스 랭킹은 주어진 시퀀스에서 그 다음에 처리될 메시지, 즉 처리될 그 다음 메시지가 가지고 있어야 하는 메시지 랭킹을 한정한다.
바람직하게는, 시퀀스 랭킹은 시퀀스 저장소에서 표시된다.
일반적으로, 아웃바운드 핸들러에서 메시지를 처리하는 것은 아웃바운드 핸들러가 메시지를 수신자에 송신하거나 전달하는 것을 의미한다.
유리하게는, 아웃바운드 핸들러에서 주어진 시퀀스의 메시지의 처리를 완료하면, 주어진 시퀀스의 시퀀스 랭킹이 증분된다.
바람직하게는, 시퀀스의 시퀀스 랭킹이 증분될 때, 상기 방법은 오버플로우 저장소가 증분된 시퀀스 랭킹과 같은 메시지 랭킹을 갖는 메시지를 포함하는지를 체크하고 나서 이후 이 메시지를 큐 저장소로 전달하는 단계를 포함한다.
유리한 실시예에 따라, 수신된 입력 메시지가 시퀀스에서 메시지 랭킹을 표시하는 색인을 구비하지 않는 경우, 메시지 랭킹을 결정하는 단계는 그 시퀀스에서 입력 메시지의 랭킹을 표시하는 메시지 랭킹을 입력 메시지에 할당하는 단계 및 할당된 메시지 랭킹을 시퀀스 저장소에 저장하는 단계를 포함한다.
바람직하게는, 할당된 메시지 랭킹은 시퀀스에서 인바운드 핸들러 중 어느 하나의 인바운드 핸들러에서 수신된 마지막 메시지의 랭킹에 1 증분한 랭킹에 대응한다. 따라서, 입력 메시지가 시퀀스에서 제일 앞선 메시지인 경우, 메시지 랭킹은 1이다. 인바운드 핸들러에서 수신된 이전의 메시지의 메시지 랭킹이 N이면, 상기 새로이 입력되는 메시지에 할당된 메시지 랭킹은 N+1이다.
다른 유리한 실시예에서, 인바운드 핸들러에서 수신된 입력 메시지는 시퀀스에서 메시지 랭킹을 표시하는 색인을 구비한다.
바람직하게는, 메시지 랭킹이 시퀀스 랭킹을 초과하는 경우, 시퀀스의 상태는 "펜딩(pending)" 상태로 설정된다. 따라서, "펜딩" 상태는, 오버플로우 저장소 영역이 적어도 주어진 시퀀스의 메시지를 포함하지만 이 또는 이들 메시지가 시퀀스 랭킹과 같지 않은 메시지 랭킹을 구비하는 것을 의미한다.
일반적으로, 시퀀스 상태는, 아웃바운드 핸들러 중 그 어느 것도 시퀀스의 메시지를 현재 처리하고 있지 않는 경우 및 오버플로우 저장소 영역에 이 시퀀스의 메시지가 없을 때 "대기" 상태로 설정된다. 일반적으로, 시퀀스 상태는, 아웃바운드 핸들러 중 적어도 하나가 시퀀스의 메시지를 현재 처리하고 있을 때 "처리" 상태로 설정된다.
유리하게는, 큐 저장소가 상기 입력 메시지의 시퀀스에 메시지를 전혀 포함하지 않는 경우 및 입력 메시지의 메시지 랭킹이 시퀀스 저장소에서 표시된 시퀀스 랭킹을 초과하는 경우, 상기 입력 메시지는, 상기 시퀀스 랭킹이 증분되어 상기 입력 메시지의 메시지 랭킹과 같아질 때까지 오버플로우 저장소에 저장된다.
따라서, 메시지가 메시지의 발신자 또는 제3자에 의한 메시지 랭킹을 구비하는 경우, 및 메시지 랭킹이 시퀀스 랭킹을 초과하는 경우, 메시지는 오버플로우 저장소에 저장된다. 더 낮은 메시지 랭킹을 가지는 다른 메시지가 처리될 때, 시퀀스 랭킹은 이전에 저장된 메시지의 메시지 랭킹에 도달될 때까지 증분된다. 이 메시지는 시퀀스 저장소로부터 또는 보다 정확하게는 오버플로우 저장소로부터 해제(released)될 수 있고, 큐 저장소 및 인바운드 핸들러가 이 시퀀스의 메시지를 저장하고 처리하지 않는 경우 큐 저장소로 송신될 수 있다.
이러한 것은 메시지 랭킹을 구비하지 않으나 그 도착 순서에 따라 시스템에 의해 메시지 랭킹이 할당된 메시지에도 적용된다.
유리하게는, 메시지가 아웃바운드 핸들러에 의해 성공적으로 처리되었을 때 이 메시지는 큐 저장소로부터 제거된다.
유리하게는, 아웃바운드 핸들러는 비동기식으로 동작하여, 아웃바운드 핸들러는 메시지를 송신할 수 있고, 이후 상기 메시지를 송신하고 나서 상기 메시지의 수신자로부터 응답의 수신확인을 수신하기 전에, 다른 처리에 이용가능할 수 있다.
유리한 실시예에 따라, 아웃바운드 핸들러는 메시지를 수신자에 송신하는 전달 공정 및 수신자로부터 수신의 수신확인을 수신하는 수신확인 공정을 포함한다. 전달 공정 및 수신확인 공정은 독립적으로 동작하여, 전달 공정이 메시지를 송신할 때 바로 이용가능하게 할 수 있다.
유리하게는, 입력 메시지를 수신하고 나서 체크 단계를 수행하기 전에, 상기 방법은, 입력 메시지가 시퀀스 저장소에 저장되거나 또는 큐 저장소로 송신될 때까지, 모든 인바운드 핸들러가 시퀀스의 다른 메시지를 수신하지 못하게 하는 인바운드 록킹(locking) 단계를 수행하는 단계를 포함한다.
유리하게는, 입력 메시지는, 동일한 시퀀스의 다른 메시지가 아웃바운드 핸들러에 의해 송신되거나 처리되고 있는 동안, 인바운드 핸들러에서 수용(accept)될 수 있다. 입력 메시지가 록킹 해제되기를 기다릴 필요가 있는 유일한 제한된 경우는 다음 경우이다:
- 다른 입력 메시지가 저장소 층에 저장되고 있거나 또는 인바운드 핸들러에 수신되고 있는 경우,
- 시퀀스의 메시지에 대한 수신자의 응답이 아웃바운드 핸들러에 의해 수신되고 처리되고 있는 경우. 아웃바운드 핸들러가 수신자로부터 답변, 즉 수신확인을 수신할 때, 아웃바운드 핸들러는 시퀀스 및 대응하는 랭킹을 록킹하고, 만약 있다면, 시퀀스에서 송신될 그 다음 메시지를 찾고 랭킹을 증분한다.
바람직하게는, 인바운드 록킹 단계는 상기 시퀀스에 전용된 뮤텍스(mutex)를 록킹하는 단계를 포함하고, 상기 뮤텍스는 상기 시퀀스 저장소에 저장된다.
바람직하게는, 입력 메시지를 수신할 때, 인바운드 핸들러는 상기 입력 메시지의 시퀀스의 시퀀스 상관 값을 체크하고, 입력 메시지를 수용하기 전에 상기 시퀀스의 뮤텍스 파라미터를 판독한다. 인바운드 핸들러는, 뮤텍스가 록킹되지 않는 경우, 입력 메시지를 수용한다. 뮤텍스가 록킹된 경우, 상기 입력 메시지는 뮤텍스가 해제되기를 기다린다.
보다 정확하게, 상기 뮤텍스는 시퀀스 저장소에 포함된 시퀀스 레지스터에 저장된다.
유리하게는, 인바운드 및 아웃바운드 핸들러에 시퀀스당 단 하나의 뮤텍스만이 있다. 큐 저장소에서 저장소 큐는 아웃바운드 핸들러 층이 이 시퀀스에서 메시지의 처리를 완료할 때까지 주어진 시퀀스에서 단 하나의 메시지만이 아웃바운드 핸들러로 전파되는 것을 보장한다.
바람직하게는, 아웃바운드 록킹 단계는 시퀀스에 전용된 뮤텍스를 록킹하는 단계를 포함하고, 상기 뮤텍스는 상기 시퀀스 저장소에 저장된다.
유리하게는, 아웃바운드 핸들러가 이용가능할 때, 이 아웃바운드 핸들러는 큐 저장소에서 메시지가 처리에 이용가능한지를 체크하고 나서, 상기 메시지를 검색하고 이를 처리한다.
바람직하게는, 아웃바운드 핸들러가 이용가능할 때, 아웃바운드 핸들러는 큐 저장소(850)에서 처리할 이용가능한 메시지가 있는지 여부를 체크한다. 메시지가 있는 경우, 이 메시지는 자동적으로, 상기 주어진 시퀀스에서 처리될 올바른 메시지가 된다.
일 실시예에서, 입력 메시지를 시퀀스 저장소 또는 보다 정확하게는 오버플로우 저장소에 저장하면, 인바운드 핸들러는 수신확인 메시지를 송신한다.
일반적으로, 수신확인 메시지는 메시지의 발신자로 송신된다.
유리하게는, 시퀀스 랭킹을 초과하는 메시지 랭킹을 가지는 메시지는, 그 메시지 랭킹이 시퀀스 랭킹, 즉, 처리될 그 다음 메시지의 랭킹과 일치하지 않는 한, 오버플로우 저장소에서 메시지 시퀀스를 록킹하기 위해 오버플로우 저장소에 저장된다.
바람직하게는, 시퀀스 랭킹을 초과하는 메시지 랭킹을 가지는 메시지는 제일 먼저 오버플로우 저장소에 저장되고, 이후 메시지의 시퀀스에 할당된 타임아웃 값에 도달된 후에 오버플로우 저장소로부터 폐기된다. 대안적으로 또는 추가적으로, 시퀀스 랭킹을 초과하는 메시지 랭킹을 가지는 메시지는 제일 먼저 오버플로우 저장소에 저장되고, 이후 메시지에 할당된 타임아웃 값에 도달된 후에 오버플로우 저장소로부터 폐기된다.
다른 실시예에서, 본 발명은, 소프트웨어 프로그램 명령을 포함하는 비-일시적인 컴퓨터로-판독가능한 매체로서, 적어도 하나의 데이터 프로세서에 의해 소프트웨어 프로그램 명령을 실행하면 본 발명에 따른 방법을 실행하는 동작을 수행하는 것을 특징으로 하는 비-일시적인 컴퓨터로-판독가능한 매체에 관한 것이다.
또 다른 실시예에서, 본 발명은,
비동기 메시지를 시퀀싱하는 분산 및 병렬 처리 시스템으로서,
- 적어도 하나의 데이터 프로세서를 포함하는 복수의 인바운드 핸들러로서, 복수의 인바운드 핸들러 각각은 여러 시퀀스에 속하는 복수의 입력 메시지를 독립적으로 수신하도록 구성된, 복수의 인바운드 핸들러;
- 적어도 하나의 데이터 프로세서를 포함하는 복수의 아웃바운드 핸들러로서, 복수의 아웃바운드 핸들러 각각은 복수의 입력 메시지를 독립적으로 처리하고 전달하도록 구성된, 아웃바운드 핸들러; 및
- 적어도 메모리를 포함하는 저장소 층을 포함하고, 상기 저장소 층은,
상기 시퀀스 저장소는, 상기 입력 메시지의 시퀀스의 상태를 유지하고 업데이트하는 시퀀스 상태 컨텍스트(sequence state context)(802); 및 인바운드 핸들러로부터 메시지를 수신하고 이 메시지를 큐 저장소로 순차적으로 전달하도록 구성된 오버플로우 저장소를 포함하고,
상기 시스템은, 입력 메시지가 이 메시지의 시퀀스에서 상기 메시지의 순서를 유지하기 위해 처리될 그 다음 메시지인지 여부를 결정하고, 적어도 하나의 데이터 프로세서에서 수행되는 다음 단계, 즉:
상기 시퀀스 상태가 아웃바운드 핸들러 중 그 어느 것도 상기 시퀀스의 메시지를 현재 처리하고 있지 않는 것을 나타내는 경우 및 상기 입력 메시지가 상기 시퀀스에서 처리될 그 다음 메시지인 것으로 결정된 경우, 상기 입력 메시지를 상기 큐 저장소로 전달하고 나서 이후 처리를 위해 상기 메시지를 이용가능한 아웃바운드 핸들러로 전달하는 단계;
상기 시퀀스 상태가 상기 아웃바운드 핸들러 중 적어도 하나가 상기 시퀀스의 메시지를 현재 처리하고 있는 것을 나타내는 경우; 또는 상기 큐 저장소가 상기 시퀀스에서 처리될 메시지를 이미 포함하는 경우; 또는 상기 입력 메시지가 상기 시퀀스에서 처리될 그 다음 메시지가 아닌 것으로 결정된 경우, 추가적인 처리를 유지하기 위해 상기 입력 메시지를 상기 오버플로우 저장소에 저장하는 단계를 수행하도록 더 구성된 것을 특징으로 하는 분산 및 병렬 처리 시스템에 관한 것이다.
선택적인 실시예에 따라, 저장소 층의 큐 저장소 및 시퀀스 저장소는 인-메모리 데이터 또는 파일 기반 저장소에 구현된다. 대안적으로, 저장소 층의 큐 저장소 및 시퀀스 저장소는 클라이언트-서버 저장소 데이터베이스에 구현된다.
바람직하게는, 시퀀스 상태를 체크하는 단계는 상기 시퀀스의 시퀀스 상관 값에 기초하여 시퀀스의 상태를 검색하는 단계를 포함한다.
다른 실시예에서, 본 발명은,
복수의 병렬 인바운드 핸들러 및 복수의 병렬 아웃바운드 핸들러를 구비하는 병렬 환경에서 적어도 하나의 서버 애플리케이션과 적어도 하나의 클라이언트 애플리케이션 사이에서 비동기 메시지를 처리하는 컴퓨터로-구현되는 여행 모니터링 방법으로서, 상기 방법은, 적어도 하나의 데이터 프로세서에서 수행되는 다음 단계, 즉:
- 입력 메시지를 상기 복수의 병렬 인바운드 핸들러 중 하나의 인바운드 핸들러에서 수신하는 단계로서 상기 입력 메시지는 상기 입력 메시지를 포함하는 시퀀스를 식별하는 시퀀스 상관 값을 구비하는, 상기 수신하는 단계,
- 시퀀스 저장소에서 상기 시퀀스의 시퀀스 상태를 체크하는 단계;
- 상기 입력 메시지가 상기 시퀀스에서 상기 메시지의 순서를 유지하기 위해 처리될 그 다음 메시지인지 여부를 결정하는 단계;
상기 시퀀스 상태가 상기 복수의 병렬 아웃바운드 핸들러에 있는 상기 아웃바운드 핸들러 중 그 어느 것도 상기 시퀀스의 메시지를 현재 처리하고 있지 않는 것을 나타내는 경우 및 상기 입력 메시지가 상기 시퀀스에서 처리될 그 다음 메시지인 것으로 결정된 경우, 상기 입력 메시지를 큐 저장소로 전달하고 나서 이후 처리를 위해 이 입력 메시지를 이용가능한 아웃바운드 핸들러에 전달하는 단계;
상기 시퀀스 상태가 상기 아웃바운드 핸들러 중 적어도 하나가 상기 시퀀스의 메시지를 현재 처리하고 있는 것을 나타내는 경우; 또는 상기 큐 저장소가 상기 시퀀스에서 처리될 메시지를 이미 포함하는 경우; 또는 상기 입력 메시지가 상기 시퀀스에서 처리될 그 다음 메시지가 아닌 것으로 결정된 경우, 추가적인 처리를 유지하기 위해 상기 입력 메시지를 오버플로우 저장소에 저장하는 단계를 포함하고,
상기 메시지는 승객과 관련된 데이터를 포함하고 상기 시퀀스 상관 값은 교통 서비스의 레퍼런스(reference)와 관련된 데이터를 포함하는 것을 특징으로 하는 방법에 관한 것이다.
본 발명에 따른 방법은 다음 추가적인 특징 및 단계 중 어느 하나를 더 포함할 수 있다.
일단 처리되면, 메시지는, 상기 아웃바운드 핸들러로부터, 여행 예약 및 부킹 시스템, 항공사의 재고 시스템, 항공사의 전자 티켓 시스템, 공항의 출발 제어 시스템, 공항의 운영 시스템, 항공사의 운영 시스템, 지상 핸들러의 운영 시스템 중 적어도 하나로 전달된다.
일 실시예에서, 교통 서비스의 레퍼런스는 항공편 번호, 날짜 및 클래스(class) 예약 중 적어도 하나를 포함한다.
일 실시예에서, 상기 메시지는 탑승 승객, 취소된 승객, 추가된 승객 중 어느 하나를 나타낸다.
일 실시예에서, 시퀀스 타임아웃 값은 시퀀스 타임아웃 값에 도달한 후 상기 오버플로우 저장소에 저장된 상기 입력 메시지를 제거하기 위하여 각 입력 메시지에 제공되고, 상기 시퀀스 타임아웃 값은 항공편의 출발 시간에 의해 트리거되거나 또는 항공편 제안(offer) 만료 또는 판촉 만료 중 어느 하나이다.
다른 실시예에서, 본 발명은 소프트웨어 프로그램 명령을 포함하는 비-일시적인 컴퓨터로-판독가능한 매체로서, 적어도 하나의 데이터 프로세서에 의해 상기 소프트웨어 프로그램 명령을 실행하면 본 발명에 따른 상기 방법을 실행하는 동작을 수행하는 것을 특징으로 하는 비-일시적인 컴퓨터로-판독가능한 매체에 관한 것이다.
또 다른 실시예에서, 본 발명은, 메시지를 처리할 적어도 하나의 프로세서를 포함하는 복수의 인바운드 핸들러 및 복수의 아웃바운드 핸들러를 구비하는 분산 및 병렬 시스템에서 분산비동기 메시지를 시퀀싱하는 컴퓨터로-구현되는 방법으로서, 상기 방법은, 적어도 하나의 데이터 프로세서에서 수행되는 다음 단계, 즉:
- 입력 메시지를 포함하는 시퀀스를 식별하는 시퀀스 상관 값을 갖는 상기 입력 메시지를 인바운드 핸들러에서 수신하고 상기 시퀀스에서 상기 입력 메시지의 순서를 표시하는 메시지 랭킹을 결정하는 단계;
- 시퀀스 저장소에서 상기 시퀀스의 시퀀스 상태를 체크하는 단계;
상기 시퀀스 상태가 상기 아웃바운드 핸들러 중 그 어느 것도 상기 시퀀스의 메시지를 현재 처리하고 있지 않는 것을 나타내는 경우 및 수신된 입력 메시지가 상기 시퀀스 내 메시지 랭킹을 표시하는 색인을 구비하지 않고 상기 시퀀스 저장소가 상기 시퀀스에서 처리될 메시지를 아직 포함하고 있지 않는 경우, 또는
수신된 입력 메시지가 상기 시퀀스에서 상기 메시지 랭킹을 표시하는 색인을 구비하는 경우(여기서, 상기 메시지 랭킹은 상기 시퀀스 저장소에 표시된 시퀀스 랭킹과 같고 상기 시퀀스에서 처리될 그 다음 메시지의 랭킹을 한정한다),
상기 입력 메시지를 큐 저장소로 전달하고 나서 이후 이 입력 메시지를 처리를 위해 이용가능한 아웃바운드 핸들러로 전달하는 단계;
상기 시퀀스 상태가 상기 아웃바운드 핸들러 중 적어도 하나가 상기 시퀀스의 메시지를 현재 처리하고 있는 것을 나타내는 경우; 또는 상기 큐 저장소가 상기 시퀀스에서 처리될 메시지를 이미 포함하고 있는 경우; 또는 수신된 입력 메시지가 상기 시퀀스에서 메시지 랭킹을 표시하는 색인을 구비하는 경우(여기서, 상기 메시지 랭킹은 상기 시퀀스 저장소에서 표시된 시퀀스 랭킹을 초과하고 상기 시퀀스에서 처리될 그 다음 메시지의 랭킹을 한정한다), 추가적인 처리를 유지하기 위해 상기 입력 메시지를 오버플로우 저장소에 저장하는 단계를 포함하는 것을 특징으로 하는 컴퓨터로-구현되는 방법에 관한 것이다.
본 발명의 실시예의 전술된 측면과 다른 측면은 첨부 도면과 함께 판독될 때 이하 상세한 설명으로부터 보다 명백해질 것이다:
도 1a는 호출 시스템과 원격 시스템 사이에 동기적인 호출 또는 메시지를 연대순으로 처리하는 것을 도시하는 예시적인 흐름도.
도 2는 호출 시스템과 원격 시스템 사이에 비동기 호출 또는 메시지를 연대순으로 처리하는 것을 도시하는 예시적인 흐름도.
도 3은 분산공정 시스템에서 호출 또는 메시지를 병렬로 처리하는 것을 도시하는 예시적인 흐름도.
도 4는 메시지 처리 순서를 벗어나 데이터를 손상시킬 위험을 초래할 수 있는 분산공정 시스템에서 비동기 호출 또는 메시지를 병렬로 처리하는 것을 도시하는 예시적인 흐름도.
도 5는 본 발명에 따른 중앙 집중화된 및 공유된 시퀀스 컨텍스트에서 하이 레벨 시퀀스 관리의 예시적인 블록도.
도 6은 본 발명에 따른 전송 및 처리 채널 내 시퀀스를 식별하는 공정을 도시하는 예시적인 흐름도.
도 7은 본 발명에 따른 예시적인 비동기적인 및 분산처리 시스템을 도시하는 도면.
도 8a는 발명에 따른 인바운드 핸들러가 시퀀스 A에서 제1 메시지를 수신하는 시퀀싱 공정의 예시적인 단계를 도시하는 도면.
도 8b는 본 발명에 따른 인바운드 핸들러가 시퀀스 A에서 제2 메시지를 수신하는 시퀀싱 공정의 다른 예시적인 단계를 도시하는 도면.
도 8c는 본 발명에 따른 아웃바운드 핸들러가 시퀀스 A에서 제1 메시지를 처리하는 시퀀싱 공정의 다른 예시적인 단계를 도시하는 도면.
도 8d는 본 발명에 따른 아웃바운드 핸들러가 시퀀스 A에서 제1 메시지를 처리한 시퀀싱 공정의 다른 예시적인 단계를 도시하는 도면.
도 8e는 시퀀스가 본 발명에 따라 재-배열된 시퀀싱 공정의 예시적인 단계를 도시하는 도면.
도 1a는 호출 시스템과 원격 시스템 사이에 동기적인 호출 또는 메시지를 연대순으로 처리하는 것을 도시하는 예시적인 흐름도.
도 2는 호출 시스템과 원격 시스템 사이에 비동기 호출 또는 메시지를 연대순으로 처리하는 것을 도시하는 예시적인 흐름도.
도 3은 분산공정 시스템에서 호출 또는 메시지를 병렬로 처리하는 것을 도시하는 예시적인 흐름도.
도 4는 메시지 처리 순서를 벗어나 데이터를 손상시킬 위험을 초래할 수 있는 분산공정 시스템에서 비동기 호출 또는 메시지를 병렬로 처리하는 것을 도시하는 예시적인 흐름도.
도 5는 본 발명에 따른 중앙 집중화된 및 공유된 시퀀스 컨텍스트에서 하이 레벨 시퀀스 관리의 예시적인 블록도.
도 6은 본 발명에 따른 전송 및 처리 채널 내 시퀀스를 식별하는 공정을 도시하는 예시적인 흐름도.
도 7은 본 발명에 따른 예시적인 비동기적인 및 분산처리 시스템을 도시하는 도면.
도 8a는 발명에 따른 인바운드 핸들러가 시퀀스 A에서 제1 메시지를 수신하는 시퀀싱 공정의 예시적인 단계를 도시하는 도면.
도 8b는 본 발명에 따른 인바운드 핸들러가 시퀀스 A에서 제2 메시지를 수신하는 시퀀싱 공정의 다른 예시적인 단계를 도시하는 도면.
도 8c는 본 발명에 따른 아웃바운드 핸들러가 시퀀스 A에서 제1 메시지를 처리하는 시퀀싱 공정의 다른 예시적인 단계를 도시하는 도면.
도 8d는 본 발명에 따른 아웃바운드 핸들러가 시퀀스 A에서 제1 메시지를 처리한 시퀀싱 공정의 다른 예시적인 단계를 도시하는 도면.
도 8e는 시퀀스가 본 발명에 따라 재-배열된 시퀀싱 공정의 예시적인 단계를 도시하는 도면.
이하 상세한 설명은 여행 산업에 적용하는 상황에서 주어졌지만, 이는 응용 예를 제한하려고 의도된 것이 아니며, 본 발명은 호텔 룸, 차량 렌탈, 철도 티켓 또는 등과 같은 여행 제품은 물론 모든 종류의 데이터 처리에 적용될 수 있다.
본 발명에 따라, 명시적으로 시퀀스 내 각 메시지의 랭킹을 표시하는 색인을 제공하는 것에 의하든지, 또는 암시적으로 메시지를 순차적으로 전달하고 나서 주어진 시퀀스에서 그 다음 메시지를 송신하기 전에 주어진 메시지의 전송 수신확인을 기다리는 것에 의해서, 메시지의 발송자 또는 호출 시스템에 의해 비동기적인 및 병렬 환경에서 메시지의 처리 순서가 정의된다.
본 발명은 동시적인 및 독립적인 공정이 시퀀스로 한정된 주어진 메시지 세트를 처리하는 시퀀싱 순서를 고려할 것을 보장하는 것을 목적으로 한다.
이런 점에서, 본 발명에 따른 분산 비동기 메시지를 시퀀싱하는 방법, 장치 및 시스템은, 아래에 설명되고 도면을 참조하여 더 상세히 이후 상술되는 여러 액션을 수행한다.
주어진 시퀀스에 속하는 각 메시지 또는 서비스 호출은, 인터페이스의 정의상, 이것이 속하는 특정 시퀀스를 실제 나타내기 위해 태그(tagged)된다.
메시지의 시퀀스 내 메시지 또는 서비스 호출의 랭킹은,
명시적으로 적절한 인터페이스를 통해 메시지 또는 서비스 호출의 발송자/송신자에 의해 제공되거나(예를 들어, 메시지는 그 시퀀스 내 메시지의 랭킹을 한정하는 색인을 포함하는 필드를 포함한다), 또는
시퀀스 및 메시지 랭킹 또는 서비스 호출 순서가 식별되면, 시퀀스는 적절히 관리되어야 한다.
도 5는 중앙 집중화된 및 공유된 시퀀스 컨텍스트에서 하이 레벨 시퀀스 관리의 예시적인 블록도를 도시한다. 이 도면에는, 시스템의 주요 특징 및 주요 단계가 상세히 도시된다.
비동기적인 및 분산처리 시스템은, 입력 메시지(501)를 수신하는 인바운드 핸들러(510) 및 메시지를 처리하고 이 메시지를 전달하도록 구성된 아웃바운드 핸들러(530)를 포함한다. 이 시스템은, 메시지(501)가 속한 시퀀스의 순서가 유지되도록 이 메시지(501)의 처리가 보류(withhold)되어야 하는 경우, 인바운드 핸들러로부터 수신된 메시지를 저장할 수 있는 오버플로우 저장소 영역(540)을 더 포함한다.
이 시스템은 복수의 병렬 인바운드 핸들러(510) 및 복수의 병렬 아웃바운드 핸들러(530)를 포함하고 도 5는 이해를 돕기 위해 간략화된 것이다.
인바운드 핸들러는 수용체(acceptor) 또는 수용체 공정이라고 언급될 수 있다. 따라서 복수의 인바운드 핸들러를 포함하는 인바운드 핸들러 층은 수용체 층이라고 언급될 수 있다.
아웃바운드 핸들러는 프로세서 또는 전달 공정이라고 언급될 수 있다. 따라서 복수의 아웃바운드 핸들러를 포함하는 아웃바운드 핸들러 층은 전달 층이라고 언급될 수 있다.
인바운드 핸들러(510)는 특히 발행자(publisher)와 같은 발송자로부터 메시지를 수신하는 동작; 메시지의 무결성(integrity)을 검증(validate)하는 동작; 시퀀스 록킹 및 상태 검증을 수행하는 동작; 2개의 영역(즉, 큐 저장소 또는 오버플로우 영역) 중 하나의 영역에 메시지를 저장하는 동작; 발송자에 답변하는 동작 중 어느 하나의 동작을 수행하도록 구성된다.
유리한 실시예에 따라, 아웃바운드 핸들러(530)는 2개의 공정, 즉 제1 공정과 제2 공정으로 구성된다. 제1 공정은 전달 공정(531)이라고 언급되고, 저장소 큐로부터 메시지를 취득하는 동작; 이 메시지를 통신 채널을 통해 수신자에 송신하는 동작; 다른 공정에 이용가능하도록 중지(quit)하는 동작 중 어느 하나를 수행하도록 구성된다.
제2 공정은 수신확인 공정(532)이라고 언급되고, 수신자로부터 수신의 수신확인을 수신하는 동작; 대응하는 시퀀스에서 그 다음 메시지를, 만약 있다면, 저장소 큐에 두는 것과 같은 시퀀스 관리를 수행하는 동작; 다른 공정에 이용가능하도록 중지하는 동작을 수행하도록 구성된다.
따라서, 아웃바운드 핸들러(532)로 형성된 전달 층은 비동기식이어서 높은 스케일가능성 요구조건에 순응할 수 있다. 이런 방식으로, 시스템은 수신자의 레이턴시(latency)에 독립적이다. 보다 정확하게는, 이것은, 아웃바운드 핸들러가 제1 시퀀스의 메시지를 검색하고 전달할 수 있고 이후 제1 시퀀스의 메시지를 전달한 것에 대한 수신확인을 수신하기 전에 제2 시퀀스의 다른 메시지를 검색하고 전달할 수 있다는 것을 의미한다. 그리하여, 아웃바운드 핸들러는 많은 시퀀스로부터 메시지를 비동기적으로 핸들링하여, 이에 의해 각 시퀀스에 올바른 순서를 항상 유지하면서 시스템이 라우팅할 수 있는 메시지의 수를 증가시킬 수 있다.
본 발명에 따라, 상태 기계가 각 시퀀스에 사용되는 집중 및 공유된 시퀀스 컨텍스트가 구현된다. 입력 메시지(501)가 인바운드 핸들러(510)에 수신될 때마다, 대응하는 시퀀스 컨텍스트 상태가 체크(520)된다. 일 실시예에 따라, 대응하는 시퀀스 컨텍스트가 존재하지 않는 경우, 이것은 동적으로 투명하게 생성된다. 따라서, 본 발명은, 시퀀스가 시스템에서 미리 한정될 것을 요구하지 않아서 이런 점에서 완전히 동적이다. 나아가, 메시지가 시퀀스에서 그 랭킹을 표시하는 색인을 구비하지 않는 경우, 메시지 랭킹이 메시지의 도착 순서에 따라 메시지에 할당된다.
시퀀스 상태가 아웃바운드 핸들러 층이 시퀀스의 그 다음 메시지를 기다리고 있는 것을 표시하는 경우, 즉, 시퀀스 상태가 "대기(waiting)" 상태인 경우, 입력 메시지(501)는 아웃바운드 핸들러(530)에 의해 표준 거동에 따라 정상적으로 처리(522)되고(이때, 메시지는 비동기 처리에 이용가능하다); 또는
시퀀스 상태가 시퀀스의 메시지가 이미 현재 처리되고 있는 것을 표시하는 경우, 즉, 시퀀스 상태가 "처리" 상태인 경우, 입력 메시지(501)는 차후 처리(524)를 위해 특정 시퀀스 오버플로우 저장소 영역(540)에 저장된다. 오버플로우 저장소 영역(540)은 입력 메시지의 순서가 상실되지 않는 방식으로 구조화되고/색인된다. 이런 방식으로, 입력 메시지(501)는 추가적인 처리를 위해 유지되고, 이 메시지는 (시퀀스에서 벗어나서) 즉시 처리에 이용가능하지 않다.
아웃바운드 핸들러 층은 표준 거동에 따라 처리될 메시지를 수신하여 메시지가 사실상 올바른 시퀀스 랭킹에 있다.
메시지(501)가 처리되면, 아웃바운드 핸들러 층은 오버플로우 저장소 영역(540)에서 시퀀스로 처리될 그 다음 메시지를 기다린다. 이러한 메시지가 발견되면, 이 메시지는 표준 공정에 따라 아웃바운드 핸들러 층으로 푸시된다. 메시지가 발견되지 않으면, 시퀀스 상태는 "대기" 상태로 다시 설정된다.
시퀀스 내 각 메시지의 순서는 유지된다. 시퀀스 저장소는 시퀀스의 메시지의 순서를 보존하기 위해 처리되어야 하는 그 다음 메시지의 랭킹을 표시하는 시퀀스 랭킹을 한정한다. 시퀀스 랭킹은 메시지의 처리가 완료될 때마다 증분적으로 업데이트된다. 그리하여 시퀀스 랭킹은 카운터로 보일 수 있다.
시퀀스 랭킹, 즉 처리될 그 다음 메시지의 랭킹과 매칭하지 않는 임의의 입력 메시지는, 처리될 올바른 메시지가 인바운드 핸들러(510)에 의해 수신될 때까지, 오버플로우 저장소 영역(540)에 저장된다. 이것은 오버플로우 저장소 영역(540)에서 삽입 동작/제거 동작이 시퀀스의 랭킹 및 각 메시지의 랭킹을 고려하여 수행되는 것을 의미한다.
메시지는 시퀀스에서 처리될 차례(turn)를 펜딩하는 오버플로우 저장소 영역(540)에 저장되므로, 시퀀스는 시퀀스에서 그 다음 메시지에 의해 록킹 해제되는 일이 일어나지 않을 수 있다. 이러한 상황은 매우 종종 일어나는 것은 아니지만, 본 발명은, 시퀀스의 컨텍스트에 표시자를 두어, 표시자가 만료된 것으로 고려될 때 시퀀스에 액션을 취하는 동적 방식, 예를 들어 만료된 메시지 또는 만료된 시퀀스를 폐기하는 액션을 취하는 동적 방식을 제공한다.
MOM이라고 언급되는 일부 메시지 기반 미들웨어(Message Oriented Middleware: MOM)는 병렬 처리의 사용을 회피하는 것에 의해 시퀀싱 특징을 제공한다(즉, 이들은 단 하나의 큐잉 해제 소비(de-queuing consumer)를 강제한다). 그리하여, 이들은 스케일가능성을 희생하고 시퀀싱을 보장한다. Oracle Advanced Queuing이 대표적인 예이다.
일부 다른 MOM(예를 들어, MQ-Series)은 상관기에 기초하여 시퀀싱 특징을 제공하지만, 시퀀스 메시지가 서로 논리적으로 그룹화된 것처럼 처리될 것을 요구한다. 이외에, 그룹 사이즈는 제한되어야 하고 MOM은 큐잉 해제 공정에 추가적인 제약을 요구할 수 있다.
본 발명에 따른 분산 및 병렬 처리는 병렬 처리 및 스케일가능성을 유지하면서 엄격한 시퀀싱을 제공하고, 이 방식에 특정 제약을 요구함이 없이 메시지 또는 서비스 호출이 큐잉 해제 공정에 의해 상관되거나 처리된다. 본 발명의 방법, 장치 및 시스템의 높은 스케일가능성과 탄력성을 통해,
메시지를 포스팅(posted)하고 공정이 수신확인을 기다리지 않고, 다른 공정(수신확인 공정)이 수신확인을 수신하는 일을 담당하여, 매우 많은 메시지 처리량에 대처(coping with)할 수 있는,"포스팅 및 중지"원리를 사용하여 완전히 비동기식 전달 공정을 구현할 수 있고; 및
완전히 분산공정을 구현하고 시퀀스와 인바운드/아웃바운드 핸들러 사이에 친화성(affinity)을 제거하여, 이에 의해 임의의 인바운드/아웃바운드 핸들러가 임의의 시퀀스의 메시지를 핸들링할 수 있다.
메시지 시퀀싱에 대처하는 일상적인 접근법은 모노(mono) 공정 아키텍처로 복귀하는 것일 수 있는데, 이는 탄력성 및 스케일가능성에 있어 막대하고 종종 허용할 수 없는 제약을 야기한다. 이와는 반대로, 본 발명은, 시퀀스에서 원소 개수(cardinality)가 높은 한, 시퀀싱을 보장하면서, 2개의 레벨, 인바운드 핸들러 레벨 및 아웃바운드 핸들러 레벨에서 분산 및 병렬 처리의 전체 이익을 제공할 수 있다. 이것은 시스템이 병렬로 많은 개수의 시퀀스에 대처해야 하는 경우에만 본 발명이 병렬 시퀀스 처리의 잇점을 완전히 이용할 수 있다는 것을 의미한다.
시퀀스 유지에 대하여 저장소 영역 및 큐잉 해제 공정에 전제 조건은 없다:
인바운드 핸들러 층에서 메시지 수용(acceptance)의 큐잉 공정 및 아웃바운드 핸들러 층에서 메시지 처리의 큐잉 공정은 이것이 본 발명에 따라 가능할 수 있을 때 시퀀스 보존을 지원할 필요가 없다;
비-제한적인 실시예에 따라, 큐 저장소 그 자체는 노드(node)에 국부적일 수 있는 반면, 오버플로우 저장소 영역은 전체적으로 유지되는데, 즉, 모든 아웃바운드 핸들러에 의해 공유된다. 오버플로우 저장소는, 임의의 노드가 주어진 시퀀스를 처리하여 고유한 오버플로우 영역에 액세스하여 이 저장소에 실제 큐잉하고 큐잉 해제할 수 있으므로 공유될 필요가 있다. 큐 저장소가 모든 아웃바운드 핸들러에 의해 공유되지 않는 경우, 이 큐 저장소는 단일 아웃바운드 핸들러에 전용되거나 또는 복수의 아웃바운드 핸들러에 전용될 수 있다. 큐 저장소가 모든 아웃바운드 핸들러에 의해 공유되지 않는 경우에, 각 메시지는 단 하나의 국부 큐 저장소에 의해 수신된다.
본 발명의 방법, 장치 및 시스템에 따라, 메시지 시퀀스는 시퀀스의 식별 및 이 시퀀스에서 메시지 랭킹의 식별을 수행하는 것에 의해 분산 및 병렬 모드에서 처리된다. 식별에 더하여, 시퀀스는 시퀀스 록킹 및 타임아웃을 포함하여 관리 및 재-배열되어야 한다. 이런 측면은 아래에서 보다 상세히 설명된다.
시퀀스의 식별
주어진 전송 채널을 공유하는 메시지 또는 이벤트의 흐름에서, 고려할 시퀀스 관점에서 각 상관된 메시지 세트는 명시적으로 한정될 것을 요구한다. 도 6은 발송 시스템(610)과 공정 시스템(630) 사이에 전송 및 처리 채널(620)에서 시퀀스를 식별하는 공정의 예시적인 흐름도를 도시한다.
전용 파라미터는 주어진 전송에 수반되는 각 메시징 프리미티브(messaging primitive)에 제공된다. 이 전용 파라미터는 시퀀스 상관 값으로도 언급되는 시퀀스 식별자이다. 이 파라미터는 일반적으로 메시지의 발송 시스템에 의해 영숫자 값(alphanumeric value) 세트이다. 이 파라미터는 동일한 시퀀스에 속하는 메시지를 실제 식별하기 위해 각 수반된 성분에 의해 사용된다. 예를 들어, 메시지 1 내지 4는 전송 채널(620)에서 파싱(parsed)되고 메시지(#1, ... , #4)로 식별된다. 이들 상관된 및 정렬된 메시지는 동일한 전송 채널(620)을 공유하지만, 이들 메시지는 서로 연속적으로 추종(following)하지 않는다. 그리하여 이들 메시지는 전송 채널(620)에서 다른 시퀀스에 속하는 메시지와 서로 뒤얽힌다(intertwined).
시퀀스 상관 파라미터는 주어진 전송 및 처리 체인에서 별개의 충돌 공정에 의해 공유되지 않는 것을 보장하는 방식으로 한정된다. 이 컨텍스트에서, 엄격한 고유성(uniqueness)을 가지는 것이 필수적이다. 바람직하게는, 시퀀스 상관 파라미터의 이러한 정의는 시스템을 사용하여 비즈니스 공정을 수행하는 책임성에 있다.
시퀀스에서 메시지 랭킹의 식별
특정 순서에서 처리될 것을 요구하는 메시지는 2가지 종류로 분류될 수 있다:
시퀀스 내 순서 또는 랭킹이 메시지가 생성될 때 알려지고, 그리고 바람직하게는 메시지의 총 수가 메시지 생성 시간에 알려지는 제1 종류의 메시지(여기서, 생성 공정은 전송 프리미티브에서 특정 메시지 랭킹 번호를 각 메시지에 할당할 수 있다. 이 메시지 랭킹 번호는 이후 최종 처리를 수행할 때까지 전체 체인의 일부로 각 공정에 의해 운반 및 저장된다); 및
시퀀스 내 순서가 발생 시간에 결정되는 제2 종류의 메시지(이 제2 종류의 메시지의 처리는 일반적으로 증분적이어서, 공정에서 각 새로운 메시지(또는 이벤트)가 시퀀스에서 이전의 메시지의 공정의 결과를 변경한다는 것을 의미한다. 이런 측면에서, 메시지의 발송 시스템은 주어진 시퀀스에서 메시지의 메시지 랭킹 번호도 알지 못하고, 시퀀스에서 메시지의 총 개수도 알지 못한다).
간결함을 위하여, 본 설명에서는 주어진 시퀀스에서 메시지의 메시지 랭킹 번호가 메시지 랭킹이라고 언급된다.
코어 시퀀스 관리
도 7에 도시된 바와 같이, 예시적인 비동기적인 및 분산처리 시스템은,
인바운드 핸들러 층을 형성하는 복수의 인바운드 핸들러(710, 720, ..., 740)(여기서, 인바운드 핸들러는 입력 메시지(711 , 721 , 731 및 741)를 수신하고, 이 메시지를 큐 저장소(750)에 각각 저장하고, 및 이 입력 메시지(711 , 721 , 731 및 741)를 잘 수신하였다는 것을 발송 시스템으로 수신확인할 수 있다);
아웃바운드 핸들러 층을 형성하는 복수의 아웃바운드 핸들러(760, 770, ..., 790)(여기서, 각 아웃바운드 핸들러는 큐 저장소(750)로부터 메시지를 검색하고 이 메시지를 처리하도록 구성된다. 아웃바운드 핸들러는 처리된 메시지를 애플리케이션으로 전달하는 일을 또한 담당한다)를 포함한다.
인바운드 핸들러는 수용체 또는 수용체 공정이라고도 언급될 수 있다. 아웃바운드 핸들러는 프로세서 또는 전달 공정이라고도 언급될 수 있다.
도 8a는 발송 시스템으로부터 인바운드 핸들러에 의해 수신된 시퀀스 A의 제1 메시지의 시퀀싱 공정의 예시적인 단계를 도시하는 도 7의 실시예의 개선을 도시한다. 이 개선에서, 시퀀스 저장소(800)라고 언급되는 추가적인 성분은 복수의 인바운드 핸들러(810, 820, ..., 840)와 복수의 아웃바운드 핸들러(860, 870, ..., 890) 사이에 저장소 층의 일부로 구현된다. 시퀀스 저장소(800)는,
단 하나의 핸들러만이 한번에 주어진 시퀀스에서 (또는 동일한 시퀀스 상관 값을 갖는) 메시지를 처리하는 것을 보장하기 위해 뮤텍스(Mutex)라고도 언급되는 중앙 집중화된 또는 공통 및 공유된 시퀀스 뮤텍스(804)(여기서, 임의의 경쟁 시도는 먼저 오는 것에 먼저 서비스하는 모델에서 서비스될 수 있다);
모든 공정들 사이에 공유된 시퀀스 상태를 유지하기 위해 스테이터스(Status)라고도 지칭되는 중앙 집중화된 또는 공통 및 공유된 시퀀스 스테이터스 컨텍스트(802)(여기서, 시퀀스는 그 시퀀스 상관 값에 의해 고유하게 식별된다. 이 스테이터스는 주어진 시퀀스에서 각 이벤트에 대해,
o 그 다음 입력 메시지가 전달을 위해 큐잉될 수 있는 것을 의미하는 "대기"상태; 및
o 그 다음 입력 메시지가 유지되는 것을 의미하는 "전달" 상태를 적용하는 거동을 또한 결정할 수 있게 한다.); 및
복수의 아웃바운드 핸들러에 의해 처리될 그 다음 메시지만이 이들 아웃바운드 핸들러에 액세스가능하도록 보장하고 다른 메시지는 이 오버플로우 저장소에서 "펜딩"하기 위해 오버플로우 또는 오버플로우 저장소 영역이라고도 지칭되는 중앙 집중화된 또는 공통 및 공유된 오버플로우 저장소(806)(여기서, 오버플로우 저장소는 현재 시퀀스 상태에 대해 전달되도록 준비가 되지 않은 색인된 및 정렬된 시퀀스 메시지를 위한 저장소이다.)를 포함한다.
컨텍스트 처리 정보인 이들 3개의 성분 스테이터스(802), 뮤텍스(804) 및 오버플로우 저장소(806)는 큐 저장소(850)와 동일한 특성이다. 이들 정보는,
- 모든 분산공정이 동일한 노드에서 실행되는 경우 메모리 데이터 또는 파일 기반 저장소에서 구현되거나, 또는
- 분산공정이 여러 노드에서 실행되고 서버 시스템이 원격 시스템인 경우 클라이언트-서버 저장소 데이터베이스(들)에서 구현될 수 있다.
저장소 층과 표준 메시지 저장소 사이에 최대 일치성은 고유한 거래를 공유하는 공통 RDBMS 엔진에서 모두 구현하는 것에 의해 획득될 수 있다.
본 발명의 방법, 장치 및 시스템에 따라,
시퀀스 저장소(800)의 오버플로우 저장소(806)는 복수의 인바운드 핸들러(810, 820, ..., 840)와 복수의 아웃바운드 핸들러(860, 870, ..., 890) 사이에 메시지를 시퀀싱으로 교환하는 것을 보장한다.
도 8a는 본 발명의 입력 메시지의 시퀀싱 공정을 도시한다:
이 인바운드 핸들러(810)는 시퀀스 "A"의 뮤텍스(804)를 록킹(812)하여 임의의 인바운드 핸들러 또는 아웃바운드 핸들러가 시퀀스 상관 값 "A"를 갖는 다른 메시지를 처리하지 못하게 한다;
이 인바운드 핸들러(810)는 시퀀스 "A"의 상태 컨텍스트(802)를 "처리" 상태로 설정(814)한다. 본 발명은 이전에 수신된 메시지의 랭킹에 1 증분한 랭킹과 같은 메시지 랭킹을 입력 메시지에 할당한다. 입력 메시지가 이 시퀀스에서 제일 앞에 있는 것이므로, 메시지에 할당된 메시지 랭킹은 1로 설정된다. 메시지 랭킹은 바람직하게는 시퀀스 저장소(800)에 저장되고, 보다 정확하게는 시퀀스 컨텍스트(802)에 저장된다. 인바운드 핸들러(810)는 바람직하게는 메시지(851)를 큐 저장소(850)에 저장(816)한다; 및
도 8b는 다른 입력 메시지가 시스템에 수신된 시퀀싱 공정의 그 다음 단계들을 도시한다:
이 인바운드 핸들러(820)는 시퀀스 "A"의 뮤텍스(804)를 록킹(822)하여 임의의 인바운드 핸들러(810, 830 또는 840) 또는 아웃바운드 핸들러가 시퀀스 "A" 내 다른 메시지를 처리하지 못하게 한다;
이 인바운드 핸들러(820)는 시퀀스 "A"의 중심 상태 컨텍스트(802)를 체크(824)하는데, 여기서 시퀀스 상태는 "처리" 상태이다. 메시지가 임의의 아웃바운드 핸들러에 이용가능하게 만들어질 수 없으므로, 인바운드 핸들러(820)는 메시지(807)를 오버플로우 저장소(806)에 저장(826)한다.
이전에 입력 메시지의 메시지 랭킹에 1 증분한 것에 대응하는 메시지 랭킹이 입력 메시지에 할당된다. 이전의 메시지의 메시지 랭킹이 1이었으므로, 입력 메시지에 할당된 메시지 랭킹은 2이다. 나아가, 본 발명은 이 시퀀스에서 처리될 그 다음 메시지의 랭킹을 한정하는 시퀀스 랭킹을 증분한다. 따라서, 동일한 시퀀스로부터 복수의 메시지가 시퀀스 저장소(800)에 저장된 경우, 그 메시지 랭킹을 통해 시스템은 큐 저장소(850)에 전달되어야 하는 올바른 메시지를 식별할 수 있다. 올바른 메시지는 시퀀스에 한정된 시퀀스 랭킹에 대응하는 메시지 랭킹을 가지는 메시지이다. 유리하게는, 이것은, 입력 메시지가 발송자에 의해 할당된 메시지 랭킹을 가질 때 및 입력 메시지의 랭킹이 인바운드 핸들러에 도착하는 순서에 따라 할당될 때 적용된다.
도 8c는 큐 저장소의 큐에 저장된 메시지가 처리를 위해 아웃바운드 핸들러들 중 하나에 큐잉 해제되는 시퀀싱 공정의 그 다음 단계들을 도시한다:
아웃바운드 핸들러(870)들 중 하나는 큐 저장소(850)로부터 시퀀스 "A"의 메시지(851)를 검색(871)한다. 본 발명으로 인해, 이 메시지는 자동적으로, 처리되어야 하는 시퀀스의 그 다음 메시지이다. 그리하여 그 랭킹은 처리된 마지막 메시지의 랭킹에 1증분을 한 것이다. 이 예시적인 실시예에서, 큐 저장소에 저장된 메시지는 시퀀스 A에서 제일 앞에 있는 것이므로, 그 랭킹은 필연적으로 "1"이다;
아웃바운드 핸들러(870)는 수신자로 더 전달하기 전에 랭킹 "1"을 갖는 메시지를 관련 수신자 또는 다른 라우팅 수단으로 전달(873)한다. 메시지가 단계(873)에서 송신되었다면, 아웃바운드 핸들러(870)는 다른 처리에 이용가능하다. 이 아웃바운드 핸들러는 수신자로부터 수신의 수신확인을 아직 수신하지 못하였으나 여전히 동작할 수 있다. 예를 들어, 아웃바운드 핸들러(870)는 다른 시퀀스에 속하는 다른 메시지를 검색하고 송신하여, 비동기식 전달을 달성하여 처리량을 개선시킬 수 있다. 또한 이 아웃바운드 핸들러는 임의의 메시지에 대해 임의의 발송자로부터 수신의 수신확인을 수신할 수 있다. 그리하여, 아웃바운드 핸들러가 실행할 수 있는 메시지 및 처리의 개수는 단계(873)에서 송신된 메시지의 발송자의 응답 시간에 의해 제한되지 않는다.
수신자는 아웃바운드 핸들러(870)의 전달 공정(8701)으로부터 단계(873)에서 송신된 메시지를 수신한다. 이에 응답하여, 수신자는 수신확인 메시지를 시스템으로 송신한다. 동일한 아웃바운드 핸들러(870)의 수신확인 공정(8702) 또는 다른 아웃바운드 핸들러(860)의 수신확인 공정(8602)은 수신확인 메시지를 수신한다. 이것은 도 8c에 도시된 단계(874)에 대응한다.
도 8d는 오버플로우 저장소 영역(806)에 저장된 그 다음 메시지가 처리를 위해 아웃바운드 핸들러들 중 하나에 전달되기 전에 큐 저장소(850)로 전달되는 시퀀싱 공정의 그 다음 단계들을 도시한다. 도 8d에 도시된 단계는 시스템의 인바운드 핸들러에서 수신확인 메시지를 수신(875)하는 것에 의해 트리거된다.
아웃바운드 핸들러(860)는 상태 컨텍스트(802)에서 시퀀스 랭킹을 체크(862)하여 수신확인된 메시지의 시퀀스 내에서 처리되어야 하는 그 다음 메시지의 랭킹을 결정한다. 시퀀스 랭킹은 "2"로 설정되므로, 아웃바운드 핸들러(860)는 오버플로우 저장소 영역(806)으로부터 메시지 랭킹 "2"를 가지는 시퀀스 "A"의 메시지(807)를 검색(809)한다. 이 메시지(807)는 큐 저장소(850)에 저장될 수 있고, 모든 아웃바운드 핸들러에 이용가능하게 만들어질 수 있다. 상태 컨텍스트(802)는 "처리" 상태에 유지된다. 시퀀스 랭킹은 증분되어 "3"으로 설정되고, 이에 의해 처리될 그 다음 메시지는 "3"과 같은 메시지 랭킹을 가지는 것임을 표시한다;
도 8a 내지 도 8d에서 전술된 공정은 입력 메시지가 시퀀스 내 메시지의 랭킹을 표시하는 시퀀스 색인과 함께 또는 이 시퀀스 색인 없이 수신되었는지에 상관없이 동일하다. 이 랭킹이 제공되는 경우, 이 랭킹은 시퀀싱 랭킹으로 사용되고; 그렇지 않은 경우 이 랭킹은 동일한 시퀀스에서 수신 순서에 기초하여 인바운드 핸들러에 의해 생성된다.
시퀀스 재-배열
입력 메시지가 엄격한 시퀀스 순서로 인바운드 핸들러에 의해 수신되는 도 8a 내지 도 8d에서 이전에 상술된 공정에 더하여, 시퀀스를 벗어나 수신된 메시지를 처리하기 위하여 동일한 공정이 또한 구현된다. 유일한 사실상의 전제 조건은, 메시지 발송자가 동일한 시퀀스 내 각 메시지에 대해 색인을 제공하고, 이 색인은 각 메시지에 대해 시퀀스 내 랭킹을 표시하는 것이다.
이전에 설명된 바와 같이, 본 발명은 이 시퀀스에서 처리될 그 다음 메시지의 랭킹을 한정하는 시퀀스 랭킹을 증분한다. 큐 저장소(850)가 주어진 시퀀스로부터 메시지를 수신할 수 있을 때, 시퀀스 랭킹이 체크된다. 시퀀스 랭킹과 같은 메시지 랭킹을 갖는 메시지만이 큐 저장소(850)로 전달된다. 시퀀스 랭킹과 같은 메시지 랭킹을 가지는 메시지가 시퀀스 저장소(800)의 오버플로우 영역(806)에 없다면, 이 시퀀스의 처리는, 올바른 랭킹을 갖는 메시지가 인바운드 핸들러로부터 수신될 때까지 보류된다. 따라서, 시퀀스 랭킹은 처리되어야 하는 메시지를 표시하는 카운터와 같이 동작한다. 바람직하게는, 시퀀스 랭킹은 시퀀스 저장소(800)에 저장된다.
도 8e는 시퀀스가 재-배열된 입력 메시지(801)의 시퀀싱 공정의 단계들을 도시한다:
복수의 인바운드 핸들러(810, ..., 840)에 의해 수행된 전술된 공정에 더하여, 색인 순서에 의해 구동되는 재-배열을 위해 추가적인 단계들이 발생할 수 있다:
메시지의 색인에 의해 표시된 메시지의 랭킹은 시퀀스 순서를 유지하기 위해 처리할 그 다음 메시지의 랭킹과 비교된다. 시퀀스 순서를 유지하기 위해 처리할 그 다음 메시지의 이 랭킹은 바람직하게는 시퀀스 저장소에서 증분적으로 업데이트된 시퀀스 랭킹에 의해 표시된다.
메시지의 랭킹이 시퀀스 랭킹과 일치(818)하면, 입력 메시지(815)는 큐 저장소(850)에 저장되어, 복수의 아웃바운드 핸들러에 이용가능하게 된다. 시퀀스 상태는 처리 상태로 설정된다. 처리할 시퀀스 랭킹은 증분되고 전술된 공정이 적용된다.
색인에 의해 표시된 메시지의 랭킹이 시퀀스 랭킹(819)을 넘는다면, 메시지(813)는 오버플로우 저장소(806)에 저장된다. 시퀀스 상태(802)는 "펜딩" 상태로 설정된다. 이 메시지는 사실상 처리되지 않는다. 처리될 예상된 메시지 랭킹을 갖는 메시지가 인바운드 핸들러에 의해 수신될 때 시퀀싱이 재개된다. 이 경우에 인바운드 핸들러가 대응하는 메시지를 큐 저장소에 저장하고 시퀀스 상태를 "처리" 상태로 설정한다.
도 8a 내지 도 8d에 도시된 공정에 대해, 아웃바운드 핸들러가 결국 메시지를 처리할 때, 이 아웃바운드 핸들러는, 오버플로우 저장소(806)에서 시퀀스 랭킹과 일치하는 메시지 랭킹을 갖는 메시지를 찾는다(시퀀스 랭킹은 시퀀스 순서를 유지하기 위해 처리될 그 다음 메시지의 랭킹을 표시한다). 메시지가 발견되면, 이 메시지는 큐 저장소(850)에 저장되고; 메시지가 발견되지 않으면, 시퀀스 상태는 (이 시퀀스에 있는 메시지가 오버플로우 영역에 존재하나, 시퀀스 랭킹과 같지 않은 랭킹을 가지는 경우) "펜딩" 상태로 설정되거나 또는 (이 시퀀스의 메시지가 오버플로우 저장소 영역에 있지 않는 경우) "대기 " 상태로 설정된다.
시퀀스 록킹 및 타임아웃 관리
전술된 바와 같이, 주어진 시퀀스에서 수신된 메시지는 그 메시지 랭킹이 처리될 것과 일치하지 않는 한, 오버플로우 저장소(806)에 저장된다. 이것으로, 처리될 그 다음 예상되는 메시지가 인바운드 핸들러에 의해 수신되지 않는 한, 전체 시퀀스가 록킹되는 상황이 된다.
특정 실시예에서, 본 발명은 설령 이것이 공정에 의해 요구된다 하더라도 이 록킹 상황이 시간적으로 제한되는 것을 보장한다. 이 공정은 또한 지속시간(초, 분, 일(day), ...)으로 표현된 전체 시퀀스 타임아웃 값을 한정한다.
다른 실시예에서, 시퀀스 컨텍스트(802)는 시퀀스 타임아웃으로 한정된 절대 시간값을 포함할 수 있다. 인바운드 핸들러 또는 아웃바운드 핸들러가 주어진 시퀀스 컨텍스트 레코드에 액세스(이는 시퀀스에 대한 동작 표시인 시퀀스에 속하는 메시지를 일정 방식으로 처리하고 있다는 것을 의미한다)할 때마다, 이 절대 시간 값은 현재 시스템 시간 및 시퀀스 타임아웃 지속시간의 합의 값으로 업데이트된다.
더 다른 실시예에서, 타임아웃 시퀀스 수집기(collector)는 시퀀스 컨텍스트의 전체 리스트를 규칙적으로 웨이크업하고 스캐닝하도록 구현될 수 있다. 이 특정 구현에서, 그 시퀀스 지속시간에 대해 만료된 시퀀스가 검출된다. 이 공정은 시퀀스 타임아웃 값을 사용하여 선택을 달성한다.
구현에 따라, 본 발명에 따른 방법, 장치 및 시스템은,
o 순서대로 항목을 취하는 것과 같이 동기화 없이 전달하거나 또는 발견될 때까지 기다리면서 항목(들)을 무시하는 것,
o 알람을 생성하는 것일 수 있다.
데이터를 처리할 때 본 발명을 많이 응용할 수 있다. 그러나, 특히 다음에 적절하다:
메시징 서버, 예를 들어, 아마데우스 메시징 서버(Amadeus Messaging Server: AMS), 여기서 애플리케이션이 지속하는 메시징을 처리하여, 회사 및 보다 구체적으로 소프트웨어 회사의 인프라스트럭처에서 허브로 작용하는 것. 부킹 또는 예약 산업에서, AMS는 예약 시스템 및 출발 제어 시스템 모두로 사용될 수 있다. 시퀀싱은 모든 텔레타이프 트래픽(Teletype traffic)에 시행된다. 텔레타이프 메시지는 통상 TTY로 언급된다. TTY 유형 B는 주어진 기능 컨텍스트에 대해 엄격한 처리 순서로 비동기식 채널을 통해 메시지를 교환하는 항공사 산업 표준이다. 예를 들어, 제1 메시지는 탑승 승객 리스트를 포함하고, 제2 리스트는 억제된 승객 리스트를 포함하고, 제3 리스트는 추가된 승객 리스트를 포함한다. 이들 승객 리스트는 엄격한 순서로 추종되어야 한다.
다른 애플리케이션 필드는 예를 들어 보장된 비동기식 전달을 구현하기 위해 다수의 애플리케이션에 의해 사용된 미들웨어 소프트웨어 성분인 OTF 하이 레벨 프레임워크(OTF high-level framework: OHF)이다. OHF로 시퀀싱하는 주요 사용은 쿠폰 데이터베이스(coupon database: CDB)와 전자 티켓팅 애플리케이션 사이에 발생하는 동기화이다. 종종 많은 변경이 제한된 시간 기간 내에 단일 쿠폰에 이루어질 수 있다. 이들 변경은 동기화를 유지하기 위하여 올바른 순서로 전자 티켓 애플리케이션 또는 쿠폰 데이터베이스로 전달되어야 한다.
전술된 상세한 설명은 기본적으로 항공사 또는 항공 회사에 의해 제공된 여행 솔루션의 컨텍스트에서 설명되었으나, 이 기술 분야에 통상의 지식을 가진 자라면 본 발명의 실시예는 항공사와만 사용하는 것으로 제한되지 않고, 다른 유형의 여행 양식 및 여행 제공자, 예를 들어, 비-제한적인 예로서, 선박, 열차, 승용차, 버스 여행 제공자 및 호텔과 같은 여행 제품에 사용되도록 적응될 수 있는 것을 이해할 수 있을 것이다.
전술된 상세한 설명은 예시적으로 비-제한적인 예로서 본 발명의 예시적인 실시예를 구현하기 위해 여러 방법, 장치 및 소프트웨어를 충분히 이해할 수 있는 설명을 제공하였다. 그러나, 첨부 도면 및 첨부된 청구범위와 함께 판독할 때 전술된 상세한 설명을 고려하면 여러 변형과 변경은 이 기술 분야에 통상의 지식을 가진 자에게는 명백할 것이다. 단지 일부 예로서, 다른 유사한 또는 균등한 공정 또는 알고리즘 및 데이터 표현을 사용하는 것이 이 기술 분야에 통상의 지식을 가진 자에 의해 시도될 수 있다. 나아가, 상이한 요소, 기능 및 알고리즘(예를 들어, , 등)에 사용되는 여러 이름은 단지 예시를 위한 것일 뿐 발명을 한정하는 의미로 의도된 것이 전혀 아니며, 이들 여러 요소, 기능 및 알고리즘은 임의의 적절한 이름으로 언급될 수 있다. 본 발명의 개시 내용에 대해 모든 이러한 변형과 유사한 변형은 본 발명의 실시예의 범위 내에 있는 것이다.
나아가, 본 발명의 예시적인 실시예의 특징 중 일부가 대응하는 다른 특징을 사용함이 없이 사용될 수 있다. 그리하여, 전술된 상세한 설명은 본 발명의 원리, 개시 내용 및 실시예를 단지 예시하는 것으로 이해되어야 하고 본 발명을 제한하는 것으로 이해해서는 안된다.
본 명세서에 설명된 여러 기술의 실시예는 디지털 전자 회로, 컴퓨터 하드웨어로 또는 핸드헬드 전자 디바이스 하드웨어로, 펌웨어, 소프트웨어 또는 이들의 조합으로 구현될 수 있다. 실시예는 프로그램 또는 소프트웨어 제품, 즉 정보 운반매체, 예를 들어, 기계-판독가능한 저장소 디바이스에 또는 데이터 처리 장치, 예를 들어, 프로그래밍가능한 프로세서, 컴퓨터, 태블릿 또는 다수의 컴퓨터에 의해 실행하거나 이의 동작을 제어하기 위해 전파되는 신호에 유형적으로 매립된 컴퓨터 프로그램 제품으로 구현될 수 있다. 전술된 컴퓨터 프로그램(들)과 같은 프로그램은 컴파일 언어 또는 인터프리트 언어를 포함하는 임의의 형태의 프로그래밍 언어로 기록될 수 있고, 컴퓨팅 환경에서 사용하기에 적절한 독립형 프로그램 또는 모듈, 성분, 서브 루틴 또는 다른 유닛을 포함하는 임의의 형태로 전개될 수 있다. 프로그램은 하나의 컴퓨터 또는 태블릿 상에서 또는 하나의 사이트에서 또는 다수의 사이트에 걸쳐 분배되고 통신 네트워크 또는 무선 네트워크에 의해 상호 연결된 다수의 컴퓨터 또는 태블릿에서 실행되도록 전개될 수 있다.
컴퓨터 프로그램을 실행하기에 적절한 프로세서는, 예로서, 일반 목적 및 특수 목적 마이크로프로세서, 및 임의의 종류의 디지털 컴퓨터, 태블릿 또는 전자 디바이스의 임의의 하나 이상의 프로세서를 포함한다. 일반적으로, 프로세서는 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 이들 둘 모두로부터 명령 및 데이터를 수신할 수 있다. 컴퓨터의 요소는 명령을 실행하는 적어도 하나의 프로세서 및 명령 및 데이터를 저장하는 하나 이상의 메모리 디바이스를 포함할 수 있다. 일반적으로, 컴퓨터 또는 전자 디바이스는 데이터를 저장하는 하나 이상의 대용량 저장소 디바이스, 예를 들어, 자기 디스크, 광자기 디스크 또는 광 디스크를 포함하거나 이들로부터 데이터를 수신하거나 이들로 데이터를 전송하거나 이들 둘 모두를 수행하도록 동작가능하게 연결될 수 있다.
본 실시예는, 백엔드 성분(back-end component)을, 예를 들어, 데이터 서버로 포함하거나, 또는 미들웨어 성분, 예를 들어, 애플리케이션 서버를 포함하거나, 또는 프론트엔드 성분(front-end component), 예를 들어, 유저가 구현과 상호작용할 수 있는 그래픽 유저 인터페이스 또는 웹 브라우저를 구비하는 클라이언트 컴퓨터, 또는 이러한 백엔드, 미들웨어, 또는 프론트엔드 성분의 임의의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 성분들은 임의의 형태 또는 매체의 디지털 데이터 통신, 예를 들어, 통신 네트워크, 무선 네트워크 또는 원격통신 네트워크에 의해 상호 연결될 수 있다. 통신 또는 원격통신 네트워크의 예로는 근거리 네트워크(local area network: LAN) 및 광역 네트워크(wide area network: WAN), 예를 들어, 인터넷 또는 무선 네트워크, 예를 들어, Wifi 네트워크를 포함한다.
설명된 구현의 특정 특징들이 본 명세서에서 예시되었으나, 이제 많은 변형, 대체, 변경, 균등 치환이 이 기술 분야에 통상의 지식을 가진 자에게 일어날 수 있다. 그리하여 첨부된 청구범위는 본 발명의 실시예의 진정한 사상과 범위 내에 있는 모든 변형과 변경을 포함하는 것으로 의도되는 것으로 이해된다.
Claims (28)
- 복수의 인바운드 핸들러(inbound handler) 및 복수의 아웃바운드 핸들러(outbound handler)를 갖는 분산 시스템에서 비동기 메시지를 시퀀싱(sequencing)하는 방법에 있어서,
상기 인바운드 핸들러 중의 하나의 인바운드 핸들러의 프로세서에 의해, 시퀀스 상관 값 - 상기 시퀀스 상관 값은 입력 메시지(incoming message)와 연관된 시퀀스를 식별함 - 을 갖는 입력 메시지를 수신하는 단계;
상기 프로세서에 의해, 시퀀스 저장소에서 상기 시퀀스의 시퀀스 상태를 체크하는 단계;
상기 프로세서에 의해, 상기 시퀀스에서 상기 입력 메시지의 순서를 표시하는 메시지 랭킹(rank)을 결정하는 단계:
상기 프로세서에 의해, 상기 메시지 랭킹을, 상기 시퀀스에 대해 처리될 다음 메시지의 랭킹을 정의하는 시퀀스 랭킹과 비교하는 단계;
상기 메시지 랭킹이 상기 시퀀스 랭킹과 같은 경우, 상기 프로세서에 의해, 상기 메시지는 상기 시퀀스에서 상기 메시지의 순서를 유지하기 위해 처리될 다음 메시지인 것으로 결정하는 단계;
상기 메시지 랭킹이 상기 시퀀스 랭킹과 같지 않은 경우, 상기 프로세서에 의해, 상기 메시지는 상기 시퀀스에서 상기 메시지의 순서를 유지하기 위해 처리될 다음 메시지가 아닌 것으로 결정하는 단계;
상기 시퀀스 상태가, 상기 아웃바운드 핸들러가 상기 시퀀스의 메시지 중의 하나를 현재 처리하고 있지 않다고 표시하는 경우, 및 상기 입력 메시지가 상기 시퀀스에 대해 처리될 다음 메시지인 것으로 결정되는 경우, 상기 프로세서에 의해, 상기 입력 메시지를 큐 저장소에 전달하고, 그 후에 처리를 위해 이용가능하게 되는 상기 아웃바운드 핸들러 중의 하나에 상기 입력 메시지를 전달하는 단계; 및
상기 시퀀스 상태가, 상기 복수의 아웃바운드 핸들러에서 아웃바운드 핸들러 중의 적어도 하나가 상기 시퀀스의 메시지 중의 하나를 현재 처리하고 있다고 표시하는 경우, 또는 상기 큐 저장소가 처리되기를 기다리는 상기 시퀀스의 메시지 중의 하나를 이미 포함하는 경우, 또는 상기 입력 메시지가 상기 시퀀스에 대해 처리될 다음 메시지가 아닌 것으로 결정되는 경우, 상기 프로세서에 의해, 추가 처리를 위해 유지하도록 상기 입력 메시지를 오버플로우 저장소의 메모리에 저장하는 단계
를 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 시퀀스의 메시지 중의 하나의 처리를 완료하면, 상기 프로세서에 의해, 상기 시퀀스의 시퀀스 랭킹을 증분시키는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제2항에 있어서,
상기 프로세서에 의해, 상기 오버플로우 저장소 내의 주어진 메시지가 상기 증분된 시퀀스 랭킹과 같은 메시지 랭킹을 포함한다고 결정하는 단계; 및
상기 프로세서에 의해, 상기 주어진 메시지를 상기 큐 저장소에 전달하는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 프로세서에 의해, 상기 입력 메시지에 할당된(assigned) 메시지 랭킹 - 상기 할당된 메시지 랭킹은 상기 시퀀스에서 상기 입력 메시지의 랭킹을 표시함 - 을 할당하는 단계; 및
상기 프로세서에 의해, 상기 시퀀스 저장소에 상기 할당된 메시지 랭킹을 저장하는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제4항에 있어서,
상기 할당된 메시지 랭킹은, 상기 시퀀스에 대해 상기 인바운드 핸들러 중의 임의의 하나에서 수신된 마지막 메시지의 메시지 랭킹에 1 증가한 랭킹에 대응하는 것인, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 큐 저장소가 상기 입력 메시지의 시퀀스에 대해 어떠한 메시지도 포함하지 않는 경우 및 상기 입력 메시지의 메시지 랭킹이 상기 시퀀스 저장소에서 표시된 시퀀스 랭킹보다 더 큰 경우, 상기 프로세서에 의해, 상기 시퀀스 랭킹이 상기 입력 메시지의 메시지 랭킹과 같아질 때까지, 상기 오버플로우 저장소에 상기 입력 메시지를 저장하는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 프로세서에 의해, 상기 입력 메시지와 함께 색인(index)을 수신하는 단계를 더 포함하고,
상기 색인은 상기 시퀀스 내에서 상기 입력 메시지의 메시지 랭킹을 표시하는 것인, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 아웃바운드 핸들러 중의 하나에 의해 상기 메시지 중의 하나를 처리하는 단계; 및
상기 큐 저장소로부터 상기 메시지를 제거하는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 아웃바운드 핸들러는 비동기식으로 동작함으로써, 상기 아웃바운드 핸들러 중의 하나가 상기 메시지 중의 하나를 송신할 수 있고, 상기 메시지를 송신하고 나서 상기 메시지의 수신자로부터 응답의 수신확인을 수신하기 전에, 다른 처리에 이용가능하게 될 수 있는 것인, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 프로세서에 의해, 상기 아웃바운드 핸들러 중의 하나와 연관된 전달 프로세스(delivery process) - 상기 전달 프로세스는 상기 메시지 중의 하나를 수신자에게 송신하도록 구성됨 - 를 제공하는 단계;
상기 프로세서에 의해, 상기 아웃바운드 핸들러와 연관된 수신확인 프로세스(acknowledgment process) - 상기 수신확인 프로세스는 상기 수신자로부터 수신확인을 수신하도록 구성됨 - 를 제공하는 단계; 및
상기 전달 프로세스와 상기 수신확인 프로세스를 독립적으로 동작하도록 구성하는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 입력 메시지를 수신하는 것에 응답하여, 상기 프로세서에 의해, 상기 입력 메시지가 상기 시퀀스 저장소 및 상기 큐 저장소 중의 하나에 저장될 때까지, 상기 인바운드 핸들러가 상기 시퀀스와 연관된 어떠한 메시지도 수신하지 못하게 하는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제11항에 있어서,
상기 프로세서에 의해, 상기 시퀀스 저장소에 뮤텍스(mutex) - 상기 뮤텍스는 상기 시퀀스와 연관됨 - 를 저장하는 단계; 및
상기 프로세서에 의해, 상기 인바운드 핸들러가 상기 시퀀스와 연관된 어떠한 메시지도 수신하게 못하게 하도록 상기 뮤텍스를 록킹(locking)하는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 프로세서에 의해, 상기 큐 저장소 내의 메시지 중의 하나가 처리에 이용가능하다고 결정하는 단계;
상기 프로세서에 의해, 상기 큐 저장소로부터 상기 메시지를 검색하는 단계; 및
상기 프로세서에 의해, 상기 아웃바운드 핸들러 중의 하나로 상기 메시지를 처리하는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 프로세서에 의해, 상기 시퀀스 저장소에 뮤텍스 - 상기 뮤텍스는 상기 시퀀스와 연관됨 - 를 저장하는 단계; 및
상기 프로세서에 의해, 상기 입력 메시지가 상기 아웃바운드 핸들러 중의 하나에 의해 처리되는 동안 다른 아웃바운드 핸들러가 상기 시퀀스와 연관된 어떠한 메시지도 처리하지 못하게 하도록 상기 뮤텍스를 록킹하는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제14항에 있어서,
상기 프로세서에 의해, 상기 입력 메시지의 시퀀스에 대해 상기 뮤텍스가 록킹되어 있는지 여부를 결정하도록 상기 큐 저장소를 체크하는 단계; 및
상기 뮤텍스가 록킹되지 않은 경우 상기 큐 저장소로부터 상기 입력 메시지를 검색하는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 시퀀스 저장소 또는 상기 오버플로우 저장소 중의 하나에 상기 입력 메시지의 저장시, 상기 프로세서에 의해, 상기 인바운드 핸들러 중의 하나로부터 수신확인 메시지를 송신하는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 시퀀스 랭킹보다 더 큰 메시지 랭킹을 갖는 상기 메시지 중의 하나는, 상기 메시지의 메시지 랭킹이 상기 시퀀스 랭킹과 같지 않은 동안 상기 오버플로우 저장소에 상기 메시지를 록킹하도록, 상기 오버플로우 저장소에 저장되는 것인, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 제1항에 있어서,
상기 프로세서에 의해, 상기 오버플로우 저장소에 상기 메시지 중의 하나 - 상기 메시지의 메시지 랭킹은 상기 시퀀스 랭킹보다 큼 - 를 저장하는 단계;
상기 프로세서에 의해, 상기 메시지 및 상기 시퀀스 중의 하나에 타임아웃 값을 할당하는 단계; 및
상기 타임아웃 값에 도달할 때, 상기 프로세서에 의해, 상기 오버플로우 저장소로부터 상기 메시지를 폐기하는 단계를 더 포함하는, 분산 시스템에서 비동기 메시지를 시퀀싱하는 방법. - 소프트웨어 프로그램 명령어들을 포함하는 비일시적인 컴퓨터 판독가능한 매체에 있어서, 적어도 하나의 데이터 프로세서에 의해 상기 소프트웨어 프로그램 명령어들을 실행하여 제1항에 따른 방법의 실행을 포함하는 동작을 수행하게 하는 것인 비일시적인 컴퓨터 판독가능한 매체.
- 비동기 메시지를 시퀀싱하는 분산 처리 시스템에 있어서,
적어도 하나의 데이터 프로세서를 포함하는 복수의 인바운드 핸들러 - 상기 복수의 인바운드 핸들러 각각은 다양한 시퀀스에 관한 복수의 입력 메시지를 독립적으로 수신하도록 구성됨 - ;
적어도 하나의 데이터 프로세서를 포함하는 복수의 아웃바운드 핸들러 - 상기 복수의 아웃바운드 핸들러 각각은 복수의 입력 메시지를 독립적으로 처리하고 전달하도록 구성됨 - ; 및
적어도 메모리를 포함하는 저장소 층을 포함하고, 상기 저장소 층은,
상기 복수의 아웃바운드 핸들러로 전송될 준비가 된 입력 메시지를 저장하는 큐 저장소와,
시퀀스 저장소를 포함하고,
상기 시퀀스 저장소는,
상기 입력 메시지의 각 시퀀스에 대한 상태를 유지하고 업데이트하는 시퀀스 상태 컨텍스트와,
상기 인바운드 핸들러로부터 메시지를 수신하고 상기 메시지를 상기 큐 저장소로 순차적으로 전달하도록 구성된 오버플로우 저장소를 포함하고,
상기 시스템은, 입력 메시지가 그의 시퀀스에서 메시지의 순서를 유지하기 위해 처리될 다음 메시지인지 여부를 결정하고, 적어도 하나의 데이터 프로세서로 수행되는 다음 단계들, 즉:
상기 시퀀스 상태가, 상기 아웃바운드 핸들러가 상기 시퀀스의 메시지 중의 하나를 현재 처리하고 있지 않다고 표시하는 경우, 및 상기 입력 메시지가 상기 시퀀스에 대해 처리될 다음 메시지인 것으로 결정되는 경우, 상기 프로세서에 의해, 상기 입력 메시지를 상기 큐 저장소에 전달하고, 그 후에 처리를 위해 이용가능하게 되는 상기 아웃바운드 핸들러 중의 하나에 상기 입력 메시지를 전달하는 단계; 및
상기 시퀀스 상태가, 상기 복수의 아웃바운드 핸들러에서 아웃바운드 핸들러 중의 적어도 하나가 상기 시퀀스의 메시지 중의 하나를 현재 처리하고 있다고 표시하는 경우, 또는 상기 큐 저장소가 처리되기를 기다리는 상기 시퀀스의 메시지 중의 하나를 이미 포함하는 경우, 또는 상기 입력 메시지가 상기 시퀀스에 대해 처리될 다음 메시지가 아닌 것으로 결정되는 경우, 상기 프로세서에 의해, 추가 처리를 위해 유지하도록 상기 입력 메시지를 오버플로우 저장소의 메모리에 저장하는 단계
를 수행하도록 구성되는 것인, 비동기 메시지를 시퀀싱하는 분산 처리 시스템. - 제20항에 있어서,
상기 저장소 층의 큐 저장소 및 시퀀스 저장소는, 인-메모리 데이터 또는 파일 기반 저장소 중의 하나에 구현되는 것인, 비동기 메시지를 시퀀싱하는 분산 처리 시스템. - 복수의 인바운드 핸들러 및 복수의 아웃바운드 핸들러를 갖는 적어도 하나의 서버 애플리케이션과 적어도 하나의 클라이언트 애플리케이션 사이에서 복수의 메시지를 처리하기 위해 컴퓨터로 구현되는 여행 모니터링 방법에 있어서,
상기 인바운드 핸들러 중의 하나의 인바운드 핸들러의 프로세서에 의해, 시퀀스 상관 값 - 상기 시퀀스 상관 값은 입력 메시지와 연관된 시퀀스를 식별함 - 을 갖는 입력 메시지를 수신하는 단계;
상기 프로세서에 의해, 시퀀스 저장소에서 상기 시퀀스의 시퀀스 상태를 체크하는 단계;
상기 프로세서에 의해, 상기 입력 메시지가 상기 시퀀스에서 메시지의 순서를 유지하기 위해 처리될 다음 메시지인지 여부를 결정하는 단계;
상기 시퀀스 상태가, 상기 아웃바운드 핸들러가 상기 시퀀스의 메시지 중의 하나를 현재 처리하고 있지 않다고 표시하는 경우, 및 상기 입력 메시지가 상기 시퀀스에 대해 처리될 다음 메시지인 것으로 결정되는 경우, 상기 프로세서에 의해, 상기 입력 메시지를 큐 저장소에 전달하고, 그 후에 처리를 위해 이용가능하게 되는 상기 아웃바운드 핸들러 중의 하나에 상기 입력 메시지를 전달하는 단계; 및
상기 시퀀스 상태가, 상기 복수의 아웃바운드 핸들러에서 아웃바운드 핸들러 중의 적어도 하나가 상기 시퀀스의 메시지 중의 하나를 현재 처리하고 있다고 표시하는 경우, 또는 상기 큐 저장소가 처리되기를 기다리는 상기 시퀀스의 메시지 중의 하나를 이미 포함하는 경우, 또는 상기 입력 메시지가 상기 시퀀스에 대해 처리될 다음 메시지가 아닌 것으로 결정되는 경우, 상기 프로세서에 의해, 추가 처리를 위해 유지하도록 상기 입력 메시지를 오버플로우 저장소의 메모리에 저장하는 단계를 포함하고,
상기 복수의 메시지는 수송 서비스(transportation service)의 적어도 하나의 승객과 관련된 데이터를 포함하고, 상기 시퀀스 상관 값은 상기 수송 서비스에 관련된 데이터를 포함하는 것인, 컴퓨터로 구현되는 여행 모니터링 방법. - 제22항에 있어서,
상기 복수의 메시지에서 특정 메시지를 처리하는 것에 응답하여, 상기 프로세서에 의해, 상기 특정 메시지를 상기 아웃바운드 핸들러 중의 하나로부터, 수송 서비스의 여행 예약 시스템, 수송 서비스의 여행 부킹 시스템, 수송 서비스의 재고 시스템, 수송 서비스의 전자 티켓 시스템, 수송 서비스의 출발 제어 시스템, 또는 이들의 조합에 전달하는 단계를 더 포함하는, 컴퓨터로 구현되는 여행 모니터링 방법. - 제22항에 있어서,
상기 수송 서비스에 관련된 데이터는, 항공편 번호, 날짜, 클래스(class) 예약, 또는 이들의 조합을 포함하는 것인, 컴퓨터로 구현되는 여행 모니터링 방법. - 제22항에 있어서,
상기 복수의 메시지는, 적어도 하나의 탑승 승객, 적어도 하나의 취소된 승객, 적어도 하나의 추가된 승객, 또는 이들의 임의의 조합과 관련된 데이터를 포함하는 것인, 컴퓨터로 구현되는 여행 모니터링 방법. - 제22항에 있어서,
상기 프로세서에 의해, 상기 복수의 메시지에서 특정 메시지에 대한 시퀀스 타임아웃 값을 제공하는 단계;
상기 프로세서에 의해, 상기 특정 메시지에 대한 연관된 시퀀스 타임아웃 값에 도달할 때, 상기 오버플로우 저장소로부터 상기 특정 메시지를 제거하는 단계; 및
상기 프로세서에 의해, 항공편의 출발 시간, 항공편 오퍼의 만료, 프로모션 만료, 또는 이들의 임의의 조합으로부터 상기 시퀀스 타임아웃 값에서 경과된 시간을 시작하는 단계를 더 포함하는, 컴퓨터로 구현되는 여행 모니터링 방법. - 소프트웨어 프로그램 명령어들을 포함하는 컴퓨터 판독가능한 매체에 있어서, 적어도 하나의 데이터 프로세서에 의해 상기 소프트웨어 프로그램 명령어들을 실행하여 제22항에 따른 방법의 실행을 포함하는 동작을 수행하게 하는 것인 컴퓨터 판독가능한 매체.
- 메시지를 처리하도록 적어도 하나의 프로세서를 포함하는 복수의 인바운드 핸들러 및 복수의 아웃바운드 핸들러를 갖는 분산 시스템에서 분산된 비동기 메시지를 시퀀싱하는 컴퓨터 구현 방법에 있어서,
상기 인바운드 핸들러 중의 하나에서, 프로세서에 의해, 입력 메시지를 포함하는 시퀀스를 식별하는 시퀀스 상관 값과 함께 입력 메시지를 수신하고, 상기 시퀀스에서 상기 입력 메시지의 순서를 표시하는 메시지 랭킹을 결정하는 단계;
상기 프로세서에 의해, 시퀀스 저장소에서 상기 시퀀스의 시퀀스 상태를 체크하는 단계;
상기 시퀀스 상태가, 상기 아웃바운드 핸들러가 상기 시퀀스의 메시지 중의 하나를 현재 처리하고 있지 않다고 표시하는 경우, 및 수신된 상기 입력 메시지가 상기 시퀀스 내에 메시지 랭킹을 표시하는 어떠한 색인도 구비하지 않고 상기 시퀀스 저장소가 상기 시퀀스에 대해 처리될 어떠한 메시지도 아직 포함하지 않는 경우, 또는 수신된 상기 입력 메시지가 상기 시퀀스 내에 메시지 랭킹 - 상기 메시지 랭킹은 상기 시퀀스 저장소에 표시된 시퀀스 랭킹과 같고 상기 시퀀스에 대해 처리될 다음 메시지의 랭킹을 정의함 - 을 표시하는 색인을 구비하는 경우, 상기 프로세서에 의해, 상기 프로세서에 의해, 상기 입력 메시지를 큐 저장소에 전달하고, 그 후에 처리를 위해 이용가능하게 되는 상기 아웃바운드 핸들러 중의 하나에 상기 입력 메시지를 전달하는 단계; 및
상기 시퀀스 상태가, 상기 복수의 아웃바운드 핸들러에서 아웃바운드 핸들러 중의 적어도 하나가 상기 시퀀스의 메시지 중의 하나를 현재 처리하고 있다고 표시하는 경우, 또는 상기 큐 저장소가 상기 시퀀스에 대해 처리될 상기 메시지 중의 하나를 이미 포함하는 경우, 또는 수신된 상기 입력 메시지가 상기 시퀀스 내에 메시지 랭킹 - 상기 메시지 랭킹은 상기 시퀀스 저장소에 표시된 시퀀스 랭킹보다 크고 상기 시퀀스에 대해 처리될 다음 메시지의 랭킹을 정의함 - 을 표시하는 색인을 구비하는 경우, 상기 프로세서에 의해, 추가 처리를 위해 유지하도록 상기 입력 메시지를 오버플로우 저장소에 저장하는 단계를 포함하는, 분산된 비동기 메시지를 시퀀싱하는 컴퓨터 구현 방법.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP12368017.5A EP2693337B1 (en) | 2012-08-02 | 2012-08-02 | Method, system and computer program products for sequencing asynchronous messages in a distributed and parallel environment |
EP12368017.5 | 2012-08-02 | ||
US13/565,284 | 2012-08-02 | ||
US13/565,284 US8903767B2 (en) | 2012-08-02 | 2012-08-02 | Method, system and computer program product for sequencing asynchronous messages in a distributed and parallel environment |
PCT/EP2013/002302 WO2014019701A1 (en) | 2012-08-02 | 2013-08-01 | Method, system and computer program product for sequencing asynchronous messages in a distributed and parallel environment |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150037980A KR20150037980A (ko) | 2015-04-08 |
KR101612682B1 true KR101612682B1 (ko) | 2016-04-14 |
Family
ID=48953356
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157002898A KR101612682B1 (ko) | 2012-08-02 | 2013-08-01 | 분산 및 병렬 환경에서 비동기 메시지를 시퀀싱하는 방법, 시스템 및 컴퓨터 프로그램 제품 |
Country Status (5)
Country | Link |
---|---|
JP (1) | JP6198825B2 (ko) |
KR (1) | KR101612682B1 (ko) |
CN (1) | CN104428754B (ko) |
IN (1) | IN2014DN10080A (ko) |
WO (1) | WO2014019701A1 (ko) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107093138B (zh) * | 2017-04-21 | 2019-04-30 | 山东佳联电子商务有限公司 | 基于分布式无阻塞异步消息处理模式的拍卖竞价***及其运行方法 |
EP3513292B1 (en) * | 2017-06-08 | 2021-10-20 | Amadeus S.A.S. | Multi-standard message processing |
EP3419250B1 (en) * | 2017-06-23 | 2020-03-04 | Vestel Elektronik Sanayi ve Ticaret A.S. | Methods and apparatus for distributing publish-subscribe messages |
CN110865891B (zh) * | 2019-09-29 | 2024-04-12 | 深圳市华力特电气有限公司 | 一种异步消息编排方法和装置 |
CN111045839A (zh) * | 2019-12-04 | 2020-04-21 | 中国建设银行股份有限公司 | 分布式环境下基于两阶段事务消息的顺序调用方法及装置 |
CN111506430B (zh) * | 2020-04-23 | 2024-04-19 | 上海数禾信息科技有限公司 | 多任务下数据处理的方法、装置及电子设备 |
CN111562888B (zh) * | 2020-05-14 | 2023-06-23 | 上海兆芯集成电路有限公司 | 存储器自更新的调度方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5588117A (en) * | 1994-05-23 | 1996-12-24 | Hewlett-Packard Company | Sender-selective send/receive order processing on a per message basis |
US20070192306A1 (en) * | 2004-08-27 | 2007-08-16 | Yannis Papakonstantinou | Searching digital information and databases |
US20080127209A1 (en) * | 2006-07-01 | 2008-05-29 | Gale Martin J | Method, Apparatus and Computer Program Product for Managing Persistence in a Messaging Network |
EP2254046B1 (en) * | 2009-05-18 | 2014-07-30 | Amadeus S.A.S. | A method and system for managing the order of messages |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09101901A (ja) * | 1995-10-06 | 1997-04-15 | N T T Data Tsushin Kk | マルチプロセスで動作するパーソナルコンピュータ上で行われるプロセス間のメッセージ通信方式及びメッセージ通信方法 |
US20030182464A1 (en) * | 2002-02-15 | 2003-09-25 | Hamilton Thomas E. | Management of message queues |
JPWO2008105099A1 (ja) * | 2007-02-28 | 2010-06-03 | 富士通株式会社 | アプリケーション連携制御プログラム、アプリケーション連携制御方法およびアプリケーション連携制御装置 |
US8392925B2 (en) * | 2009-03-26 | 2013-03-05 | Apple Inc. | Synchronization mechanisms based on counters |
US8495656B2 (en) * | 2010-10-15 | 2013-07-23 | Attivio, Inc. | Ordered processing of groups of messages |
-
2013
- 2013-08-01 JP JP2015524671A patent/JP6198825B2/ja active Active
- 2013-08-01 WO PCT/EP2013/002302 patent/WO2014019701A1/en active Application Filing
- 2013-08-01 CN CN201380036210.XA patent/CN104428754B/zh active Active
- 2013-08-01 IN IN10080DEN2014 patent/IN2014DN10080A/en unknown
- 2013-08-01 KR KR1020157002898A patent/KR101612682B1/ko active IP Right Grant
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5588117A (en) * | 1994-05-23 | 1996-12-24 | Hewlett-Packard Company | Sender-selective send/receive order processing on a per message basis |
US20070192306A1 (en) * | 2004-08-27 | 2007-08-16 | Yannis Papakonstantinou | Searching digital information and databases |
US20080127209A1 (en) * | 2006-07-01 | 2008-05-29 | Gale Martin J | Method, Apparatus and Computer Program Product for Managing Persistence in a Messaging Network |
EP2254046B1 (en) * | 2009-05-18 | 2014-07-30 | Amadeus S.A.S. | A method and system for managing the order of messages |
Also Published As
Publication number | Publication date |
---|---|
IN2014DN10080A (ko) | 2015-08-21 |
JP2015527658A (ja) | 2015-09-17 |
JP6198825B2 (ja) | 2017-09-20 |
WO2014019701A1 (en) | 2014-02-06 |
KR20150037980A (ko) | 2015-04-08 |
CN104428754A (zh) | 2015-03-18 |
CN104428754B (zh) | 2018-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101612682B1 (ko) | 분산 및 병렬 환경에서 비동기 메시지를 시퀀싱하는 방법, 시스템 및 컴퓨터 프로그램 제품 | |
US9888048B1 (en) | Supporting millions of parallel light weight data streams in a distributed system | |
US8489693B2 (en) | System and method for context-based serialization of messages in a parallel execution environment | |
US8578218B2 (en) | Method and system for implementing a scalable, high-performance, fault-tolerant locking mechanism in a multi-process environment | |
US8428076B2 (en) | System and method for priority scheduling of plurality of message types with serialization constraints and dynamic class switching | |
US9448861B2 (en) | Concurrent processing of multiple received messages while releasing such messages in an original message order with abort policy roll back | |
US20130067015A1 (en) | Counting and reseting broadcast system badge counters | |
US8984530B2 (en) | Queued message dispatch | |
US20100293235A1 (en) | Method and system for managing the order of messages | |
CN111104235A (zh) | 一种基于队列的业务请求异步处理方法及装置 | |
JP2019514132A (ja) | 仮想物品を割り当てる方法、システム及びサーバ | |
CN109144683A (zh) | 任务处理方法、装置、***及电子设备 | |
US20080196039A1 (en) | Method, Apparatus and Software for Managing a Transactional Message Queue | |
EP2693337B1 (en) | Method, system and computer program products for sequencing asynchronous messages in a distributed and parallel environment | |
US8903767B2 (en) | Method, system and computer program product for sequencing asynchronous messages in a distributed and parallel environment | |
US9124448B2 (en) | Method and system for implementing a best efforts resequencer | |
CN116382943A (zh) | 顺序消息处理方法、总线***、计算机设备及存储介质 | |
CN116304390A (zh) | 时序数据处理方法、装置、存储介质及电子设备 | |
KR20140063688A (ko) | 이벤트 데이터 획득을 위한 스케일 아웃 시스템 | |
CN113157465B (zh) | 基于指针链表的消息发送方法及装置 | |
CN116633875B (zh) | 一种多业务耦合并发通信的时间保序调度方法 | |
KR101499890B1 (ko) | Low Latency 프레임워크 시스템 | |
CN107819823A (zh) | 一种信息处理方法、服务器及计算机可读存储介质 | |
US8589605B2 (en) | Inbound message rate limit based on maximum queue times | |
AU2018280855B2 (en) | Multi-standard message processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
A302 | Request for accelerated examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20190326 Year of fee payment: 4 |