KR20140072044A - 다중-소스 푸시 통지를 다수의 타겟들로의 분배 기법 - Google Patents

다중-소스 푸시 통지를 다수의 타겟들로의 분배 기법 Download PDF

Info

Publication number
KR20140072044A
KR20140072044A KR1020147006535A KR20147006535A KR20140072044A KR 20140072044 A KR20140072044 A KR 20140072044A KR 1020147006535 A KR1020147006535 A KR 1020147006535A KR 20147006535 A KR20147006535 A KR 20147006535A KR 20140072044 A KR20140072044 A KR 20140072044A
Authority
KR
South Korea
Prior art keywords
event
data
target
source
events
Prior art date
Application number
KR1020147006535A
Other languages
English (en)
Inventor
클레멘스 프리드리히 바스터스
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20140072044A publication Critical patent/KR20140072044A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/10Office automation; Time management
    • G06Q10/107Computer-aided management of electronic mailing [e-mailing]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q30/00Commerce
    • G06Q30/02Marketing; Price estimation or determination; Fundraising

Landscapes

  • Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Strategic Management (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Human Resources & Organizations (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Finance (AREA)
  • Economics (AREA)
  • Marketing (AREA)
  • Development Economics (AREA)
  • Accounting & Taxation (AREA)
  • General Business, Economics & Management (AREA)
  • Quality & Reliability (AREA)
  • Multimedia (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Tourism & Hospitality (AREA)
  • Operations Research (AREA)
  • Data Mining & Analysis (AREA)
  • Game Theory and Decision Science (AREA)
  • Information Transfer Between Computers (AREA)
  • Computer And Data Communications (AREA)

Abstract

이벤트를 소비자에게 전달하는 방법이 개시된다. 상기 방법은 자산 데이터를 액세스하는 단계를 포함한다. 상기 방법은 정규화된 이벤트를 생성하기 위해 자산 데이터를 정규화하는 단계를 더 포함한다. 이벤트를 수신해야 하는 복수의 최종 소비자들은 가입에 기초하여 결정된다. 정규화된 이벤트로부터의 데이터는 결정된 최종 소비자 모두에 대해 적절한 복수의 상이한 포맷들로 포맷팅된다. 정규화된 이벤트로부터의 데이터는 최종 소비자에 대해 적절한 포맷으로 복수의 최종 소비자들 각각에게 전달된다.

Description

다중-소스 푸시 통지를 다수의 타겟들로의 분배 기법{DISTRIBUTING MULTI-SOURCE PUSH NOTIFICATIONS TO MULTIPLE TARGETS}
컴퓨터 및 컴퓨팅 시스템은 현대 생활의 거의 모든 국면에 영향을 주고 있다. 컴퓨터는 일반적으로 작업, 레크리에이션, 건강 관리, 운송, 엔터테인먼트, 가정 관리 등에 관련된다.
또한, 컴퓨팅 시스템 기능은 컴퓨팅 시스템 능력이 네트워크 접속을 통해 다른 컴퓨팅 시스템에 상호 접속됨으로써 개선될 수 있다. 네트워크 접속은 유선 또는 무선 이더넷을 통합 접속, 셀룰러 접속, 또는 심지어 직렬, 병렬, USB를 통한 컴퓨터 대 컴퓨터 접속, 또는 다른 접속을 포함할 수 있지만, 이에 국한되지 않는다. 접속은 컴퓨팅 시스템이 다른 컴퓨팅 시스템에서 서비스를 액세스하고 다른 컴퓨팅 시스템으로부터 애플리케이션 데이터를 빠르고 효율적으로 수신하도록 허용한다.
개발자는, 일반적인-관심 뉴스, 세계적인 행상에 대한 정보 및 사실, 또는 축구, 풋볼, 하키 또는 야구 리그 또는 팀의 스포츠 팬을 위한 정보 및 사실을 최신으로 유지하기 위해 이들을 전달하는 것에 초점을 맞추는 iOS, 안드로이드, 윈도우® 폰, 윈도우® 등 상의 모바일 애플리케이션을 구축할 수 있다. 이러한 애플리케이션들(및 매우 다양한 다른 애플리케이션들) 중 임의의 애플리케이션에서, 팬의 좋아하는 팀 스코어 또는 세계에서 특정 종류의 뉴스 이벤트 속보로서 경보 또는 토스트를 불쑥 나타나는(pop) 통지가 큰 구별자이다. 그 구별자는 일반적으로 이러한 이벤트를 운영 시스템 플랫폼 또는 장치 벤더-공급 통지 채널에 푸시하기 위한 서버 인프라구조를 구축 및 실행하고, 이것은 최적화된 사용자 경험에 초점을 맞춘 많은 모바일 애플리케이션의 기술 세트를 넘어선다. 그리고, 그들의 애플리케이션이 매우 성공적인 경우에, 수만, 수십만 또는 수백만 개의 장치들에 이벤트를 시기 적절한 방식으로 분배하는 것이 매우 도전적인 것이기 때문에, 간단한 서버-기반 해결책은 곧 확장성 장벽(scalability ceiling)에 부딪칠 것이다.
또한, 매우 많은 수의 동시의 모바일 애플리케이션은 기존의 인터넷 자산(Internet asset)을 통한 간단한 경험으로서 작성된다. 예를 들면, 사용자가 웹 사이트를 내비게이팅할 필요없이 애플리케이션을 시작함에 따라, 새로운 애플리케이션은 주요 뉴스 제공자의 RSS 피드로부터 즉시 최근의 헤드라인을 디스플레이할 수 있다. 독립적인 소프트웨어 개발자 및 작은 독립적인 소프트웨어 벤더는 매우 많은 수의 그러한 애플리케이션들을 구축하고 있고, 그 애플리케이션들을 매우 낮은 가격대로 판매하고 있다. 푸시 통지로부터 크게 이득을 얻을 그러한 애플리케이션에서, 도전과제를 야기하는 이벤트의 분배뿐만 아니라, 이벤트 데이터의 획득 및 획득 이후에도 마찬가지로 중대한 서버 인프라구조의 구축 및 운영을 요구할 것이다.
여기에 청구된 발명 대상은 임의의 단점을 해소하거나 상술된 것과 같은 환경에서만 동작하는 실시예로 국한되지 않는다. 오히려, 이러한 배경 기술은 단지 본원에 설명된 일부 실시예가 실시될 수 있는 하나의 예시적인 기술 영역을 예시하기 위해 제공된다.
여기에 예시된 일 실시예는 이벤트를 소비자에게 전달하는 방법을 포함한다. 상기 방법은 자산 데이터(proprietary data)를 액세스하는 단계를 포함한다. 상기 방법은 정규화된 이벤트를 생성하기 위해 자산 데이터를 정규화하는 단계를 더 포함한다. 이벤트를 수신해야 하는 복수의 최종 소비자들은 가입에 기초하여 결정된다. 정규화된 이벤트로부터의 데이터는 결정된 최종 소비자 각각에 대해 개별적으로 적절한 복수의 상이한 포맷들로 포맷팅된다. 정규화된 이벤트로부터의 데이터는, 각각의 최종 소비자에 대해 적절하고 소비자가 도달되는 타겟 인프라구조에 의해 정의된 프로토콜 규칙을 준수하는 포맷으로 복수의 최종 소비자들 각각에게 전달된다.
이 요약은 이하에서 상세한 설명에 더 기술되는 일련의 개념을 간략화된 형태로 소개하기 위해 제공된 것이다. 이 요약은 청구된 발명 대상의 주요 특징 또는 필수적인 특징을 명시하기 위한 것이 아니며, 청구된 발명 대상의 범위를 정하는 데 보조 수단으로 사용되기 위한 것도 아니다.
부가적인 특징 및 이점은 다음의 상세한 설명에 제시될 것이고, 상세한 설명으로부터 부분적으로 명백해질 것이거나, 본원의 교시의 실행에 의해 학습될 수 있다. 본 발명의 특징 및 이점은 특히 첨부된 청구 범위에 지적된 기구 및 결합에 의해 실현 및 획득될 수 있다. 본 발명의 특징은 다음의 상세한 설명 및 첨부된 청구 범위로부터 더 완전히 명백해질 것이거나, 이후에 제시되는 본 발명의 실시에 의해 학습될 수 있다.
위에 언급된 및 다른 이점 및 특징이 획득될 수 있는 방식을 설명하기 위해, 위에 간략히 설명된 발명 대상의 더 상세한 설명은 첨부된 도면에 예시된 특정 실시예를 참조하여 제공될 것이다. 이러한 도면이 단지 통상적인 실시예를 도시하고 따라서 범위를 제한하는 것으로 간주되지 않는다는 것을 이해하여, 실시예는 첨부된 도면의 사용을 통해 부가적인 특수성 및 세부 사항을 기술 및 설명될 것이다.
도 1은 이벤트 데이터를 수집하고, 이벤트 데이터를 일반적인 이벤트로 맵핑하고, 이벤트 데이터를 다양한 타겟 소비자에게 분배하기 위한 시스템의 개관을 예시한다.
도 2는 이벤트 데이터 획득 및 분배 시스템을 예시한다.
도 3은 이벤트 데이터 획득 시스템의 예를 예시한다.
도 4는 이벤트 데이터 분배 시스템의 예를 예시한다.
도 5는 이벤트 데이터 획득 및 분배 시스템을 예시한다.
도 6은 배지 카운터 기능의 구현예를 예시한다.
도 7은 이벤트를 소비자에게 전달하는 방법을 예시한다.
실시예는 이벤트를 통지에 맵핑하기 위한 맵핑 모델 및 통지 분배 시스템과 이벤트 획득 시스템을 결합할 수 있다. 실시예는 또한 가입자-공급 기준에 기초하여 통지를 필터링할 수 있다. 또한, 실시예는 개별적인 타겟에 대한 전달 카운트를 효율적인 방식으로 트래킹하는 것과 같은 깊이 능력을 가질 수 있다.
그러한 예가 도 1에 예시된다. 도 1은 매우 많은 수의 상이한 소스들(116)로부터의 정보가 매우 많은 수의 상이한 타겟들로 전달되는 예를 예시한다. 일부 예에서, 단일 소스로부터의 정보, 또는 다수의 소스들(116)로부터 종합된 정보는, 매우 많은 수의 타겟들(102)로 전달되는 단일 이벤트를 생성하는데 사용될 수 있다. 지정자(designator)(102)가 모든 타겟을 총괄적으로 또는 개별적인 타겟을 일반적으로 지칭하는데 사용될 수 있다는 것을 주목하라. 특정 개별적인 타겟은 추가적인 구별자에 의해 지정될 것이다.
도 1은 소스(116)를 예시한다. 지정자(116)가 모든 타겟을 총괄적으로 또는 개별적인 타겟을 일반적으로 지칭하는데 사용될 수 있다는 것을 주목하라. 특정 개별적인 타겟은 추가적인 구별자에 의해 지정될 것이다. 소스(116)는, 예를 들면, RSS, Atom 및 OData 피드, 이에 제한되지 않지만 IMAP 및 POP3 프로토콜을 지원하는 것을 포함하는 이메일 메일박스, 트위터 타임라인 또는 페이스북 담벼락과 같은 소셜 네트워크 정보 소스(116), 및 Windows Azure™ 서비스 버스 또는 아마존의 심플 큐 서비스와 같은 외부 공개/가입 인프라구조 상의 가입을 포함하는 매우 다양한 공개 및 개인 네트워크 서비스를 포함할 수 있다.
소스(116)는 이벤트 데이터를 획득하는데 사용될 수 있다. 하기에 더 상세히 설명되는 바와 같이, 소스(116)는 획득 토픽(140-1)과 같은 획득 토픽으로 조직화될 수 있다. 이벤트 데이터는 (104)에서 일반적으로 예시된 정규화된 이벤트로 맵핑될 수 있다. 정규화된 이벤트(104)는 하나 이상의 맵핑 모듈들(130)에 의해 특정 타겟(102)에 대한 통지로 맵핑될 수 있다. 통지(132)는 특정 타겟(102)에 대한 통지를 나타낸다. 단일 이벤트(104)가 다수의 상이한 통지들로 맵핑될 수 있고, 여기서 상이한 통지는 다수의 이질적인 타겟들(102)로의 분배를 위한 적절한 상이한 포맷을 갖는다는 것이 인식되어야 한다. 예를 들면, 도 1은 타겟(102)을 예시한다. 타겟(102)은 타겟 특성에 의존한 다수의 상이한 메시지 포맷을 지원한다. 예를 들면, 일부 타겟(102)은 중계 포맷의 통지를 지원할 수 있고, 다른 타겟(102)은 윈도우® 7 폰에 대한 MPNS(Microsoft® Push Notification Service) 포맷의 통지를 지원할 수 있고, 다른 타겟(102)은 iOS 장치에 대한 APN(Apple Push Notification) 포맷의 통지를 지원할 수 있고, 다른 타겟(102)은 안드로이드 장치에 대한 C2DM(Cloud To Device Messaging) 포맷의 통지를 지원할 수 있고, 다른 타겟(102)은 장치 상의 브라우저에 대한 JSON(Java Script Object Notation) 포맷의 통지를 지원할 수 있고, 다른 타겟(102)은 HTTP(Hyper Text Transfer Protocol)의 통지를 지원할 수 있고, 기타 등등이다.
따라서, 맵핑 모듈(130)에 의한 맵핑은 하나 이상의 데이터 소스들(116)로부터의 정보로부터 생성된 단일 이벤트(104)를 상이한 타겟(102)에 대한 다수의 상이한 통지로 맵핑할 수 있다. 이어서, 상이한 통지(132)는 다양한 타겟(102)으로 전달될 수 있다.
이것은, 일부 실시예에서, 도 2에 예시된 바와 같은 팬-아웃 토폴로지를 사용하여 달성될 수 있다. 도 2는 소스(116)를 예시한다. 여기서 이후에 논의되는 바와 같이, 실시예는 획득 파티션(140)을 활용할 수 있다. 획득 파티션들(140) 각각은 다수의 소스들(116)을 포함할 수 있다. 잠재적으로 매우 많고 다양한 소스들(116)이 존재할 수 있다. 소스(116)는 정보를 제공한다. 그러한 정보는, 예를 들면, 이메일, 텍스트 메시지, 실시간 주식 시세, 실시간 스포츠 스코어, 뉴스 업데이트 등을 포함할 수 있지만, 이에 국한되지 않는다.
도 2는, 각각의 파티션이 예시적인 획득 엔진(118)과 같은 획득 엔진을 포함하는 것을 예시한다. 획득 엔진(118)은 소스(116)로부터 정보를 수집하고, 정보에 기초하여 이벤트를 생성한다. 도 2에 예시된 예에서, 다수의 이벤트들은 다양한 소스들을 사용하여 획득 엔진에 의해 생성되는 것으로 예시된다. 예시를 위해 이벤트(104-1)가 사용된다. 일부 실시예에서, 이벤트(104-1)는 여기에 추가로 설명되는 바와 같이 정규화될 수 있다. 획득 엔진(118)은, 네트워크 상의 소스(116)로부터 정보를 수집하는, 인터넷과 같이 네트워크 상의 서비스일 수 있다.
도 2는 이벤트(104-1)가 분배 토픽(144)으로 전송되는 것을 예시한다. 분배 토픽(144)은 이벤트를 다수의 분배 파티션들로 팬 아웃한다. 분배 파티션(120-1)은 분배 파티션 모두에 대해 유사한 것으로 사용된다. 분배 파티션 각각은 가입으로 표현된 다수의 최종 사용자들 또는 장치들을 서비스한다. 분배 파티션에 의해 서비스되는 가입들의 수는 다른 분배 파티션들의 것과 다를 수 있다. 일부 실시예에서, 파티션에 의해 서비스되는 가입들의 수는 분배 파티션의 용량에 의존할 수 있다. 대안적으로 또는 부가적으로, 분배 파티션은 최종 사용자에 대해 논리적인 또는 지리적인 근접도에 기초하여 사용자를 서비스하도록 선택될 수 있다. 이것은 경보가 더 시기 적절한 방식으로 최종 사용자에게 전달되도록 허용할 수 있다.
예시된 예에서, 분배 파티션(120-1)은 분배 엔진(122-1)을 포함한다. 분배 엔진(122-1)은 데이터베이스(124-1)를 찾아본다(consult). 데이터베이스(124-1)는 연관된 전달 타겟(102)에 관한 세부 사항과 가입에 관한 정보를 포함한다. 특히, 데이터베이스는 타겟(102)에 대한 플랫폼, 타겟(102)에 의해 사용되는 애플리케이션, 타겟(102)에 대한 네트워크 어드레스, 타겟(102)을 사용하는 최종 사용자의 사용자 선호도 등을 기술하는 정보와 같은 정보를 포함할 수 있다. 데이터 베이스(124-1) 내의 정보를 사용하여, 분배 엔진(122-1)은 번들(126-1)을 해석하고, 여기서 번들(126-1)은, 이벤트(104-1)로부터의 정보가 통지로서 전송될 타겟(102) 중에서 복수의 타겟들(102)을 식별하는 라우팅 슬립(routing slip)(128-1) 및 이벤트(104)(또는 적어도 이벤트(104)로부터의 정보)를 포함한다. 이어서, 번들(126-1)은 큐(130-1)에 배치된다.
분배 파티션(120-1)은 다수의 전달 엔진들을 포함할 수 있다. 전달 엔진은 큐(103-1)로부터의 번들을 디큐잉(dequeue)하고, 통지를 타겟(102)으로 전달한다. 예를 들면, 전달 엔진(108-1)은 큐(13-1)로부터 번들(126-1)을 취하고, 이벤트(104) 정보를 라우팅 슬립(128-1)에서 식별된 타겟(102)으로 전송한다. 따라서, 이벤트(104-1) 정보를 포함하는 통지(134)는 상이한 타겟(102)에 대해 적절하고 개별적인 타겟(102)에 대해 특정된 다수의 상이한 포맷들로 다양한 분배 파티션들(102)로부터 타겟(102)으로 전송될 수 있다. 이것은 개별적인 타겟(102)에 대해 개별화된, 개별화된 통지(134)가 전달 시스템을 통한 매우 많은 수의 개별화된 통지를 전달하기보다는 전달 시스템의 에지에서 공통 이벤트(104-1)로부터 생성되도록 허용한다.
다음은, 일부 실시예에서 사용될 수 있는 정보 수집 및 이벤트 분배 시스템의 대안적인 설명을 예시한다.
기초로서, 하나의 실시예 시스템은, 다양한 다른 메시징 시스템에서 유사한 형태로 또한 존재하지만, 워싱턴 레드몬드 소재의 마이크로소프트 코포레이션으로부터 입수 가능한 Windows Azure™ 서비스 버스에 의해 제공되는 바와 같은 공개/가입 인프라구조를 사용한다. 상기 인프라구조는 제시된 방법의 기재된 구현예를 용이하게 하는 2 개의 능력들: 토픽 및 큐를 제공한다.
큐는, 메시지가 순차적인 순서로 부가(인큐잉)되고, 메시지가 부가되는 것과 동일한 순서로 메시지가 제거(디큐잉)되도록 허용하는 메시지에 대한 저장 구조이다. 메시지는 임의의 수의 공존하는 클라이언트에 의해 부가 및 제거되어, 인큐 측 상의 로드의 레벨링 및 디큐 측 상의 프로세싱 로드의 밸런싱을 허용할 수 있다. 큐는, 메시지가 디큐잉되기 때문에 엔티티가 메시지에 대한 잠금 장치를 획득하도록 허용하여, 메시지가 큐로부터 사실상 삭제될 때 또는 검색된 메시지의 프로세싱이 실패한 경우에 메시지가 큐로 복구될 수 있는지에 대해 소비하는 클라이언트의 명시적인 제어를 허용한다.
토픽은 큐의 모든 특성을 갖는 저장 구조이지만, 다수의 동시대에 존재하는 "가입들"을 허용하며, 상기 가입들 각각은 인큐잉된 메시지의 시퀀스에 걸쳐 분리되고, 필터링된 뷰를 허용한다. 토픽 상의 각각의 가입은, 가입의 연관된 필터 조건(들)이 메시지와 긍정적으로 매칭하면 각각의 인큐잉된 메시지의 카피를 산출한다. 결과적으로, 각각의 가입이 모든 메시지와 매칭하는 간단한 '통과' 조건을 갖는 10 개의 가입들을 갖는 토픽으로 인큐잉된 메시지는 총 10 개의 메시지들을 산출할 것이고, 하나의 메시지는 각각의 가입에 대한 것이다. 가입은, 큐와 같이, 수신기들에 걸친 프로세싱 로드의 밸런싱을 제공하는 다수의 동시대의 소비자들을 갖는다.
또 다른 기본적인 개념은 '이벤트'의 개념이고, 이것은 근본적인 공개/가입 인프라구조에 관하여 단지 메시지이다. 일 실시의 문맥에서, 이벤트는 메시지 본문의 사용 및 메시지 특성을 지배하는 간단한 제약의 세트에 영향을 받는다. 이벤트의 메시지 본문은 일반적으로 불투명한 데이터 블록으로서 흐르고, 일 실시예에 의해 고려되는 임의의 이벤트 데이터는 일반적으로 메시지 특성에서 흐르고, 이것은 이벤트를 나타내는 메시지의 부분인 키/값 쌍의 세트이다.
이제 도 3을 참조하면, 일 실시예 아키텍쳐의 목표는 큰 스케일에서 매우 다양한 상이한 소스들(116)로부터 이벤트 데이터를 획득하고 추가적인 프로세싱을 위해 이러한 이벤트를 공개/가입 인프라구조로 포워딩하는 것이다. 프로세싱은 풀(pull) 또는 푸시 통지 메커니즘을 통해 관심 가입자에 대한 이벤트의 일정 형태의 분석, 실시간 탐색, 또는 재분배를 포함할 수 있다.
일 실시예 아키텍쳐는 획득 엔진(118), 획득 어댑터 및 이벤트 정규화를 위한 모델, 획득 소스(116)에 관한 메타데이터를 보유하기 위한 파티셔닝된 스토어(138), 공통 파티셔닝 및 스케줄링 모델, 및 획득 소스(116)의 상태의 사용자-개시된 변화를 실행 시간에 및 추가적인 데이터베이스 룩업을 요구하지 않고 시스템으로 흐르게 하는 방법에 대한 모델을 정의한다.
구체적인 구현예에서, 획득은 RSS, Atom 및 OData 피드, 이에 제한되지 않지만 IMAP 및 POP3 프로토콜을 지원하는 것을 포함하는 이메일 메일박스, 트위터 타임라인 또는 페이스북 담벼락과 같은 소셜 네트워크 정보 소스(116), 및 Windows Azure™ 서비스 버스 또는 아마존의 심플 큐 서비스와 같은 외부 공개/가입 인프라구조 상의 가입을 포함하는 매우 다양한 공개 및 개인 네트워크 서비스로부터의 이벤트를 소싱하기 위한 구체적인 획득 어댑터를 지원할 수 있다.
이벤트 정규화
이벤트 데이터는, 이벤트 데이터가 핸드 오프되는 공개/가입 인프라구조 상의 가입자에 의해 이벤트가 실제로 소비 가능하게 하도록 정규화된다. 정규화는, 이러한 문맥에서, 이벤트가 다양한 문맥에서 넓은 세트의 가입자가 관심을 가질 수 있는 정보 아이템의 일관된 표현을 갖는 공통 이벤트 모델로 맵핑된다는 것을 의미한다. 여기서 선택된 모델은, 시스템에 의해 추가로 해석되지 않은 단일의, 불투명한, 이진의 청크 데이터에 의해 동반될 수 있는 키/값 쌍들의 플랫 리스트 형태의 이벤트의 간단한 표현이다. 이러한 이벤트의 표현은 대부분의 공개/가입 인프라구조 상에서 용이하게 표현 가능하고, 또한 HTTP와 같은 공통 인터넷 프로토콜로 매우 깔끔하게 맵핑된다.
이벤트 정규화를 예시하기 위해, RSS 또는 Atom 피드 엔트리의 이벤트(104)로의 맵핑을 고려하라(도 1 및 도 2를 참조). RSS 및 Atom은, 연대 순서로 뉴스 및 다른 현재 정보를 공개하기 위해 널리 사용되고, 그 정보가 구조화된 방식으로 컴퓨터 프로그램에서 프로세싱하기 위해 이용 가능하게 하는데 도움을 주는 2 개의 인터넷 표준이다. RSS 및 Atom은 매우 유사한 구조 및 상이하게 명명되지만 의미론적으로 동일한 데이터 요소의 세트를 공유한다. 그래서 제 1 정규화 단계는 타이틀 또는 시놉시스와 같이, 양자의 표준에서 정의된 그러한 의미론적으로 동일한 요소에 대한 키로서 공통 네임을 정의하는 것이다. 둘째로, 하나의 표준에서만 발생하고 다른 표준에서 발생하지 않는 데이터는 항상 각각의 '네이티브(native)' 네임으로 맵핑된다. 이를 넘어서, 이러한 종류의 피드는 코어 표준에서 정의되지 않은 데이터 아이템인 '연장부'를 종종 전달하지만, 부가적인 데이터를 부가하기 위해 각각의 표준에서 연장 가능성 설비를 사용한다.
지오로케이션(geolocation)에 대한 GeoRSS 또는 구조화된 데이터를 Atom 피드에 임베딩하기 위한 OData를 포함하지만, 이에 국한되지 않는 이러한 연장부 중 일부는 상이한 이벤트 소스(116)에 걸쳐 공유되는 공통 방식으로 맵핑되어, 데이터가 RSS 또는 Atom 또는 트위터 타임라인으로부터 획득되는지와 상관없이, 이벤트를 방출하는 공개/가입 인프라구조 상의 가입자가 균일한 방식으로 지오로케이션 정보를 해석할 수 있다. 따라서, GeoRSS 예에 대해 계속하면, 지리학 '포인트'를 표현하는 GeoRSS 표현은 WGS84 좌표를 나타내는 한 쌍의 수치 '위도'/'경도' 특성으로 맵핑될 수 있다.
OData와 같은 복소(complex) 구조화된 데이터를 전달하는 연장부는 기본적인 이벤트 모델을 복잡하게 하지 않고 복소 형태의 구조 및 데이터를 보존하는 맵핑 모델을 구현할 수 있다. 일부 실시예는 JSON과 같은 정규 및 간결한 복소수 데이터 표현에 대해 정규화하고, 복소 데이터 특성, 예를 들면, 복소 데이터 형태의 '사람'의 OData 특성 '테넌트(tenant)'를 키/값 상으로 맵핑하고, 여기서 키는 특성 네임 '테넌트'이고, 값은 네임을 갖는 사람, 일대기(biography) 정보, 및 JSON 직렬화 형태로 표현된 어드레스 정보를 기술하는 복소 데이터이다. 데이터 소스가 XML 문서인 경우에, 이것이 RSS 또는 Atom의 경우에서와 같이, 값은 XML 데이터를 XML에 의해 제공된 구조를 보존하는 JSON으로 번역하지만, 속성 및 요소와 같은 XML 독특한 요소(particularity)를 고르게 함(flatten out)으로써 생성될 수 있고, 이것은 동일한 XML 요소 노드에 종속된 XML 속성 및 요소 모두가 추가적인 구별 없이 '형제 자매(siblings)'로서 JSON 특성으로 맵핑된다는 것을 의미한다.
소스 및 파티셔닝
일 실시예 아키텍쳐는, 소스 데이터베이스(138)의 소스에 저장될 수 있는 '소스 디스크립션' 기록 내의 데이터 소스(116)에 관한 메타데이터를 캡쳐한다. '소스 디스크립션'은 한 세트의 공통 요소 및 데이터 소스에 특정된 한 세트의 요소를 가질 수 있다. 공통 요소는 소스의 네임, 소스(116)가 유효한 것으로 간주되는 시간 기간 간격, 인간 판독 가능한 디스크립션, 및 구별을 위한 소스(116)의 형태를 포함할 수 있다. 소스 특정 요소는 소스(116)의 형태에 의존하고, 네트워크 어드레스, 어드레스에 의해 표현된 자원에 대한 액세스를 획득하기 위한 크리덴셜(credential) 또는 다른 보안 키 자료, 및 RSS 피드를 체크하기 위한 시간 간격을 제공하는 것과 같이, 특정 방식으로 데이터 획득을 수행하거나, 각각의 뉴스 속도 아이템을 끝에서 끝까지 경험하도록 구성되는 경우에, 통지 수신인이 제한된 스크린 표면 상에 각각의 뉴스 속도 아이템을 보기 위한 기회를 얻도록 현재 이벤트 뉴스 피드로부터 적어도 60 초 간격으로 현재 획득되는 이벤트 스페이싱(spacing)과 같이, 이벤트의 포워딩을 특정 방식으로 수행하도록 소스 획득 어댑터에 지시하는 메타데이터를 포함할 수 있다.
소스 디스크립션은 소스 데이터베이스(138)와 같은 하나 또는 다수의 스토어에 보유된다. 소스 디스크립션은 2 개의 상이한 축을 따라 이러한 스토어에 걸쳐 및 이러한 스토어 내에서 분할될 수 있다.
제 1 축은 시스템 테넌트에 의한 구별이다. 시스템 테넌트 또는 '네임스페이스'는 시스템 내의 엔티티에 대한 분리된 범위를 생성하기 위한 메커니즘이다. 구체적인 경우를 예시하여, "프레드"가 일 실시예를 구현하는 시스템의 사용자인 경우에, 프레드는, 시스템 내의 다른 소스(116)의 전체적으로 독립된 상태 및 소스 디스크립션 및 구성을 보유할 수 있는 분리된, 가상 환경을 프레드에 제공하는 테넌트 범위를 생성할 수 있을 것이다. 이러한 축은, 구체적으로 또한 테넌트가 저장된 메타데이터(패스워드와 같은 보안 민감 데이터를 포함할 수 있음)의 분리를 요구하는 경우에서, 또는 기술적, 규제 또는 비지니스 이유로, 스토어에 걸쳐 소스 디스크립션을 확산시키기 위한 구별 요인으로서 기능할 수 있다. 시스템 테넌트는, 소스 디스크립션 데이터가 보유되고 데이터 획득이 수행되는 특정 데이터센터와의 유사성을 또한 나타낼 수 있다.
제 2 축은 미리 정의된 식별자 범위로부터 선택된 수치적 파티션 식별자에 의한 구별일 수 있다. 파티션 식별자는, 예를 들면, 소스 네임 및 테넌트 식별자와 같이, 소스 디스크립션에 포함된 불변량(invariant)으로부터 유도될 수 있다. 파티션 식별자는 해시 함수(많은 후보들 중 하나는 젠킨스 해시(Jenkins Hash)이고, http://www.burtleburtle.net/bob/hash/doobs.html)를 사용하여 이러한 불변량으로부터 유도될 수 있고, 결과적인 해시 값은, 가능하게는, 해시 값을 통한 모듈로 함수(modulo function)를 사용하여 파티션 식별자 범위로 계산된다. 식별자 범위는, 시스템에 언제나 보유될 모든 소스 디스크립션을 저장하기 위해 필요로 되는 것으로 예상된 가장 많은 수의 저장 파티션들보다 더 크도록 선택된다(그리고 실질적으로 더 클 수 있음).
저장 파티션을 도입하는 것은 일반적으로 용량 제한에 의해 동기화되고, 용량 제한은 근본적인 데이터 스토어 상의 저장 용량 한도에 바로 관련되거나 주어진 데이터센터 또는 데이터센터 섹션에 대한 대역폭 제약들과 같이 획득 엔진(118)에 영향을 주는 용량 제한에 관련되고, 이것은 실시예에서 진입 대역폭 요구를 만족시키기 위해 상이한 데이터센터 또는 데이터센터 세그먼트에 걸쳐 용량을 활용하는 획득 파티션(140)을 생성하게 할 수 있다. 저장 파티션은 전체 식별자 범위의 서브세트를 소유하고, 따라서, 소스 디스크립션 기록과 저장 파티션(및 저장 파티션을 액세스하기 위해 필요한 리소스)의 연관성은 그의 파티션 식별자로부터 직접적으로 추론될 수 있다.
저장 파티션 축을 제공하는 것 이후에, 파티션 식별자는 또한 스케줄링 또는 획득 작업을 위해 및 정해진 소스 디스크립션에 대한 획득 파티션(140)의 소유권 관계(잠재적으로 저장 파티션에 대한 관계와 상이함)를 명확히 정의하기 위해 사용된다.
소유권 및 획득 파티션
시스템 내의 각각의 소스 디스크립션은 특정 획득 파티션(140)에 의해 소유될 수 있다. 시스템이 다수의 장소에서 정확히 동일한 소스(116)로부터 동시에 이벤트를 획득하지 않고, 이것이 중복 이벤트가 생략되게 할 수 있기 때문에, 명확하고 고유한 소유권이 사용된다. 이것을 더 구체적으로 하기 위해, 테넌트의 범위 내에 정의된 하나의 RSS 피드는 시스템 내의 정확히 하나의 획득 파티션(140)에 의해 소유되고, 파티션 내에서 임의의 주어진 시점에서 특정 피드 상에서 실행되는 하나의 스케줄링된 획득이 존재한다.
획득 파티션(140)은 파티션 식별자 범위의 소유권을 획득하는 방식에 의해 소스 디스크립션의 소유권을 획득한다. 장애 극복 능력(failover capability)을 가질 수 있고 마스터/백업 소유권을 할당할 수 있는 외부 및 특수 파티션 시스템을 사용하거나, 파티션 식별자 범위가 획득 엔진 역할을 가정하는 다수의 별개의 컴퓨트 인스턴스들에 걸쳐 고르게 확산된 더 간단한 메커니즘을 사용하여, 식별자 범위에 획득 파티션(140)이 할당될 수 있다. 외부 파티션 시스템을 갖는 더 세련된 구현예에서, 파티션에 대해 선출된 마스터 소유자는 시스템이 "냉각(cold)" 상태로부터 시작하는 경우에 작업의 스케줄링을 시딩(seed)하는 것을 담당하고, 이것은 파티션이 이전의 소유자를 갖지 않는다는 것을 의미한다. 더 간단한 시나리오에서, 파티션을 소유하는 컴퓨트 인스턴스는 스케줄링을 시딩하는 것을 소유한다.
스케줄링
획득 작업을 위한 스케줄링 요구는 구체적인 소스의 성질에 의존하지만, 일반적으로 일부 기재된 실시예에서 실현되는 2 개의 종류의 획득 모델들이 존재한다.
제 1 모델에서, 소유자는 소스의 네트워크 서비스에 대한 일정 형태의 접속 또는 롱-런(long-running) 네트워크 요청을 개시하고, 데이터그램 또는 스트림 형태로 접속 상으로 복귀되는 데이터를 대기한다. 일반적으로 또한 롱-폴링(long polling)으로서 지칭되는 롱-런 요청의 경우에, 소스 네트워크 서비스는 타임아웃이 발생할 때까지 또는 데이터가 이용 가능하게 될 때까지 요청을 고수할 것이고, 결국, 획득 어댑터는 페이로드 결과와 상관없이 요청 완료를 대기하고 이어서 요청을 재발행할 것이다. 결과적으로, 이러한 획득 스케줄링 모델은, 소스(116)의 소유자가 소스에 관하여 학습함에 따라 개시되고, 현재 접속 또는 요청이 완료되거나 일시적으로 중단됨에 따라 새로운 요청 또는 접속이 바로 개시되는 '긴밀한(tight)' 루프의 형태를 갖는다. 소유자가 긴밀한 루프를 즉각적으로 제어하기 때문에, 루프는 소유자가 실행 중인 동안에 신뢰할 수 있게 존속될 수 있다. 소유자가 정지 및 재시작하면, 루프는 또한 재시작된다. 소유권이 변하면, 루프는 정지하고 새로운 소유자가 루프를 시작한다.
제 2 모델에서, 소스의 네트워크 서비스가 이용 가능하게 될 때, 소스의 네트워크 서비스는 롱-런 요청 또는 데이터를 산출하는 접속을 지원하지 않지만, 질의될 때마다 바로 반환되는 규칙적인 요청/응답 서비스이다. 그러한 서비스 중에 및 이것이 많은 웹 리소스에 적용될 때, 연속적인 긴밀한 루프에서 데이터의 요청은 소스(116) 상의 막대한 양의 부하를 발생시키고, 소스(116)가 변경되지 않는다는 것을 단지 나타내거나, 최악의 경우에, 동일한 데이터를 반복해서 전달하는 중요한 네트워크 트래픽을 또한 발생시킨다. 따라서, 시기 적절한 이벤트 획득의 요구를 밸런싱하고, 성과없는 질의 트래픽으로 소스(116)를 오버로딩하지 않기 위해, 획득 엔진(118)은, 소스(116)에 대한 요청이 이러한 고려사항을 밸런싱하고 또한 소스(116)로부터의 힌트를 고려한 간격에 기초하여 주기적으로 실행되는 '정기(timed)' 루프에서 요청을 실행할 것이다. '정기' 루프는 소스(116)의 소유자가 소스에 관하여 학습함에 따라 개시된다.
정기 루프에 대해 2 개의 주목할 만한 구현 변형예들이 존재한다. 제 1 변형예는 낮은 스케일의 최선 노력의 시나리오에 대한 것이고, 스케줄링을 위한 로컬, 메모리 내 타이머 오브젝트를 사용하고, 이것은 스케일, 제어 및 재시작 특성이 긴밀한 루프의 것과 유사하게 한다. 루프가 개시되고 바로 타이머 회신(timer callback)을 스케줄링하여, 획득 작업의 제 1 반복이 실행되게 한다. 그 작업이 (에러가 있는 경우에조차) 완료되고, 루프가 계속해서 실행되어야 한다고 결정될 때, 작업이 다음에 실행되어야 하는 경우에서 또 다른 타이머 회신이 스케줄링된다.
제 2 변형예는, Windows Azure™ 서비스 버스를 포함하는 몇몇의 공개/가입 시스템의 특징인 '스케줄링된 메시지'를 사용한다. 변형예는 다소 더 높은 복잡성을 대가로 상당히 더 높은 획득 스케일을 제공한다. 스케줄링 루프는 소유자에 의해 개시되고, 메시지는 획득 파티션의 스케줄링 큐에 배치된다. 메시지는 소스 디스크립션을 포함한다. 소스 디스크립션은, 획득 작업을 수행하고 이어서 결과적인 이벤트를 타겟 공개/가입 시스템으로 인큐잉하는 작업자에 의해 후속으로 픽업된다. 마지막으로, 소스 디스크립션은 또한 새로운 '스케줄링된' 메시지를 스케줄링 큐로 인큐잉한다. 메시지가 스케줄링 큐 상의 임의의 소비자에 의해 검색되도록 이용 가능하게 되는 시간 인스턴스로 메시지가 마킹되기 때문에, 그 메시지는 '스케줄링된' 것으로 불린다.
이러한 모델에서, 획득 파티션(140)은, 주로 스케줄링을 시딩하고 실제 획득 작업을 수행하는 임의의 수의 '작업자' 역할과 페어링될 수 있는 하나의 '소유자' 역할을 가짐으로써 스케일 아웃될 수 있다.
소스 업데이트
시스템이 실행될 때, 획득 파티션(140)은 관찰될 새로운 소스(116)에 관하여 및 어떠한 소스(116)가 더 이상 관찰되지 않아야 하는지에 관하여 학습할 수 있을 필요가 있다. 이러한 것에 관한 결정은, 검출된 복구 불가하거나 일시적인 에러로 인해 소스(116)를 블랙리스팅(후술됨)하는 경우를 제외하고, 통상적으로 사용자에 놓여있고, 관리 서비스(142)와 상호 작용의 결과이다. 그러한 변화를 통신하기 위해, 획득 시스템은 기본적인 공개/가입 인프라구조에서 '소스 업데이트' 토픽을 유지한다. 각각의 획득 파티션(140)은 토픽 상의 전용 가입을 갖고, 가입은 자격이 있는 메시지를 획득 파티션의 소유된 범위 내에서 파티션 식별자를 전달하는 것으로 제한하는 필터 조건을 갖는다. 이것은, 관리 서비스(142)가 새롭거나 탈락된 소스(116)에 관한 업데이트를 설정하고, 파티션 소유권 분배의 지식을 요구하지 않고 업데이트를 정확한 파티션(140)으로 전송하는 것을 가능하게 한다.
관리 서비스(142)는, 소스 디스크립션, 파티션 식별자(상술된 필터링 목적으로), 및 소스(116)가 부가되는지 또는 소스(116)가 시스템으로부터 제거되는지를 나타내는 동작 식별자를 포함하는 토픽으로 업데이트 커맨드를 제출한다.
일단 획득 파티션(140) 소유자가 커맨드 메시지를 검색하면, 획득 파티션(140) 소유자는 새로운 소스(116)에 대한 새로운 획득 루프를 스케줄링하거나, 획득 파티션(140) 소유자는 기존의 획득 루프를 중단 및 중지 또는 심지어 탈락할 것이다.
블랙리스팅
데이터 획득이 실패한 소스(116)는 일시적으로 또는 영구적으로 블랙리스팅될 수 있다. 일시적인 블랙리스팅은, 소스(116) 네트워크 리소스가 이용 불가하거나 발행된 획득 요청에 바로 관련되지 않는 에러를 반환할 때 수행된다. 일시적인 블랙리스팅의 듀레이션은 에러의 성질에 의존한다. 일시적인 블랙리스팅은, 에러 조건이 다른 상대방에 의해 해소되는 것으로 예상되는 시간 인스턴트 동안에, 규칙적인 스케줄링 루프(긴밀한 또는 적기)를 중단하고 루프의 다음 반복을 (회신 또는 스케줄링된 메시지에 의해) 스케줄링함으로써 수행된다.
영구적인 블랙리스팅은 에러가 획득 요청의 즉각적인 결과인 것으로 결정될 때 수행되고, 이것은 요청이 인가 또는 인증 에러를 발생시키고, 원격 소스(116)가 몇몇의 다른 요청 에러를 나타낸다는 것을 의미한다. 리소스가 영구적으로 블랙리스팅되면, 소스(116)는 파티션 스토어에 블랙리스트로서 마킹되고, 획득 루프는 바로 중단된다. 영구적으로 블랙리스팅된 소스(116)를 복귀시키는 것은, 아마도 요청에 대한 거동 변화를 발생시키는 구성 변화들과 함께, 스토어에서 블랙리스트 마커를 제거하고, 소스 업데이트 토픽을 통해 획득 루프를 재시작하는 것을 요구한다.
통지 분배
실시예는 주어진 입력 이벤트로부터의 정보의 사본을 특정 범위와 연관된 매우 많은 수의 '타겟들(102)' 각각으로 분배하고 각각의 타겟(102)에 대해 최소 시간으로 그렇게 하도록 구성될 수 있다. 타겟(102)은 일부 제 3 상대방 통지 시스템 또는 일부 네트워크 액세스 가능 외부 인프라구조에 대한 어댑터의 식별자에 연결된 장치 또는 애플리케이션의 어드레스, 및 그 통지 시스템 또는 인프라구조를 액세스하기 위한 보조 데이터를 포함할 수 있다.
일부 실시예는 3 개의 별개의 프로세싱 역할들로 분할되는 아키텍쳐를 포함할 수 있고, 이것은 다음에 상세히 설명되고, 도 4를 참조하여 이해될 수 있다. 도 4에서 '1', 타원형 및 'n'으로 언급된 바와 같이, 프로세싱 역할 각각은 프로세싱 역할의 하나 이상의 인스턴스들을 가질 수 있다. 각각의 경우에서 'n'의 사용이 프로세싱 역할에 적용되는 각각의 다른 경우와 별개로 간주되어야 하고, 이것은 프로세싱 역할 각각이 동일한 수의 인스턴스를 가질 필요가 없다는 것을 의미한다는 것을 주목하라. '분배 엔진(112)' 역할은 이벤트를 수용하고 이를 번들링하고, 라우팅 슬립(예를 들면, 도 2의 라우팅 슬립(128-1)을 참조)은 타겟(102)의 그룹을 포함한다. '전달 엔진(108)'은 이러한 번들을 수용하고, 타겟(102)으로 표현된 네트워크 위치로의 전달을 위해 라우팅 슬립을 프로세싱한다. 관리 서비스(142)에 의해 예시된 '관리 역할'은 타겟(102)을 관리하기 위한 외부 API를 제공하고, 또한 전달 엔진(108)으로부터 통계 및 에러 데이터를 수용하고 데이터를 프로세싱/저장하는 것을 담당한다.
데이터 흐름은, 이벤트가 분배를 위해 제출되는 "분배 토픽(144)" 상에서 진행된다. 제출된 이벤트는 메시지 특성을 사용하여 이벤트가 연관된 범위로 라벨링되고, 범위는 이벤트 및 원시 메시지를 구별하는 상술된 제약들 중 하나일 수 있다.
분배 토픽(114)은, 예시된 예에서, '분배 파티션(120)' 당 하나의 통과(필터링되지 않는) 가입을 갖는다. '분배 파티션'은, 통지를 주어진 범위에 대한 타겟(102)의 서브세트로 분배 및 전달하는 것을 담당하는 분리된 리소스들의 세트이다. 분배 토픽으로 전송된 각각의 이벤트의 사본은 모든 동시에 구성된 분배 파티션의 연관된 가입을 통해 사실상 동시에 모든 동시에 구성된 분배 파티션에 대해 이용 가능하여, 분배 작업의 병렬화(parallelization)를 가능하게 한다.
파티션을 통한 병렬화는 시기 적절한 분배를 달성하는 것을 돕는다. 이것을 이해하기 위해, 천만 개의 타겟(102)을 갖는 범위를 고려하라. 타겟의 데이터가 파티션되지 않은 스토어에 보유되면, 시스템은 단일, 큰 데이터베이스 결과 세트를 시퀀스로 횡단해야 할 것이거나, 결과 세트가 동일한 스토어에 대해 파티셔닝 질의를 사용하여 획득되면, 타겟 데이터에 대한 처리량은 주어진 스토어의 프론팅 네트워크 게이트웨이 인프라구조의 처리량 한계에 의해 적어도 조절될 것이고, 결과적으로, 가입 기록이 주어진 결과 세트에서 매우 늦게 발생하는 타겟(102)으로의 통지의 전달의 전달 지연은 불만족스러울 가능성이 있을 것이다.
대신에, 천만 개의 타겟(102)이 1,000 개의 스토어들 ― 각각의 스토어가 10,000 개의 타겟 기록을 보유하고, 본원에 기재된 바와 같이 이들은 질의를 수행하고 파티션의 형태로 결과를 프로세싱하는 전용 컴퓨터 인프라구조(본원에 설명된 '분배 엔진(122)' 및 '전달 엔진(108)')와 페어링됨 ― 에 걸쳐 분배되면, 타겟 디스크립션의 획득은 다양한 세트의 컴퓨트 및 네트워크 리소스에 걸쳐 병렬화될 수 있어서, 분배되는 제 1 이벤트 내지 마지막 이벤트로부터 측정되는 모든 이벤트의 분배에 대한 시간 차이를 상당히 감소시킨다.
분배 파티션의 실제 수는 기술적으로 제한되지 않는다. 이것은 단일 파티션으로부터 하나보다 더 많은 임의의 수의 파티션들까지의 범위일 수 있다.
예시된 예에서, 일단 분배 파티션(120)에 대한 '분배 엔진(122)'이 이벤트(104)를 획득하면, 분배 엔진은 우선 이벤트 데이터의 크기를 계산하고, 이어서 라우팅 슬립(128)의 크기를 계산하고, 라우팅 슬립(128)의 크기는 기본적인 메시징 시스템의 허용 가능한 최대 메시지 크기와 절대 크기 한계 중 더 적은 것 및 이벤트 크기 사이의 델타에 기초하여 계산될 수 있다. 이벤트는, '라우팅 슬립' 데이터에 대한 약간의 최소 헤드룸이 존재하는 방식으로 크기 면에서 제한된다.
라우팅 슬립(128)은 타겟(102) 디스크립션을 포함하는 리스트이다. 라우팅 슬립은, 파티션의 스토어(124)에 보유된 타겟(102)에 대해 이벤트 범위와 매칭하는 룩업 질의를 수행하고, 이벤트 범위와 매칭하는 모든 타겟(102) 및 이벤트 데이터에 대한 필터링 조건에 기초한 선택을 협소하게 하는 추가적인 조건의 세트를 반환함으로써 분배 엔진(122)에 의해 생성된다. 실시예는, 그러한 필터 조건들 중에서, 현재 인스턴스에서 유효한 것으로 간주된 그러한 타겟(102)으로 그 결과를 제한할 시간 윈도우 조건을 포함하고, 이것은 현재 UTC 시간이 타겟 디스크립션 기록에 포함된 시작/종료 유효 시간 윈도우 내에 있다는 것을 의미한다. 이러한 설비는 본 문헌에서 이후에 설명되는 블랙리스팅에서 사용된다. 룩업 결과가 횡단될 때, 그 엔진은 이벤트(104)의 사본을 생성하고, 라우팅 슬립(128)을 스토어(124)로부터 검색된 타겟 디스크립션으로 최대 크기까지 채우고, 이어서 이벤트의 결과적인 번들 및 라우팅 슬립을 파티션의 '전달 큐(130)'로 인큐잉한다.
라우팅 슬립 기술은, 분배 엔진(122)으로부터 전달 엔진(들)(108)으로의 이벤트의 이벤트 흐름 속도가 근본적인 인프라구조 상의 실제 메시지 흐름 레이트보다 더 높다는 것을 보장하고, 이것은, 예를 들면, 30 개의 타겟 디스크립션이 이벤트 데이터와 함께 라우팅 슬립(128)에 패킹될 수 있다면, 이벤트/타게 쌍의 흐름 속도가 이벤트/타겟 쌍이 메시지로 바로 그룹화되는 경우보다 30 배 더 높다는 것을 의미한다.
전달 엔진(108)은 전달 큐(130)로부터의 전달/라우팅-슬립 번들(126)의 소비자이다. 전달 엔진(108)의 역할은 이러한 번들을 디큐잉하고, 이벤트(104)를 라우팅 슬립(128)에 리스팅된 모든 목적지로 전달하는 것이다. 전달은 일반적으로 각각의 타겟 인프라구조에 의해 이해되는 통지 메시지로 이벤트 메시지를 포맷팅하는 어댑터를 통해 발생한다. 예를 들면, 통지 메시지는 윈도우® 7 폰에서 MPNS 포맷, iOS 장치에서 APN(Apple Push Notification) 포맷, 안드로이드 장치에서 C2DM(Cloud To Device Messaging) 포맷, 장치 상의 브라우저에서 JSON(Java Script Object Notation) 포맷, HTTP(Hyper Text Tranfer Protocol) 등으로 전달될 수 있다.
전달 엔진(108)은 일반적으로 독립적인 타겟에 걸쳐 전달을 병렬화하고, 타겟 인프라구조에 의해 시행되는 범위를 공유하는 타겟(102)으로의 전달을 직렬화할 것이다. 후자의 예는, 전달 엔진 내의 특정 어댑터가 단일 네트워크 접속을 통해 특정 통지 플랫폼 상으로 특정 타겟 애플리케이션에서 타겟팅된 모든 이벤트를 전송하도록 선택할 수 있다는 것이다.
분배 및 전달 엔진(122 및 108)은, 전달 엔진(108)의 독립적인 스케일링을 허용하고 전달 둔화를 회피하고 분배 질의/패킹 상태를 차단하기 위해 전달 큐(130)를 사용하여 분리된다.
각각의 분배 파티션(120)은 전달 큐(130)를 동시에 관찰하는 임의의 수의 전달 엔진 인스턴스들을 가질 수 있다. 전달 큐(130)의 길이는 얼마나 많은 전달 엔진이 동시에 활성인지를 결정하는데 사용될 수 있다. 큐 길이가 특정 임계치를 넘는 경우에, 전송 처리량을 증가시키기 위해 새로운 전달 엔진 인스턴스가 파티션(120)에 부가될 수 있다.
분배 파티션(120) 및 연관된 분배 및 전달 엔진 인스턴스는 높은 스케일에서 최적의 병렬화를 달성하기 위해 가상으로 제한되지 않는 방식으로 스케일링 업될 수 있다. 타겟 인프라구조가 일 백만 개의 이벤트 요청들을 동시 방식으로 수신하고 이를 장치로 포워딩할 수 있는 경우에, 설명된 시스템은 타겟 인프라구조가 로드 및 주어진 임의의 승인된 전달 한도 하에서 허용할 시기 적절한 모든 원하는 타겟(102)으로의 전달을 위한 이벤트 제출로 타겟 인프라구조를 포화시킬 수 있는 방식으로 ― 네트워크 인프라구조 및 데이터센터에 걸친 대역폭을 잠재적으로 레버리지하여 ― , 설명된 시스템은 그의 전달 인프라구조에 걸쳐 이벤트를 분배할 수 있다.
메시지가 그들 각각의 인프라구조 어댑터를 통해 타겟(102)으로 전달될 때, 일부 실시예에서, 상기 시스템은 통계적인 정보 아이템의 범위를 알아챈다. 그 중에서도, 전달 번들을 수신하는 것과 임의의 개별적인 메시지의 전달 사이의 듀레이션 및 실제 전송 동작의 듀레이션에 대한 시간 기간이 측정된다. 또한, 통계적인 정보의 부분은 전달이 성공적인지 또는 실패인지에 대한 표시자이다. 이러한 정보는 전달 엔진(108) 내부에서 수집되고, 범위 단위로 및 타겟-애플리케이션 단위로 평균으로 롤링 업(roll up)된다. '타겟 애플리케이션'은 통계 롤업의 특수 목적으로 도입된 그룹 식별자이다. 계산된 평균은 정의된 간격으로 전달 상태 큐(146)로 전송된다. 이러한 큐는, 이벤트 데이터를 많은 목적으로 데이터 웨어하우스로 제출하는 관리 서비스(142) 내의 작업자(들)(의 세트)에 의해 드레인된다. 이러한 목적은, 작동 모니터링 이외에, 이벤트가 전달되는 테넌트의 빌링(billing) 및/또는 제 3 상대방의 그 자신의 빌링에 대한 테넌트로의 통계의 공시(disclosure)를 포함할 수 있다.
전달 에러가 검출될 때, 이러한 에러는 일시적인 및 영구적인 에러 조건으로 분류된다. 일시적인 에러 조건은, 예를 들면, 시스템이 타겟 인프라구조의 전달 포인트에 도달하는 것을 허용하지 않는 네트워크 실패 또는 타겟 인프라구조가 전달 한계가 일시적으로 도달되었다는 것을 보고하는 것을 포함할 수 있다. 영구적인 에러 조건은, 예를 들면, 타겟 인프라구조 상의 인증 및 허가 에러 또는 수동 개입 없이 치유될 수 없는 다른 에러들 및 타겟 인프라구조가 타겟이 영구적인 기반에서 메시지를 수용하기 위해 더 이상 이용 불가하거나 의향이 없다는 것을 보고하는 경우의 에러 조건을 포함할 수 있다. 일단 분류되면, 에러 보고는 전달 실패 큐(148)로 제출된다. 일시적인 에러 조건에서, 에러는 또한 에러 조건이 해소되는 것으로 예상되는 절대적인 UTC 타임스탬프를 포함할 수 있다. 동시에, 타겟은 이러한 전달 엔진 인스턴스에 의한 임의의 추가적인 로컬 전달에 대해 타겟 어댑터에 의해 로컬적으로 블랙리스팅된다. 블랙리스트는 또한 타임스탬프를 포함할 수 있다.
전달 실패 큐(148)는 관리 역할에서 작업자(들)(의 세트)에 의해 드레인된다. 영구적인 에러는, 각각의 타겟으로 하여금 관리 역할이 액세스하는 그의 각각의 분배 파티션 스토어(124)로부터 즉시 삭제되게 할 수 있다. '삭제'는, 기록이 실제로 제거되거나, 대안적으로 기록이 그의 유효 기간의 '종료' 타임스탬프를 에러의 타임스탬프로 설정함으로써 룩업 질의에서 보이지 않게 단지 이동된다는 것을 의미할 수 있다. 일시적인 에러 조건은 타겟이 에러로 표시된 기간 동안에 비활성화되게 할 수 있다. 비활성화는 타겟의 유효 기간의 시작을 에러 조건이 치유되는 것으로 예상되는 에러에 표시된 타임스탬프까지 이동시킴으로써 이루어질 수 있다.
도 5는, 획득 파티션(140)이 분패 토픽(144)을 통해 분배 파티션(120)에 연결되는 시스템 개관 예시를 예시한다.
이전에 주목된 바와 같이, 일부 실시예에서, 일반적인 이벤트(104)는 소스(116)로부터의 정보부터 생성될 수 있다. 일반적인 이벤트는, 나중에, 데이터가 식별되고 플랫폼 특정 포맷으로 배치될 수 있는 일반적인 포맷일 수 있다. 다음은, 일 실시예에서 구현되는 일반적인 이벤트 특성을 특정 플랫폼 통지로 맵핑할 수 있는 다수의 표현 예를 이제 예시한다.
$( 네임 ) 또는 .( 네임 ) 또는 >( 네임 ) 정해진 네임을 갖는 이벤트 특성에 대한 참조. 특성 네임은 민감한 경우가 아니다. 특성 네임은, 언급된 특성의 값이 JSON 스트링 표현의 형태의 복소 형태의 데이터를 포함하는 경우에 '도트' 표현(예를 들면, 특성. 아이템)일 수 있다. 이러한 표현은 특성의 텍스트 값으로 또는 특성이 존재하지 않는 경우에 빈 스트링(empty string)으로 분해된다. 값은 타겟 필드에 대한 타겟의 크기 제한에 의존하여 클리핑될 수 있다.
$( 네임 , n) 위와 같지만, 텍스트는 n 개의 문자로 명시적으로 클리핑되고, 예를 들면, $(타이틀, 20)은 20 개의 문자로 타이틀 특성의 콘텐츠를 클리핑한다.
.( 네임 , n) 위와 같지만, 텍스트가 클리핑될 때, 텍스트에는 3 개의 도트들이 접미(suffixed)된다. 클리핑된 스트링 및 접미사의 총 크기는 n 개의 문자를 초과하지 않을 것이다. "이것은 타이트 라인이다'의 입력 특성을 갖는 .(타이틀, 20)은 '이것은 타이틀....이다'를 발생시킨다.
%( 네임 ) 출력이 URI 인코딩되는 것을 제외하고 $(네임)과 같다.
$본문은 이벤트의 엔티티 본문을 지칭한다. 엔티티 본문이 이진 데이터를 포함하는 임의의 데이터를 포함할 수 있기 때문에, 엔티티 본문은 클리핑 가능하지 않고, 있는 그대로 시스템을 통해 통과된다. $본문이 타겟에 대한 텍스트 특성으로 맵핑되면, 일부 실시예에서, 본문이 텍스트 콘텐츠를 포함하면, 맵핑은 단지 성공적일 것이다. 엔티티 본문이 비어 있다면, 표현은 빈 스트링으로 분석된다.
$카운트는 주어진 소스로부터 전달되는 이벤트들의 타겟 당 카운트를 지칭한다. 이러한 표현은, 메시지가 이러한 카운터의 리셋 동안에 마지막으로 요청된 이래로 각각의 타겟이 이러한 소스(116)로부터 얼마나 많은 메시지를 수신하였는지를 나타내는 시스템에 의해 계산된 수로 분해된다. 일부 예시적인 실시예에서, 수치는 0 내지 99의 범위를 가질 수 있다. 일단 카운터가 99에 도달하면, 이것은 추가로 증분되지 않는다. 이러한 값은 일반적으로 배지 및 타이틀 카운터에서 사용된다.
'[..텍스트...]' 또는 "[..텍스트...]"은 문자이다. 문자는 작은 따옴표 또는 큰 따옴표 내에 둘러싸인 임의의 텍스트를 포함한다. 텍스트는 자바스크립트 이스케이핑 규칙(ECMA-262, 7.8.4를 참조)에 따른 이스케이프된 형태의 특수 문자를 포함할 수 있다.
expr1 + expr2는 2 개의 표현을 단일 스트링으로 결합하는 접합 연산자이다. 상기 표현은 위의 것들 중 임의의 것일 수 있다.
expr1 ?? expr2는, 이것이 널(null) 또는 제로-길이 스트링이 아닌 경우에 expr1로 평가되고 그렇지 않다면 expr2로 평가되는 조건부 연산자이다. ?? 연산자는 + 연산자보다 더 높은 우선 순위를 갖고, 즉, 표현 'p' + $(a) ?? $(b)는 문자 'p' 다음에 오는 a 또는 b의 값을 산출할 것이다.
실시예는 이벤트(104)로부터 특성을 취하고, 타겟(102)에 대한 통지를 위해 이를 올바른 위치로 맵핑하기 위해 맵핑 언어를 사용할 수 있다.
Figure pct00001
윈도우 폰에 대한 타일 통지는 또한 카운트의 트랙을 자동적으로 유지하는 $카운트 특성을 이용할 수 있다.
Figure pct00002
iPad 애플리케이션에서, 실시예는 동일한 것을 아래에 도시된 바와 같은 경보로 맵핑할 수 있다.
Figure pct00003
또는 애플리케이션 아이콘 상의 단지 배지(카운터).
Figure pct00004
일부 실시예에서, 이러한 맵핑에 대한 디폴트는, 각각의 타겟 특성이 동일한 네임을 갖는 입력 특성으로 맵핑되는 것이다. 따라서, 실시예는 이와 같이 간결하게 윈도우 폰에서 타겟을 지정할 수 있다.
Figure pct00005
그리고, Text1, Text2 및 Param은 입력 이벤트 상의 동일한 네임을 갖는 메시지 특성으로부터 자동적으로 맵핑될 것이고 ― 그러한 특성이 없다면, 비어 있을 것이다(그들이 전송되지 않을 것임). 이것은, Windows AzureTM 서비스 버스 큐 및 토픽 가입에서와 같이, 소스(116)가 개발자 제어 하에 있는 동안에 특성에 대한 완전한 소스-측 제어를 허용한다.
구글 안드로이드에서, 맵핑은, C2DM 서비스가 통지에 대한 고정된 포맷을 정의하지 않고 안드로이드 사용자-인터페이스 쉘(shell)에 대한 어떠한 타이-인(tie-in)도 갖지 않기 때문에, 다소 상이하여, 맵핑은 키로서 타겟 특성 및 값으로서 표현을 갖는 자유로운 형태의 특성 백의 형태를 취한다. 특성맵이 생략되면, 모든 입력 특성은 C2DM 엔드포인트로 바로 맵핑된다.
Figure pct00006
선택적인 통지 분배
여기에 설명된 실시예는, 방송 시스템 내의 통지 타겟(102)이 지리적, 인구 통계적 또는 다른 기준에 기초하여 이벤트 스트림으로부터 타겟으로의 이벤트의 선택적인 분배를 허용하는 기준을 제공하는 이벤트 스트림 상에서 가입하도록 허용하기 위한 기능을 구현할 수 있다.
특히, 이벤트 데이터는 여러 조각의 카테고리화 데이터를 가질 수 있다. 예를 들면, 이벤트는 지오-태깅(geo-tagged)될 수 있다. 대안적으로, 이벤트는 가령, 이벤트에 대한 카테고리 스트링을 포함함으로써 소스에 의해 카테고리화될 수 있다.
다시 한번 도 1을 참조하고, 다양한 도면을 참조하여 상술된 바와 같이, 이벤트(104)는 다양한 형태의 카테고리화 데이터를 포함할 수 있다. 예를 들면, 이벤트는, 지리적 좌표가 경보에 포함되는 지오-태깅된 데이터를 포함할 수 있다. 분배 엔진(122-1)은 지오-태깅된 데이터를 찾기 위해 이벤트를 심사할 수 있다. 분배 엔진(122-1)은 또한 지오-태그를 갖는 데이터에 관심이 있는 타겟(102)을 결정하기 위해 데이터베이스(124-1)를 심사할 수 있다. 예를 들면, 사용자는 타겟의 위치 또는 일반적으로 위치를 지정할 수 있다. 사용자는 타겟의 위치에 관련되거나 타겟의 위치의 5 마일 내의 임의의 경보가 사용자에게 전달되어야 한다는 것을 지정할 수 있다. 분배 엔진(122-1)은 데이터 내의 지오-태그가 이러한 지정 내에 속하는지를 결정할 수 있다. 그렇다면, 이어서, 분배 엔진(122-1)은 그 특정 사용자를 이벤트(104)에 대한 라우팅 슬립(128-1)에 포함시킬 수 있다. 그렇지 않다면, 사용자는 라우팅 슬립으로부터 배제될 수 있고, 경보(104)를 통한 통지를 수신하지 않을 것이다.
지오-태깅된 이벤트에서, 사용자(또는 사용자에 대한 통지 및 이벤트 전달을 제어하는 다른 엔티티)는 임의의 수의 상이한 경계들을 지정할 수 있다. 예를 들면, 주어진 위치의 5 마일 내의 임의의 위치를 지정하는 것은 근본적으로 포인트 및 그 포인트 둘레의 원을 지정한다. 그러나, 다른 실시예는 도시, 주(state), 국가, 또는 대륙과 같은 지정학 경계, 빌딩 또는 복합 건물의 형상 등의 지정을 포함할 수 있다. 워싱턴, 레드몬드 소재의 마이크로소프트 코포레이션으로부터의 SQL 서버®는, 이벤트를 전달하기 위한 타겟(102)을 결정하기 위해 분배 파티션(120-1)의 부분으로서 사용될 수 있는 지리 공간 기능(geospatial functionality)을 갖는다.
일반적으로, 이벤트 데이터는 카테고리화 정보를 포함할 수 있다. 예를 들면, 이벤트에 포함된 스트링은 이벤트 데이터를 카테고리화할 수 있다. 라우팅 슬립(128-1) 내의 타겟의 포함은 사용자가 카테고리에 참여하거나 카테고리에서 탈퇴하지 않는 것에 기초할 수 있다. 예를 들면, 타겟(102-1)은 카테고리에 참여할 수 있고, 카테고리화 스트링은 이벤트(104-1)와 비교될 수 있다. 이벤트(104-1)가 참여된 카테고리를 표시하는 스트링을 포함하면, 타겟(102-1)은 번들(126-1)의 라우팅 슬립(128-1)에 포함되어, 이벤트(104-1)로부터의 데이터를 갖는 통지가 타겟(102-1)으로 전달될 것이다.
배지 카운터
설명된 일부 실시예는 각각의 최종 사용자에 대한 카운터의 개별적인 트래킹을 요구하지 않고 이벤트 방송 시스템에서 개별적인 카운터가 추적되도록 허용한다. 이것은 이벤트의 시리즈를 수신하는 서버에 의해 달성될 수 있고, 여기서 시리즈 내의 각각의 이벤트는 타임 스탬프의 리스트와 연관된다. 각각의 이벤트에 대한 타임 스탬프의 리스트는 이벤트에 대한 타임 스탬프 및 시리즈 내의 모든 이전 이벤트에 대한 타임 스탬프를 포함한다.
사용자는 타임-스탬프를 서버로 전송한다. 타임 스탬프는 사용자가 사용자 장치에서 일부 사용자 상호 작용을 수행한 시기의 표시자이다. 예를 들면, 타임 스탬프는 사용자가 사용자 장치 상에서 애플리케이션을 개방한 시기의 표시일 수 있다. 서버는 사용자에 의해 전송된 타임 스탬프와 사용자로 전송되려고 하는 이벤트에 대한 타임 스탬프의 리스를 비교한다. 서버는, 사용자가 타임 스탬프를 전송한 후에 발생하는 사용자로 전송되려고 하는 이벤트에 대한 타임 스탬프의 리스트 내의 타임 스탬프의 수를 카운팅하고, 배지 카운터로서 이러한 카운트를 전송한다.
여기에 첨부된 도 6에 예가 예시된다. 도 6은 타겟(102-1)을 예시한다. 타겟(102-1)은 전달 엔진(108-1)으로부터 이벤트(104) 및 배지 카운터(106)를 수신한다. 타겟(102-1)은 타임 스탬프(110)를 전달 엔진(108-1)으로 전송한다. 타겟(102-1)에 의해 전달 엔진(108-1)으로 전송된 타임 스탬프(110)는 타겟(102-1)에서 일부 작동에 기초할 수 있다. 예를 들면, 사용자는 전달 엔진(108-1)에 의해 타겟(102-1)으로 전송된 이벤트(104) 및 배지 카운터(106)와 연관된 애플리케이션을 개방할 수 있다. 애플리케이션을 개방하는 것은, 애플리케이션이 개방된 시기를 나타내는 타임 스탬프(110)가 타겟(102-1)으로부터 전달 엔진(108-1)으로 방출되게 할 수 있다.
전달 엔진(108-1)은 이벤트(104-1, 104-2, 104-3 및 104-n으로서 예시됨)의 시리즈(112)를 수신한다. 이벤트의 시리즈(112) 내의 이벤트 각각은 타임스탬프의 리스트(114-1, 114-2, 114-3 또는 114-n) 각각과 연관된다. 타임 스탬프의 각각의 리스트는 현재 이벤트에 대한 타임스탬프, 및 현재 이벤트 이전의 시리지 내의 각각의 이벤트에 대한 타임스탬프를 포함한다. 예시된 예에서, 이벤트(104-1)는 타겟(102)으로의 전달을 위해 전달 엔진(108-1)으로 전송된 제 1 이벤트이다. 따라서, 이벤트(104-1)와 연관된 리스트(114-1)는, 이벤트(104-1)가 전달 엔진(108-1)으로 전송된 시간에 대응하는 단일 엔트리(T1)를 포함한다. 이벤트(104-2)는 이벤트(104-1) 후에 전달 엔진(108-1)으로 전송되고, 따라서 이벤트(104-1 및 104-2)가 전달 엔진(108-1)으로 각각 전송되는 시기에 대응하는 타임 스탬프들(T1 및 T2)을 포함하는 리스트(114-2)와 연관된다. 이벤트(104-3)는 이벤트(104-2) 후에 전달 엔진(108-1)으로 전송되고, 따라서 이벤트들(104-1, 104-2 및 104-3)이 전달 엔진(108-1)으로 각각 전송되는 시기에 대응하는 타임 스탬프들(T1, T2 및 T3)을 포함하는 리스트(114-3)와 연관된다. 이벤트(104-n)는 이벤트(104-3)(및 짐작컨대, 리스트(114-n) 내의 타원형으로 표시된 바와 같은 다수의 다른 이벤트들) 후에 전달 엔진(108-1)으로 전송되고, 따라서, 이벤트들(104-1, 104-2, 104-3 내지 104-n)이 각각 전달 엔진(108-1)으로 전송된 시기에 대응하는 타임 스탬프들(T1, T2, T3 내지 Tn)을 포함하는 리스트(114-n)와 연관된다.
타겟(102-1)이 임의의 타임스탬프(110)를 전달 엔진(108-1)으로 전송하지 않았다고 가정하라. 전달 엔진이 이벤트(104-1)를 전송할 때, 전달 엔진은 또한 T1에 대응하는 1의 값을 갖는 배지 카운터를 전송할 것이다. 전달 엔진이 이벤트(104-2)를 전송할 때, 전달 엔진은 또한 2 개의 타임 스탬프들(T1 및 T2)의 카운터에 대응하는 2의 값을 갖는 배지 카운터를 전송할 것이다. 전달 엔진이 이벤트(104-3)를 전송할 때, 전달 엔진은 또한 3 개의 타임 스탬프들(T1, T2 및 T3)의 카운터에 대응하는 3의 값을 갖는 배지 카운터를 전송할 것이다. 전달 엔진이 이벤트(104-n)를 전송할 때, 전달 엔진은 또한 n 개의 타임 스탬프들(T1 내지 Tn)의 카운터에 대응하는 n의 값을 갖는 배지 카운터를 전송할 것이다.
이제, 타겟이 T2와 T3 사이에 발생하는 절대 시간을 갖는 타임 스탬프(110)를 전송한다고 가정하라. 짐작컨대, 이러한 포인트에서, 이벤트들(104-1 및 104-2)은 이미 타겟(102-1)으로 전달되었다. 이벤트(104-3)가 타겟으로 전송될 때, 전달 엔진(108-1)은, 배지 카운터의 값을 결정하는 시간 스탬프(110) 후에 발생하는 타임 스탬프만을 카운팅한다. 따라서, 이러한 시나리오에서, 전달 엔진(108-1)은 이벤트(104-3)와 함께 T3(이벤트들(T1 및 T2)이 타임 스탬프(110) 전에 발생하기 때문에)에 대응하는 1의 배지 카운터를 전송한다. 이러한 프로세스는, 타겟(102-1)으로부터 수신된 가장 최근의 타임 스탬프(100)가 배지 카운터 값을 결정하는데 사용되는 때까지 반복될 수 있다.
다음의 논의는 이제 수행될 수 있는 다수의 방법들 및 방법 동작을 언급한다. 방법 동작이 특정 순서로 논의되거나 특정 순서로 발생하는 흐름도로 예시되지만, 구체적으로 언급되지 않는다면 어떠한 특정 순서도 요구되지 않거나, 동작이 그 동작이 수행되기 전에 완료되는 다른 동작에 의존하기 때문에, 특정 순서가 요구된다.
이제 도 7을 참조하면, 방법(700)이 예시된다. 상기 방법은 이벤트를 소비자에게 전달하는 동작을 포함한다. 방법(700)은 자산 데이터를 액세스하는 동작(동작 702)을 포함한다. 예를 들면, 소스들(116) 각각은, 상이한 소스(116)에 대해 특정된 자산 포맷으로 데이터를 제공할 수 있다.
방법(700)은 정규화된 이벤트를 생성하기 위해 자산 데이터를 정규화하는 동작(동작 704)을 더 포함한다. 예를 들면, 위에서 예시된 바와 같이, 이벤트(104)는 상이한 소스(116)로부터의 자산 데이터를 정규화함으로써 정규화될 수 있다.
방법(700)은 가입에 기초하여 이벤트를 수신해야 하는 복수의 최종 소비자들을 결정하는 동작(동작 706)을 더 포함한다. 예를 들면, 도 2에 예시된 바와 같이, 분배 엔진(122-1)은 타겟(102)에서의 사용자가 가입하는 것을 결정하기 위해 데이터베이스(124-1)를 참조할 수 있다.
방법(700)은 정규화된 이벤트로부터의 데이터를 결정된 최종 소비자 모두에 대해 적절한 복수의 상이한 포맷들로 포맷팅하는 동작(동작 708)을 더 포함한다. 예를 들면, 도 1에 예시된 바와 같이, 정규화된 이벤트는 구체적으로 다양한 타겟(102)에 대한 적절한 포맷으로 포맷팅될 수 있다.
방법(700)은 정규화된 이벤트로부터의 데이터를 최종 소비자에 대해 적절한 포맷으로 복수의 최종 소비자들 각각으로 전달하는 동작(동작 710)을 더 포함한다.
또한, 방법들은 하나 이상의 프로세서들 및 컴퓨터 메모리와 같은 컴퓨터 판독 가능 매체를 포함하는 컴퓨터 시스템에 의해 실시될 수 있다. 특히, 컴퓨터 메모리는, 하나 이상의 프로세서들에 의해 실행될 때, 실시예에서 언급된 동작과 같은 다양한 기능들이 수행되게 하는 컴퓨터 실행 가능 명령어를 저장할 수 있다.
본 발명의 실시예는 아래에 더 상세히 논의되는 바와 같이 컴퓨터 하드웨어를 포함하는 특수 목적 또는 범용 컴퓨터를 포함 또는 활용할 수 있다. 본 발명의 범위 내의 실시예는 또한 컴퓨터-실행 가능 명령어 및/또는 데이터 구조를 전달 또는 저장하기 위한 물리적 및 다른 컴퓨터-판독 가능 매체를 포함한다. 그러한 컴퓨터-판독 가능 매체는 범용 또는 특수 목적 컴퓨터 시스템에 의해 액세스될 수 있는 임의의 이용 가능한 매체일 수 있다. 컴퓨터-실행 가능 명령어를 저장하는 컴퓨터-판독 가능 매체는 물리적 저장 매체이다. 컴퓨터-실행 가능 명령어를 전달하는 컴퓨터-판독 가능 매체는 전송 매체이다. 따라서, 비제한적인 예로서, 본 발명의 실시예는 적어도 2 개의 별개의 상이한 종류의 컴퓨터-판독 가능 매체: 물리적 컴퓨터 판독 가능 저장 매체 및 전송 컴퓨터 판독 가능 매체를 포함할 수 있다.
물리적 컴퓨터 판독 가능 저장 매체는 RAM, ROM, EEPROM, CD-ROM 또는 다른 광학 디스크 저장장치(가령, CD, DVD 등), 자기 디스크 저장장치 또는 다른 자기 저장 장치, 또는 컴퓨터-실행 가능 명령어 또는 데이터 구조의 형태로 원하는 프로그램 코드 수산을 저장하는데 사용될 수 있고, 범용 또는 특수 목적 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함한다.
"네트워크"는 컴퓨터 시스템 및/또는 모듈 및/또는 다른 전자 장치 사이의 전자 데이터의 전송을 가능하게 하는 하나 이상의 데이터 링크로서 정의된다. 정보가 네트워크 또는 다른 통신 접속(하드와이어, 무선, 또는 하드와이어 또는 무선의 결합 중 어느 하나)을 통해 컴퓨터로 전송 또는 제공될 때, 컴퓨터는 적절히 접속을 전송 매체로서 여긴다. 전송 매체는, 컴퓨터-실행 가능 명령어 또는 데이터 구조의 형태로 원하는 프로그램 코드 수단을 전달하는데 사용될 수 있고, 범용 또는 특수 목적 컴퓨터에 의해 액세스될 수 있는 네트워크 및/또는 데이터 링크를 포함할 수 있다. 위의 것들의 결합이 또한 컴퓨터-판독 가능 매체의 범위 내에 포함된다.
또한, 다양한 컴퓨터 시스템 구성요소에 도달할 때, 컴퓨터-실행 가능 명령어 또는 데이터 구조 형태의 프로그램 코드 수단은 전송 컴퓨터 판독 가능 매체로부터 물리적 컴퓨터 판독 가능 저장 매체(또는 그 역도 가능함)로 자동적으로 전송될 수 있다. 예를 들면, 네트워크 또는 데이터 링크를 통해 수신된 컴퓨터-실행 가능 명령어 또는 데이터 구조는 네트워크 인터페이스 모듈(예를 들면, "NIC") 내의 RAM에 버퍼링되고, 이어서 결국 컴퓨터 시스템 RAM 및/또는 컴퓨터 시스템에서의 더 작은 휘발성 컴퓨터 판독 가능 물리적 저장 매체로 전송될 수 있다. 따라서, 컴퓨터 판독 가능 물리적 저장 매체는, 전송 매체를 또한(또는 심지어 주로) 활용하는 컴퓨터 시스템 구송요소에 포함될 수 있다.
컴퓨터-실행 가능 명령어는, 예를 들면, 범용 컴퓨터, 특수 목적 컴퓨터 또는 특수 목적 프로세싱 장치로 하여금 특정 기능 또는 기능들의 그룹을 수행하게 하는 명령어 및 데이터를 포함한다. 컴퓨터 실행 가능 명령어는, 예를 들면, 이진, 어셈블리 언어와 같은 중간 포맷 명령어, 또는 심지어 소스 코드일 수 있다. 발명 대상이 구조적 특징 및/또는 방법론적 동작에 대해 특정된 언어로 설명되었지만, 첨부된 청구 범위에 정의된 발명 대상이 반드시 설명된 특징 또는 상술된 동작으로 국한되지는 않는다는 것이 이해되어야 한다. 오히려, 설명된 특징 및 동작은 청구 범위를 구현하는 예시적인 형태로서 개시된다.
본 발명이 개인용 컴퓨터, 데스크톱 컴퓨터, 랩톱 컴퓨터, 메시지 프로세서, 핸드-헬드 장치, 다중-프로세서 시스템, 마이크로프로세서-기반 또는 프로그래밍 가능 소비자 전자 장치, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 모바일 텔레폰, PDA, 페이저, 라우터, 스위치 등을 포함하는 많은 형태의 컴퓨터 시스템 구성을 사용하여 네트워크 컴퓨팅 환경에서 실시될 수 있다. 본 발명은, 네트워크를 통해 (하드와이어 데이터 링크, 무선 데이터 링크, 또는 하드와이어 및 무선 데이터 링크의 결합 중 어느 하나에 의해) 링크되는 로컬 및 원격 컴퓨터 시스템 모두가 작업을 수행하는 분산 시스템 환경에서 또한 실시될 수 있다. 분산 시스템 환경에서, 프로그램 모듈은 로컬 및 원격 메모리 저장 장치 모두에 위치될 수 있다.
본 발명은 본 발명의 사상 또는 특성으로부터 벗어나지 않고 다른 특정 형태로 구현될 수 있다. 설명된 실시예는 모든 면에서 단지 예시적이고 비제한적인 것으로 간주되는 것이다. 따라서, 본 발명의 범위는 앞선 상세한 설명에 의해서보다는 첨부된 청구범위에 의해 표시된다. 청구 범위의 동등물의 의미 및 범위 내에 속하는 모든 변화는 첨부 범위 내에 포함되는 것이다.

Claims (7)

  1. 이벤트들을 소비자들에게 전달하는 방법으로서,
    자산 데이터(proprietary data)를 액세스하는 단계와,
    정규화된 이벤트를 생성하기 위해 상기 자산 데이터를 정규화하는 단계와,
    가입(subscription)에 기초하여, 상기 이벤트를 수신해야 하는 복수의 최종 소비자들을 결정하는 단계와,
    상기 정규화된 이벤트로부터의 데이터를 상기 결정된 최종 소비자들 모두에 대해 적절한 복수의 상이한 포맷들로 포맷팅하는 단계와,
    상기 최종 소비자들에 대해 적절한 포맷으로 상기 정규화된 이벤트로부터의 데이터를 상기 복수의 최종 소비자들 각각으로 전달하는 단계를 포함하는
    이벤트 전달 방법.
  2. 제 1 항에 있어서,
    상기 자산 데이터를 액세스하는 단계는 복수의 소스들로부터의 데이터를 액세스하는 단계를 포함하는
    이벤트 전달 방법.
  3. 제 1 항에 있어서,
    상기 최종 소비자들에 대해 적절한 포맷으로 상기 정규화된 이벤트로부터의 데이터를 상기 복수의 최종 소비자들 각각으로 전달하는 단계는, 상기 정규화된 포맷의 상기 이벤트로부터의 데이터를 먼저 팬 아웃(fanning out)하는 단계를 포함하는
    이벤트 전달 방법.
  4. 제 1 항에 있어서,
    상기 최종 소비자들에 대해 적절한 포맷으로 상기 정규화된 이벤트로부터의 데이터를 상기 복수의 최종 소비자들 각각으로 전달하는 단계는 상기 이벤트를 복수의 번들들(bundles)로 패키징하는 단계를 포함하고,
    상기 번들들 각각은 상기 정규화된 포맷의 이벤트 및 라우팅 슬립(routing slip)을 포함하고, 상기 라우팅 슬립은 복수의 최종 소비자들을 식별하고, 상기 라우팅 슬립에서 식별된 상기 최종 소비자들에 대한 포맷들을 식별하는 것을 포함하는
    이벤트 전달 방법.
  5. 제 4 항에 있어서,
    상기 이벤트를 복수의 번들들로 패키징하는 단계는, 데이터베이스 내의 최종 소비자 선호도들을 참조함으로써 어떠한 최종 소비자들이 상기 라우팅 슬립 내에 포함되는지를 결정하기 위해 상기 데이터베이스를 참조(consulting)하는 단계를 포함하는
    이벤트 전달 방법.
  6. 제 1 항에 있어서,
    상기 정규화된 이벤트를 생성하기 위해 상기 자산 데이터를 정규화하는 단계는, 키 값 쌍들로서 상기 데이터를 표현하는 단계를 포함하고,
    상기 쌍들은 이벤트 정규화 시스템에 의해 추가로 해석되지 않는 단일의 불투명한, 이진 청크(binary chunk)의 데이터에 의해 동반되는
    이벤트 전달 방법.
  7. 제 1 항에 있어서,
    상기 정규화된 이벤트로부터의 데이터를 상기 결정된 최종 소비자들 모두에 대해 적절한 복수의 상이한 포맷들로 포맷팅하는 단계는, 동일한 네임을 갖는 메시지 특성들을 맵핑함으로써 상기 정규화된 이벤트로부터의 하나 이상의 특성들을 포맷으로 맵핑하는 단계를 포함하는
    이벤트 전달 방법.
KR1020147006535A 2011-09-12 2012-09-10 다중-소스 푸시 통지를 다수의 타겟들로의 분배 기법 KR20140072044A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201161533669P 2011-09-12 2011-09-12
US61/533,669 2011-09-12
US13/278,415 2011-10-21
US13/278,415 US20130067024A1 (en) 2011-09-12 2011-10-21 Distributing multi-source push notifications to multiple targets
PCT/US2012/054349 WO2013039798A2 (en) 2011-09-12 2012-09-10 Distributing multi-source push notifications to multiple targets

Publications (1)

Publication Number Publication Date
KR20140072044A true KR20140072044A (ko) 2014-06-12

Family

ID=47830824

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147006535A KR20140072044A (ko) 2011-09-12 2012-09-10 다중-소스 푸시 통지를 다수의 타겟들로의 분배 기법

Country Status (6)

Country Link
US (1) US20130067024A1 (ko)
EP (1) EP2756475A4 (ko)
JP (1) JP2014528126A (ko)
KR (1) KR20140072044A (ko)
CN (1) CN103051667B (ko)
WO (1) WO2013039798A2 (ko)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8595322B2 (en) 2011-09-12 2013-11-26 Microsoft Corporation Target subscription for a notification distribution system
US20130091197A1 (en) 2011-10-11 2013-04-11 Microsoft Corporation Mobile device as a local server
US8949307B2 (en) * 2011-11-15 2015-02-03 Google Inc. Cloud-to-device messaging for application activation and reporting
US10353684B2 (en) * 2012-02-08 2019-07-16 Flytxt BV Method to launch an application on a mobile device using short code
CN106974688B (zh) 2012-10-31 2022-02-01 奇普林医药公司 外科切口和闭合设备
US20140304787A1 (en) * 2013-04-05 2014-10-09 Microsoft Corporation Badge notification subscriptions
US20140324503A1 (en) * 2013-04-30 2014-10-30 Microsoft Corporation Multi-source data subscriptions
TWI513255B (zh) * 2013-06-07 2015-12-11 Mitake Information Corp 經由雙重路線傳遞與接收行動通知之系統、裝置與方法
US10248474B2 (en) * 2014-01-29 2019-04-02 Microsoft Technology Licensing, Llc Application event distribution system
US9847918B2 (en) * 2014-08-12 2017-12-19 Microsoft Technology Licensing, Llc Distributed workload reassignment following communication failure
US11916727B2 (en) 2015-01-23 2024-02-27 Ebay Inc. Processing high volume network data
US10425341B2 (en) 2015-01-23 2019-09-24 Ebay Inc. Processing high volume network data
CN104615702B (zh) * 2015-01-30 2020-05-15 五八有限公司 一种信息推送方法及装置
US9830603B2 (en) 2015-03-20 2017-11-28 Microsoft Technology Licensing, Llc Digital identity and authorization for machines with replaceable parts
US9929989B2 (en) 2015-09-01 2018-03-27 Microsoft Technology Licensing, Llc Interoperability with legacy clients
US9882854B2 (en) 2015-09-01 2018-01-30 Microsoft Technology Licensing, Llc Email parking lot
US9979682B2 (en) 2015-09-01 2018-05-22 Microsoft Technology Licensing, Llc Command propagation optimization
US10163076B2 (en) 2015-09-01 2018-12-25 Microsoft Technology Licensing, Llc Consensus scheduling for business calendar
US9977666B2 (en) 2015-09-01 2018-05-22 Microsoft Technology Licensing, Llc Add a new instance to a series
KR101889159B1 (ko) * 2015-10-21 2018-08-17 주식회사 포스코 철강 공정 미들웨어의 이벤트 서비스 방법 및 프레임워크 시스템
US9813781B2 (en) * 2015-10-27 2017-11-07 Sorenson Media, Inc. Media content matching and indexing
CN107665225B (zh) * 2016-07-29 2022-01-28 北京京东尚科信息技术有限公司 信息推送方法和装置
US10628237B2 (en) * 2016-09-16 2020-04-21 Oracle International Corporation Cloud service integration flow
CN106375977A (zh) * 2016-09-18 2017-02-01 中国联合网络通信集团有限公司 一种通信小区收入的计算方法和装置及服务器
US10375191B2 (en) * 2017-11-29 2019-08-06 Microsoft Technology Licensing, Llc Notifications on an online social networking system
US11057442B2 (en) * 2018-01-27 2021-07-06 Vmware, Inc. System and method for workspace sharing
WO2019164807A1 (en) * 2018-02-20 2019-08-29 Veniam, Inc. Systems and methods for real-time handling and processing of data in a network of moving things
US10681164B2 (en) * 2018-05-03 2020-06-09 Microsoft Technology Licensing, Llc Input and output schema mappings
CN110971643B (zh) * 2018-09-30 2022-07-29 北京国双科技有限公司 消息推送方法和装置、存储介质和处理器
US11169855B2 (en) * 2019-12-03 2021-11-09 Sap Se Resource allocation using application-generated notifications
US10719517B1 (en) * 2019-12-18 2020-07-21 Snowflake Inc. Distributed metadata-based cluster computing

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2361861A1 (en) * 2001-11-13 2003-05-13 Ibm Canada Limited-Ibm Canada Limitee Wireless messaging services using publish/subscribe systems
US7143118B2 (en) * 2003-06-13 2006-11-28 Yahoo! Inc. Method and system for alert delivery architecture
US7743137B2 (en) * 2005-02-07 2010-06-22 Microsoft Corporation Automatically targeting notifications about events on a network to appropriate persons
US8588578B2 (en) * 2006-03-29 2013-11-19 Transpacific Digidata, Llc Conversion of video data to playable format
US20070260674A1 (en) * 2006-05-02 2007-11-08 Research In Motion Limited Push framework for delivery of dynamic mobile content
US20090187593A1 (en) * 2008-01-17 2009-07-23 Qualcomm Incorporated Methods and Apparatus for Targeted Media Content Delivery and Acquisition in a Wireless Communication Network
WO2010037031A2 (en) * 2008-09-26 2010-04-01 Fwix, Inc. System and method for aggregating web feeds relevant to a geographical locale from multiple sources
US8321401B2 (en) * 2008-10-17 2012-11-27 Echostar Advanced Technologies L.L.C. User interface with available multimedia content from multiple multimedia websites
US8819258B2 (en) * 2009-05-07 2014-08-26 International Business Machines Corporation Architecture for building multi-media streaming applications
KR20110071828A (ko) * 2009-12-21 2011-06-29 한국전자통신연구원 콘텐츠 변환 장치 및 방법

Also Published As

Publication number Publication date
CN103051667A (zh) 2013-04-17
WO2013039798A3 (en) 2013-05-10
EP2756475A4 (en) 2015-04-22
WO2013039798A2 (en) 2013-03-21
JP2014528126A (ja) 2014-10-23
CN103051667B (zh) 2017-04-19
EP2756475A2 (en) 2014-07-23
US20130067024A1 (en) 2013-03-14

Similar Documents

Publication Publication Date Title
KR20140072044A (ko) 다중-소스 푸시 통지를 다수의 타겟들로의 분배 기법
US9208476B2 (en) Counting and resetting broadcast system badge counters
JP6126099B2 (ja) タイムリーイベントデータ分配用マーケットプレイス
US8595322B2 (en) Target subscription for a notification distribution system
US10924414B2 (en) Processing high volume network data
US10244066B2 (en) Push notification delivery system
CN107431664B (zh) 消息传递系统和方法
US10484190B2 (en) Managing channels in an open data ecosystem
US10270726B2 (en) Selective distribution of messages in a scalable, real-time messaging system
US7606808B2 (en) Maintaining and establishing subscriptions with load-balanced servers
US20130066980A1 (en) Mapping raw event data to customized notifications
JP6067714B2 (ja) イベントデータを取得するスケールアウトシステム
US20180248772A1 (en) Managing intelligent microservices in a data streaming ecosystem
EP3803616A1 (en) Change notifications for object storage
Pan et al. Intelligent push notification for converged mobile computing and internet of things
JP2014531072A (ja) 多数のデバイスへのイベントの配信
US20190293433A1 (en) System and method for indoor position determination

Legal Events

Date Code Title Description
N231 Notification of change of applicant
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid