消息传递系统和方法
文献发布时间:2023-06-19 11:35:49
本申请是2015年1月23日提交的、申请号为201580074346.9、发明名称为“处理大容量网络数据”的专利申请的分案申请。
技术领域
本申请的示例实施例一般涉及数据处理的技术领域。
背景技术
可以使用发布者-订户布置来执行机器之间的通信。发射机机器用作消息发布者,也称为消息生产者。发射机机器可以使用网络发送(例如,生产或发布)一个或多个消息。发射机机器通过网络向一个或多个接收机机器发送消息。然而,该消息不是寻址到任何具体的接收机机器。相反,发射机机器使用多播网络协议来发送消息,所述多播网络协议允许多个接收机机器各自接收该消息。多播协议支持一对多通信,发射机机器没有指示哪个特定接收机机器将处理该消息的信息。在这点上,多播通信不同于点对点(例如,一对一)通信。接收机机器用作消息订户,也称为消息消费者。接收机机器可以接收(例如,消费)从发射机机器发送的消息。接收机机器监视网络以获取使用多播协议发送的消息。
发明内容
根据本公开实施例的一方面,提供了一种消息传递系统,包括:识别模块,被配置为接收第一数据,所述第一数据标识能用于接收链接到主题的事件消息的消费者设备,所述识别模块还配置为接收第二数据,所述第二数据标识能用于提供链接到所述主题的事件消息的生产者设备;配置模块,被配置为将多个值链接到与所述主题链接的相应消费者设备,所述多个值是针对所述主题计算的;以及调度器模块,包括一个或多个处理器,被配置为从所述生产者设备访问链接到所述主题的第一数据消息,所述第一数据消息包括密钥值,所述调度器模块还配置为:基于所述密钥值与相应消费者设备的所述多个值的比较,将所述第一数据消息提供给所述消费者设备中所选择的消费者设备。
根据本公开实施例的另一方面,提供了一种消息传递方法,包括:接收第一数据,所述第一数据标识能用于接收链接到主题的事件消息的消费者设备;接收第二数据,所述第二数据标识能用于提供链接到所述主题的事件消息的生产者设备;由一个或多个处理器将多个值链接到与所述主题链接的相应消费者设备,所述多个值是针对所述主题计算的;从所述生产者设备访问链接到所述主题的第一数据消息,所述第一数据消息包括密钥值;以及基于所述密钥值与相应消费者设备的多个值的比较,向所述消费者设备中所选择的消费者设备提供所述第一数据消息。
本申请可以提供一种高效的消息传递系统和方法,用于处理消息生产者和消息消费者之间的大量网络数据。该系统和方法可以响应于负载变化实时地弹性缩放消费者集群,并且可以在计算机器故障引起的网络拥塞的情况下自动地重新平衡业务量。
附图说明
在附图中,类似的附图标记可以在不同的视图中描述相似的组件,其中附图不一定按比例绘制。具有不同字母或数字后缀的类似数字可以表示类似组件的不同实例。附图通过示例而非限制的方式一般性地示出本文档中讨论的各种实施例。
图1是描绘了在其中可以部署一个示例实施例的客户端-服务器系统的网络示图。
图2是示出根据示例实施例的移动设备的框图。
图3是示出消息传递系统的示例实施例的示图,该消息传递系统包括形成图1的客户端-服务器系统的至少一部分的多个模块。
图4是示出根据示例实施例的示例生产者-消费者系统的框图。
图5是示出根据示例实施例的示例消息传递栈的框图。
图6是示出根据示例实施例的示例生产者-代理-消费者系统的框图。
图7是示出根据示例实施例的广告的示例结构的框图。
图8是示出根据示例实施例的示例消息传递系统架构的框图。
图9是示出根据示例实施例的由消息传递系统部署的示例监视系统的框图。
图10是根据示例实施例示出为了重新配置消费者集群在生产者和消费者之间的交互的示例实施例的示意图。
图11是示出根据示例实施例的集群消息传递的示例方法的流程图。
图12是示出根据示例实施例的示例会话器系统架构的框图。
图13是示出包括多个模块的会话器的示例实施例的框图。
图14是示出根据示例实施例的示例会话器架构的框图。
图15是示出根据示例实施例的生成会话化数据的示例方法的流程图。
图16是示出根据示例实施例的生成和更新会话的示例方法的流程图。
图17是示出根据示例实施例的会话生命周期管理的示例方法的流程图。
图18是具有计算机系统的示例形式的机器的框图,在所述计算机系统中,可以执行指令以使所述机器执行本文讨论的任意一个或多个方法。
具体实施方式
现在将具体参照用于执行本发明主题的具体示例实施例。在附图中示出了这些具体实施例的示例。应当理解,它们不旨在将权利要求的范围限制为所描述的实施例。相反,其旨在涵盖包括在所附权利要求所限定的本公开的范围内的备选方案、修改和等同物。在以下描述中,阐述了具体细节,以提供对本主题的透彻理解。在没有这些具体细节中的一部分或全部的情况下,实施例也可以被实现。此外,可能没有详细描述公知的特征,以避免不必要地使主题模糊不清。
根据本公开,使用各种类型的操作系统、编程语言、计算平台、计算机程序和/或类似机器来实现组件、过程步骤和/或数据结构。此外,本领域技术人员应认识到,在不脱离本文公开的本发明概念的范围和精神下,同样可以使用诸如硬连线设备、现场可编程门阵列(FPGA)、专用集成电路(ASIC)等设备,以开发一个或多个设备技术方案。实施例可以同样有形地体现为存储在计算机可读介质(例如,存储器设备)上的计算机指令集,以开发基于计算机指令的实施例的技术方案。
描述了用于分发和/或处理数据的示例方法和系统,所述示例方法和系统具体实现在电子设备上。在下文的描述中,出于解释的目的,阐述了许多细节,以便提供对示例实施例的彻底理解。然而,本领域技术人员显然清楚:可以在没有这些具体细节的情况下实施本发明的主题。
在示例实施例中,公开了用于在网络内实时地分发事件消息,会话化(sessionize)事件流以及管理事件流的视图的系统和方法。例如,实时的复杂事件处理(CEP)涉及每秒处理数百万个事件。在一些场景下,CEP可能涉及以非常高的速度(例如,高达每秒100万个事件)、数量(例如,TB数据)和/或多样性(例如,非结构化的和半结构化的数据)来摄取事件流。CEP引擎是用于分析事件流以计算聚合事件中包含的信息元组或信息元组的组合的CEP实例。有时可以将多个流联合以关联事件流或在事件到达时检测模式。然而,在单个节点中运行的CEP引擎不会具有处理这么大数量的处理资源。
如本文所公开的,示例性实施例在集群中部署多个CEP引擎,并将其部署在多个设备上。示例性实施例在CEP引擎的集群上分布工作负载。这种布置可以提供可缩放的系统。该系统可以弹性地缩放CEP引擎的集群,使得随着负载的增加,新的CEP引擎可被动态添加到集群中,而不会影响集群的健康(如性能、网络稳定性等)。在CEP引擎故障或特定实例变得忙碌的情况下,集群可以自愈。此外,系统可以跨一个或多个数据中心部署该集群。在这种场景下,事件消息流过广域网。为了有效地使用通信带宽,消息传递系统可以批处理和压缩在网络上传播的消息。
如本文所使用的,事件可以指消息传递系统中的消息。应当理解,消息传递系统的示例实施例可以用于不同于CEP使用情形的应用中。
图1是描绘了在其中可以部署一个示例实施例的客户端-服务器系统100的网络示图。具有基于网络的市场或发布系统的示例形式的联网系统102经由网络104(例如互联网或广域网(WAN))向一个或多个客户端提供服务器侧功能。例如,图1示出了web客户端106(例如,浏览器)和在相应的客户端机器110和112上执行的编程客户端108。这里,客户端机器110在各种应用中可被称为“客户端设备”或“用户设备”。
应用接口(API)服务器114和web服务器116耦合至一个或多个应用服务器118,并分别向一个或多个应用服务器140提供编程和web接口。应用服务器118容宿一个或多个市场应用120和支付应用122。应用服务器118被示出为进而耦合到便于处理数据的一个或多个数据处理服务器123以及便于访问一个或多个数据库126的数据库服务器124。
市场应用120可以向访问联网系统102的用户提供多个市场功能和服务。支付应用122可以类似地向用户提供多个支付服务和功能。支付应用122可以允许用户在账户中累积值(例如流通货币(如美元)或专有货币(如“积分”)),并且然后用累积的值兑换通过市场应用120可以购买到的项目。
数据处理服务器123可以向联网系统102提供众多功能和服务。在示例实施例中,数据处理服务器可以基于从客户端机器110接收的数据来部署用于生成事件消息的多个生产者设备。此外,数据处理服务器123可以部署用于处理生产者设备生成的事件消息的多个CEP引擎。数据处理服务器123可以对应于部署分布式架构的多个服务器。例如,多个数据处理服务器123可被部署在多个数据中心内作为生产者设备。作为补充或替代,多个数据处理服务器123可被部署在多个数据中心内作为CEP引擎。如稍后将参考图3描述的,数据处理服务器123可以包括用于促进将事件消息路由给相应CEP引擎的附加组件。
此外,虽然图1所示出的系统100采用客户端-服务器架构,但是本发明主题当然不限于此种架构,并且可以同样良好地应用于例如分布式或对等架构系统。各种市场应用120和支付应用122还可被实现为独立的软件程序,所述独立的软件程序不一定具有联网能力。
另外,尽管以上将各种市场和支付应用120、122描述为具有单独的功能,但是在备选实施例中,这些功能可以由各种市场和支付应用120、122中的任意一个或多个来执行。
网络客户端106通过网络服务器116所支持的网络接口访问各个市场应用120和支付应用122。类似地,編程客户端108通过API服务器114所提供的編程接口访问由市场应用120和支付应用122提供的各种服务和功能。例如,編程客户端108可以是卖家应用(例如,由加利福尼亚州圣何塞的eBay Inc.开发的TurboLister应用),其用于使得卖家能够以离线方式创作和管理联网系统102上的列表,并且执行編程客户端108与联网系统102之间的批处理模式通信。
图1还示出在第三方服务器130上执行的第三方应用128,该第三方应用128能够经由API服务器114提供的编程接口对联网系统102进行编程访问。例如,第三方应用128可以利用从联网系统102获取的信息来支持由第三方容宿的网站上的一个或多个特征或功能。例如,第三方网站可以提供由联网系统102的相关应用支持的一个或多个促销、市场或支付功能。
图2是示出根据示例实施例的移动设备200的框图。在示例实施例中,移动设备200可以与图1的客户端机器110相对应。具体地,移动设备200可以基于移动设备200从用户接收的用户输入与该联网系统交互。用户输入的示例可以包括:文件请求、页面查看、点击、表单提交、“按键”事件、输入设备事件和/或其他客户端机器侧交互。文件请求可以包括请求例如网页、网页的组件、图像数据、来自市场应用120的数据、以及网络资源。用户输入可以附加地或替代地对应于交互序列,如点击路径或流(例如,客户端机器侧交互的有序序列)。
移动设备200可以包括处理器202。处理器202可以是专门配置用于移动设备200的各种不同类型的商业可获得的处理器中的任意一个(例如,XScale架构微处理器、没有互锁管线阶段(MIPS)架构处理器的微处理器、或者另一种类型的处理器)。存储器204(例如随机存取存储器(RAM)、闪存或其他类型的存储器)通常可以被处理器202访问。存储器204可以适于存储操作系统206以及应用208,例如可以向用户提供基于位置的服务(LBS)的移动位置启用的应用。处理器202可以直接地或者经由合适的中间硬件连接到显示器210,并且连接到一个或多个输入/输出(I/O)设备212,例如键盘、触摸板传感器、麦克风等。类似地,在一些实施例中,处理器202可以耦接到与天线216接口连接的收发机214。根据移动设备200的性质,收发机214可以配置为经由天线216发送和接收蜂窝网络信号、无线数据信号或其他类型的信号。此外,在一些配置中,全球定位系统(GPS)接收机218还可以利用天线216来接收GPS信号。
示例消息传递系统
在本文公开的示例实施例中,消息传递系统利用发布-订阅(本文中也称为“pub-sub”)过程,通过该过程,连接到网络的生产者设备(本文中也称为“发射机设备”)和消费者设备(本文中也称为“接收机设备”)通过由消费者设备经由网络内内的中继代理发送的广告来发现彼此。如上所述,生产者设备可以由图1的数据处理服务器123来具体实施。作为补充或替代,生产者设备可以由图1的客户端机器110来具体实施。消费者设备对应于数据处理服务器123中的一个或多个服务器。消费者设备容宿用于处理生产者设备生成的事件消息的一个或多个CEP引擎。中继代理可以是数据处理服务器123容宿的用于在运行时期间对生产者设备和消费者设备进行接口连接的模块。
例如,在操作中,消息传递系统可以识别可用于接收和处理生产者设备生成的与给定主题有关的消息的多个消费者设备(例如,形成“消费者集群环”)。生产者设备维护已被识别为已订阅该主题的消费者设备的注册表。随着从消费者集群环移除消费者设备或向消费者集群环添加消费者设备,生产者设备更新生产者的注册表。
生产者设备生成并向消费者设备发送表示事件(例如表示客户端机器侧交互)的事件消息(在本文中也称为“事件数据”)。事件是信息元组的集合。元组由密钥(key)组成,例如美国信息交换标准代码(ASCII)字符或其他合适的字符串数据类型以及对应值(例如原始数据类型)的集合。示例原始类型包括:整数、布尔值、浮点数、定点数、字符和/或字符串、数据范围、和/或编程语言中内嵌的类似数据类型。可以根据事件的匹配信息元组将事件归类到类型中。事件流是随时间接收到的事件的集合。存在针对每个事件类型的事件流。在示例实施例中,信息元组的集合表示一个或多个用户交互或者和用户与web资源(例如,在用户设备上执行的网页或与互联网连接的软件程序)的交互关联的用户事件。
生产者设备,例如使用一致哈希,将多个哈希值与消费者集群的每个消费者设备相关联。哈希值可被视为圆上的各个消费者节点。如此,向消费者设备指派哈希值实现了对所识别的消费者集群进行划分以形成针对给定主题的消费者节点的逻辑环。换言之,每个消费者设备由逻辑环上的多个消费者节点表示。
可以基于对应消费者设备的标识符来向消费者设备指派哈希值。消费者设备的标识符的示例包括:消费者设备的全球唯一标识符(“GUID”);应用标识符(“appid”);GUID和APPID、IP地址等的组合(例如,级联)。消费者设备可以通过在结合图7描述的广告数据内提供标识符来向生产者设备提供标识符。
可以使用标识符作为种子,以伪随机方式向消费者设备指派哈希值。在示例实施例中,生产者设备通过下述方式向消费者设备指派哈希值:使用消费者设备的标识符作为种子来执行伪随机数产生器,以生成多个值。所生成的值可被指派为链接到消费者设备的哈希值。以伪随机方式指派哈希值可以有助于将消费者节点大致均匀地分布在逻辑环上。此外,以伪随机方式指派哈希值可以促进在添加或移除消费者设备时实现大致均匀的分布,例如,不需要向现有的消费者节点重新指派哈希值。
对消费者设备的哈希值指派可被存储在生产者设备中的注册表。在操作期间,生产者设备可以通过使用哈希函数来确定给定哈希值到对应消费者设备的映射。
如稍后将更详细地描述的,在示例实施例中,针对给定主题发布消息的每个生产者设备产生相同的逻辑环。例如,针对给定主题进行发布的每个生产者设备可以具有注册为接收给定主题的事件消息的相同的消费者设备。消费者设备将向每个生产者设备提供相同的标识符。此外,每个生产者设备可以使用相同的机制来指派哈希值。如上文已经描述的,一个示例机制是使用标识符作为种子以伪随机方式指派哈希值。因此,每个生产者设备生成在哈希值和消费者设备之间的相同指派。
生产者设备将事件消息调度给消费者集群的消费者设备。例如,生产者设备使用事件消息中包含的密钥来产生划分密钥,以选择一个消费者设备来接收事件消息。在一个示例实施例中,生产者设备计算划分密钥的哈希值,并将计算出的哈希值与表示向生产者设备注册的消费者设备的消费者节点的哈希值进行匹配。生产者设备基于该划分密钥与各个消费者节点的哈希距离的比较来选择消费者设备之一接收事件消息。例如,生产者设备通过下述方式来进行该选择:以划分密钥的哈希的点为起点,在一个方向(例如,顺时针或逆时针)上绕着逻辑环“走”,直到到达第一个消费者节点。生产者设备选择与第一个消费者节点关联的消费者设备,并将事件消息路由给所选择的消费者设备进行处理。
使用这种方法可以提供一种响应于消费者设备故障或工作负载不平衡向消费者设备重新分发工作负载的有效方法。例如,如果节点出现故障,则生产者设备会移除或忽略与故障的消费者设备关联的消费者节点。如所述的,当消费者设备的消费者节点被移除时,剩余消费者设备的消费者节点的分布保持是大致均匀分布的。这可以是真实的,因为原本调度给故障的消费者设备的事件消息被重新分发给下一个最近的正常工作的消费者设备的消费者节点,同时到剩余消费者设备的事件消息的路由保持不变。类似的,当消费者设备变得忙碌时,生产者设备可以通过移除忙碌的消费者设备的消费者节点来自动地将工作负载重新平衡给其他消费者。生产者设备可以发现缓慢的消费者设备,并且将寻址到该消费者设备的事件消息发送给稍后将被重播(例如,处理)的堆外(off-heap)持久队列,稍后将结合图4和图9进行更详细的描述。消息传递系统产生的统计数据可被用于弹性地缩放云中的消费者节点。
因此,示例性实施例的一个方面是:消息传递系统提供具有自愈特征的可缩放基础设施,以有利于在例如云环境中的非常大量的复杂事件处理。此外,消息传递系统提供:具有相同划分密钥的事件消息被发送给云中的相同消费者设备,从而有利于计算聚合,且用于对模式进行关注(watch for)并对那些模式做出反应。消息传递系统可被部署在网络云中或其他分布式计算环境中,因为消息传递系统可以批处理、压缩和启用流控制。消息传递系统可以响应于负载变化实时地弹性缩放消费者集群,并且可以在计算机器故障引起的网络拥塞的情况下自动地重新平衡业务量。如此,消息传递系统的示例实施例有利于在网络云上部署消息传递系统并且有利于复杂的事件处理。
应当理解,消息传递系统的示例性实施例可被用在互联网应用跟踪流水线中以及部署例如JETSTREAM CEP框架的若干其他使用场合中。CEP框架可被用于构建针对用户行为分析、监视、广告、互联网营销以及风险和安全使用场合的分布式应用。下面描述说明性示例实施例。
图3是示出消息传递系统300的示例实施例的示图,该消息传递系统包括形成图1的客户端-服务器系统的至少一部分的多个模块。所示数据分析系统300的模块302-312包括:应用接口模块302、中继代理模块304、调度器模块306、配置模块308、数据库接口模块310、以及数据库更新模块312。应用接口模块302包括:面向消费者的子模块314、面向生产者的子模块316、以及面向第三方的子模块318。
在一些实施例中,数据分析系统300的组件可被包括在图1的数据处理服务器123中。然而,应当理解,在备选实施例中,下面描述的数据分析系统300的一个或多个组件可以附加地或备选地被包括在其他设备中,所述其他设备如图1的市场应用120、支付应用122、服务器114、116、118、130、网络104和/或客户端机器110、112中的一个或多个。还将理解,数据分析系统300还可被部署在除在线市场之外的系统中。
数据分析系统300的模块302-312可容宿在通信耦合为能够进行服务器机器间通信的专用或共享服务器机器(未示出)上。模块302-312中的一个或多个可被部署在一个或多个数据中心中。模块302-312中的每一个彼此间通信耦合(例如经由适当的接口),并耦合到各种数据源,从而允许在数据分析系统300的模块302-312之间传递信息,或者允许模块302-312共享和访问公共数据。数据分析系统300的各种模块还可以经由数据库服务器124访问一个或多个数据库126。
消息传递系统300可以有利于实现在联网的分布式环境上的大规模事件数据的实时CEP。为此,图3所示的数据分析系统300包括:中继代理模块304、调度器模块306、配置模块308、数据库接口模块310、以及数据库更新模块312。
应用接口模块302可以是有利于在消息传递系统300与客户端、服务器和网络的其他设备之间(例如在图1的数据处理服务器123与市场应用120、支付应用122、服务器114、116、118、130、网络104和/或客户端机器110、112中的一个或多个之间)进行数据通信的硬件实现的模块。特别地,应用接口模块302包括:面向消费者的子模块314,其用于提供与消费者设备的接口。面向生产者的子模块316提供与生产者设备的接口。面向第三方的子模块318提供与多个第三方服务器的接口。在示例实施例中,消息传递系统300可以与第三方应用128接口连接,所述第三方应用128提供基于web的服务,例如但不限于:搜索服务、数据存储、数据管理、数据挖掘、网络活动监视和分析、以及类似服务。消息传递系统300可以通过与例如第三方应用128交互来接收这样的服务。
在示例实施例中,生产者设备和消费者设备使用发布-订阅模型。因此,面向生产者的子模块314提供针对生产者设备(例如,图1的数据处理服务器123中的一个或多个服务器)的接口,以提供用于指示生产者设备发布的主题的广播数据。该广播数据标识可用于提供链接到主题的数据消息的生产者设备。
面向消费者的子模块316提供针对消费者设备(例如,图1的数据处理服务器123中的一个或多个服务器)的接口,以提供用于指示消费者设备请求订阅的主题的广告数据。该广告数据标识可用于接收链接到所指示的主题的事件消息的消费者设备。
中继代理模块304(此处也称为“识别模块”)可以是有利于链接生产者设备和消费者设备的硬件实现的模块。中继代理模块可以由图1的数据处理服务器123中的一个或多个服务器来具体实施。在操作中,中继代理模块304经由面向生产者的子模块314从生产者设备接收广播数据,并且经由面向消费者的子模块316从消费者设备接收广告数据。基于从生产者设备和消费者设备接收的数据,中继代理模块304可以用于链接具有匹配主题的生产者设备和消费者设备。
调度器模块306可以是有助于将事件消息从生产者设备分发给链接到生产者设备的消费者设备的硬件实现的模块。示例调度方案包括轮循和一致哈希等。当生产者设备提供广播消息以向中继代理模块304注册时,调度器模块306实例化在生产者设备上容宿的调度器实例。针对给定主题的每个实例可以是相同的,因此被称为“调度器被绑定到主题”。
配置模块308可以是有助于通过可缩放的容错的方式向消费者设备调度事件消息的硬件实现的模块。配置模块308将多个值(诸如哈希值)链接到与主题链接的相应消费者设备。例如,配置模块308可以基于对应的消费者设备标识符生成多个值。该多个值的生成可以响应于接收相应的请求消息(例如,将结合图7更详细地描述的广告数据)。可以根据每个主题计算该多个值。配置模块308可以包括伪随机数产生器,其用以生成与一致哈希调度器一起使用的哈希值。
在示例性实施例中,调度器模块308以独立于生产者设备的方式确定链接到各个消费者设备的哈希值。以这种方式,向针对给定主题进行发布的每个生产者设备提供相同的哈希值。
在操作中,调度器模块306从生产者设备访问(例如,接收或检索)链接到主题的事件消息。事件消息包括密钥值,并且调度器模块306基于密钥和相应消费者设备的多个值的比较来向消费者设备中所选择的消费者设备提供事件消息。例如,调度器模块306计算密钥值的哈希值,然后将计算出的哈希值与消费者设备的哈希值进行比较。例如,调度器模块306通过下述方式来做出该选择:以密钥值的哈希的点为起点在一个方向(例如,顺时针或逆时针)上绕着逻辑环“走”,直到到达消费者哈希值为止,并且选择相关联的消费者设备。
数据库接口模块310可以是有利于访问消息传递系统300的数据的硬件实现的模块。在示例实施例中,数据库接口模块310可以与图1的数据库126接口连接。
数据库更新模块312可以是有利于更新支持消息传递系统300的数据库的硬件实现的模块。例如,数据库更新模块312可以有利于更新数据库,以聚合数据以及响应于会话的生命周期事件(例如,开始和结束会话事件)发起数据库维护活动。
图4是示出根据示例实施例的示例生产者-消费者系统400的框图。生产者消费者系统400包括:消费者设备402、生产者设备404、消息传递服务406、网状(Netty)传输408、Zookeeper传输410、建议监听器412、持久队列414和重播器416。
如所述的,生产者设备404对应于作为事件消息的生产者的设备,并且在消息传递范例中可被称为“发布者”。消费者设备402对应于消费消息的设备并且可被称为消息的“订户”。
在操作中,生产者设备404和消费者设备402建立“合同”,其在发布者和订户之间建立通信通道。该通道的地址被称为主题。主题是“id1.kind1/id2.kind2/name”形式的字符串。‘/’是上下文分隔符。主题由一个或多个上下文(例如,“id1.kind1”和“id2.kind2”)组成。后面列出的主题(例如,id2.kind2)可以是链接到根上下文的固有属性,例如服务质量特性。第一个上下文被称为根上下文。在一些示例实施例中,主题可以仅具有根上下文。
作为说明性示例实施例,被订阅和发布的示例主题(topic)可被命名为“topic=Rtbd.RTD/rtdEvent”。例如,生产者设备404与消息传递服务406接口连接,并且发起针对由图3的面向生产者的子模块316实现的示例功能publish(topic,event)的API调用。另外,消费者设备402与消息传递服务406接口连接,并且发起针对示例功能subscribe(topic)的API调用。本主题的根上下文是“Rtbd.RTD”。它绑定到特定的Netty传输实例,该Netty传输实例例如可从Apache Software FoundationTM获得,并将在下面更详细地描述。该上下文可被绑定到一致哈希调度器。相应地,通过对绑定到“Rtbd.RTD”的主题进行发布,消息传递服务406使用一致哈希调度。
该实现公开了可由生产者设备用来发布消息和由消费者设备消费消息的单例(singleton)服务接口。消息传递服务406具有可插拔的传输架构。传输实例可被在运行时动态地插入到消息传递服务406中。消息传递服务406可以支持至少两种类型的传输,如Netty传输408和Zookeeper传输410,其例如可从Apache Software FoundationTM获得。
消息传递服务406可以使用Zookeeper传输410来发送控制消息。示例控制消息包括发现消息、广告消息和建议消息。Zookeeper传输410可以与充当中继代理的分布式Zookeeper整体进行通信,以在生产者和消费者消息服务实例之间传递控制消息。Zookeeper传输410绑定到主题,并控制关于此主题的消息流。
消息传递服务406可以使用Netty传输408来传输事件消息。Netty传输408可以构建在Netty非块输入输出(NIO)设施之上。它通过TCP提供完全异步传输。它传输普通的旧JAVA对象(POJO),并使用Kryo对象序列化器来对Java对象进编队。消息传递服务406可以部署一个或多个Netty传输实例。
在示例实施例中,Netty传输408的每个实例绑定到主题的一个或多个根上下文。该绑定规定了没有两个传输实例绑定到同一根上下文的规则。每个根上下文都绑定到调度器模块。绑定到该上下文的所有主题于是都绑定到与该上下文绑定的调度器。每个传输实例具有自己的通信属性,这些属性可以基本上对应于可以在运行时调整的TCP属性。建议监听器412可以将未传递的事件消息引导到持续队列414,以便稍后由重播器416重新发送。建议监听器412和重播器416将在下文结合图8-10更详细地描述。
图5是示出根据示例实施例的示例消息传递栈500的框图。消息传递栈500包括:生产者侧堆栈502,其包括发布者506、调度器508、编码器510、批处理器512和压缩器524。消息传递栈600还包括:消费者侧堆栈504,其包括解压缩器526、解码器528和订户530。
生产者侧堆栈502可以由数据处理服务器123中的服务器具体实施。调度器508、编码器510、批处理器512和压缩器524可以由调度器模块306来具体实施。消费者侧堆栈504可以由数据处理服务器123中的服务器来具体实施。
发布者506可以对应于图4的生产者设备404。发布者506向一个或多个订户(例如,消费者设备)提供要发布的调度器事件消息。
调度器508可以对应于图3的调度器模块306。消息传递栈的生产者侧配置有可插拔的消息调度器508。调度器508可以是以下两种类型之一:加权轮询调度算法或一致哈希调度算法。调度器提供服务质量(QOS)。在示例实施例中,调度器508被绑定到主题的根上下文。因此,发布者可以通过简单地选择绑定到根上下文的主题来选择QOS。
加权轮询:当配置了加权轮询调度器时,使用加权轮询算法在所发现的消费者之间分发事件消息。使用这种方法,如果所有消费者的权重相同,则从生产者侧堆栈流下的消息被均匀分布在绑定到该根上下文的消费者集合中。如果向消费者节点指派了权重,则在考虑权重的情况下向节点分发事件。例如,如果特定消费者实例的权重设置为20,则只有20%的每秒总消息(MPS)被调度给该实例,并且余额在剩余实例之间平均分配。可以根据主题完成工作负载分配
一致哈希:当配置了一致哈希调度器时,为每个主题创建一致哈希环。例如,当消费者广告到达时,使用消费者设备的标识符来计算配置的哈希数目。例如,标识符可被包含在该广告中。该操作是针对所有发现的消费者执行的。哈希在逻辑环上分发。每个主题一个环。该算法被实现为使得针对相同主题进行发布的生产者设备具有相同的环视图。当消息到达调度器时,该消息可以装饰有可被用于在该消息与消费节点之间创建关联的密钥。调度器508计算密钥的哈希,并将该哈希值放在环上。调度器508然后按照逆时针或顺时针方向遍历该环,直到调度器508遇到消费者节点的第一个哈希。存在哈希到消费设备的映射。调度器508可以在注册表中执行查找以找到与匹配的哈希相关联的消费者设备。调度器508然后将事件消息调度给与匹配的哈希相关联的消费者节点。
监听器(例如,图4的监听器412)可以插入到一致哈希调度器中,以便其可以监听具有新环视图的环改变通知。监听器可以在对环改变敏感的系统中使用。环改变的示例包括:添加消费者设备,移除消费者设备,重新定义消费者设备的QOS定义等。稍后将结合图9更详细地描述监听器。
编码器510执行对事件消息的编码处理。例如,编码器510从调度器508接收事件消息,对接收的事件消息进行编码,并将编码后的事件消息提供给批处理器512。
生产者侧502可以配备有批处理器512以便批处理每个上下文的消息。所选上下文下的主题可以被批处理。批处理大小也被配置,并且这可在运行时改变。堆栈中的批处理器512累积从上游递送来的事件消息。当达到批处理大小时或者定时器到期时,向下游调度事件消息。定时器提供了一种抑制批处理器512的由于接收的事件消息的低速率引起的显著延迟的机制。应当理解,在备选实施例中,可以省略批处理器512。在示例性实施例中,可以在配置期间确定是否包括批处理器512。
压缩器524可以对事件消息进行压缩。通过来自消费者(例如,用户530)的广告,驱动压缩。当消费者向生产者发信号通知期望压缩形式的消息时,生产者可以对消息进行压缩。批处理的事件消息和非批处理的事件消息都可被压缩。在一个示例中,支持Snappy压缩。
在堆栈504的消费者侧,解压缩器526和解码器528执行压缩器526和编码器510的反向处理。
图6是示出根据示例实施例的示例生产者-代理-消费者系统600的框图。生产者-代理-消费者系统600包括:生产者设备600、中继代理模块604和消费者设备606。图6示出了在发布-订阅过程期间生产者设备602、中继代理模块604和消费者设备606之间的交互,并且为了简洁起见,未示出消息传递系统架构的附加组件。结合图8更详细地描述消息传递系统架构的示例实施例。
在操作中,生产者设备602和消费者设备606可能不按顺序启动。生产者设备602和消费者设备606都向中继代理模块604注册。中继代理模块604可被部署为跨数据中心的集群。一组中继代理(未示出)可被配置为一个有效整体。该组的其余部分被指定为观察者。中继代理模块604可被用作消息路由器/分发器。如前所述的,生产者设备和消费者设备使用基于主题的地址来通过中继代理模块604发布消息。
如果消费者设备606发起注册,则在交互610处,消费者设备606通过中继代理模块604向所有感兴趣的生产者公告广告。作为响应,在交互612处,中继代理模块604向生产者设备602公告广告。作为响应,生产者设备602可以构建包含已向生产者设备602注册的所有已知消费者设备的注册表。
在一些实施例中,消费者设备606可以通过中继代理模块604向生产者602提供多个建议。例如,消费者设备606可以提供指示消费者设备606的状态的建议,诸如消费者设备606正在缓慢地处理事件消息,缺乏处理事件消息的资源,具有针对其当前工作负载而言过剩的资源,正在请求复位工作负载,和/或指示减少或增加消费者设备的工作负载的类似条件。
作为示例说明,在操作中,在交互614处,消费者设备606可以向中继代理模块604提供建议消息。建议消息可以包括:消费者设备标识符、主题标识符和指示建议(例如,可被生产者设备602和/或中继代理模块604用于确定增加或减少工作负载的建议)的类型的建议标识符。在接收到建议消息之后,在交互616处,中继代理模块604可以将建议消息路由给生产者设备602和链接到主题的其他生产者设备。继而,生产者设备602可以基于该建议来更新其消费者标识符的注册表。例如,生产者设备602可以从其注册表中移除或禁用该消费者标识符,使得消费者设备606不再可用于接收事件消息以进行处理。
在另外的操作中,如果消费者设备检测到该消费者设备可用于处理事件消息,则消费者设备606可以向中继代理模块604发送另一个建议,以向生产者设备602指示消费者设备606可用于接收事件消息。
当生产者设备602发起注册时,在交互618处,生产者设备602通过中继代理模块604发出发现消息。在交互620处,发现消息被广播给所有感兴趣的消费者设备,例如消费者设备606。消费者设备606响应于接收发现消息,可以用广告进行响应,诸如上面结合交互610、612所描述的那样。广告消息也通过中继代理模块604来发送。
图7是示出根据示例实施例的广告700的示例结构的框图。如上面结合图6所述的,广告700从消费者设备传播到生产者设备。消费者设备在其启动时生成唯一的消费者标识符数据字段702。广告700包括地址数据字段704,该地址数据字段704可以对应于消费者IP地址和/或端口绑定。广告700还包括QOS数据字段706,该QOS数据字段706可以指示任何合适的服务质量特性,例如压缩、串行化格式、数据速率等。广告700还可以包括时间戳数据字段708,该时间戳数据字段708指示消费者设备公告的广告700的时间。广告700还可以包括权重数据字段710,该权重数据字段710指示消费者设备请求的相对工作负载。广告700还可以包括主题数据字段712,该主题数据字段712指示消费者设备订阅的主题。当生产者设备接收到广告时,生产者设备可以用广告700更新其消费者注册表。
图8是示出根据示例实施例的示例消息传递系统架构802的框图。消息传递系统架构802可以跨数据中心部署。例如,第一数据中心可以包括生产者设备802、中继代理模块804、重播器806和队列808(诸如Kafka队列)。第二数据中心可以包括集群环810的包含消费者设备812A-C的部分、中继代理模块814、队列818(例如Kafka队列)和重播器822。第三数据中心可以包括集群环810的包含消费者设备812D-F的剩余部分、中继代理模块816、队列820(例如Kafka队列)和重播器824。生产者设备802通过调度器模块826将事件消息传递给集群环810,该调度器模块826确定事件消息在集群环810内的路由。类似地,重播器806通过调度器模块826向集群环810提供事件消息。
中继代理804、814、816对应于图3的中继代理模块304的实例。调度器模块826可以对应于图3的调度器模块306。
中继代理模块804、814、816是跨数据中心部署的。数据中心之一中的一些中继代理模块(例如,中继代理模块804、814、816)被指定为有效整体,而其余的被指定为观察者(未示出)。生产设备802和消费设备812A-F中的消息传递栈向可用的中继代理模块注册。从那时起,生产设备802和消费设备812A-F与相同的中继代理模块通信,直到断开到该中继代理的连接为止。
生产者设备802通过其中继代理804发送发现消息,而消费者设备812A-F通过其中继代理814、816发送广告消息。发现消息可以包括主题标识符和生产者设备802的标识符。可以跨数据中心发送和接收发现消息和广告消息。因此,生产者设备可以跨数据中心发现消费者设备。此外,使用一致哈希布置,调度器模块826可以有助于将事件消息路由给具有跨多个数据中心的消费者设备的集群环810。
图9是示出根据示例实施例的由消息传输系统部署的示例监视系统900的框图。监视系统900包括消息传递服务902,该消息传递服务902包括Netty传输904,该Netty传输904包含虚拟队列906A-C和虚拟队列监视器908。消息传递服务902与一个或多个消费者设备910A-C、警报监听器912以及连接到队列916的建议监听器914接口连接。
在一个方面,监视系统900可以支持自愈集群。例如,当消费者设备910A-C故障或变忙碌时,正被调度到该消费者设备的业务量应被重定向到另一消费者设备。这种重新配置可以通过本文描述的消息传递系统来实现。特别地,消息传递栈的生产者侧可以感测消费者设备何时发生故障。在这种情况下,可以从生产者设备的注册表中移除故障的消费者设备,并且不再向该故障的消费者设备调度业务量。相反,业务量在集群环中的仍然运行的其他实例之间重新平衡。
消息传递栈的生产者侧在其注册表中维护每个消费者设备910A-C的虚拟队列906A-C,如图9所示。虚拟队列监视器908监视虚拟队列906A-C以检测消费者设备910A-C的缓慢情况。这通常发生在生产者设备和消费者设备之间的网络变得缓慢时或者消费者设备运行缓慢且不能清空其通信套接字缓冲区时。在这种情况下,消息传递服务902向建议监听器914或其他正在订阅建议消息的监听器组件发出建议消息。建议消息包含原始消息,原始消息具有关于其发布该原始消息的主题。建议监听器914获取事件消息,添加元数据,并将该事件推送给Kafka队列916。重播设备(例如图8的重播器822、824)被设置为监听队列916,并将消息直接重播给消费者设备。
生产者侧还可以配备有警报监听器912。当虚拟队列监视器908检测到缓慢消费者设备时,虚拟队列监视器908将发信号通知警报监听器912。例如,虚拟队列监视器908可以向警报监听器912提供关于主题以及缓慢消费者设备的网络地址的信息。这可被用作用于检测对应生产者设备的信号。下面结合图10描述重新配置消费者集群环的示例性方法。
消息传递系统的示例方法
图10是根据示例实施例示出为了重新配置消费者集群在生产者和消费者之间的交互1000的示例实施例的示意图。
在交互线1002-1004处,生产者侧堆栈502向消息侧堆栈504发送事件消息。在交互线1006处,消费者侧堆栈504监视上游队列深度以检测消费者应用的缓慢情况。在交互线1008处,消费者侧堆栈504感测到消费者消息传递栈中的上游队列已经逐渐增加超过第一阈值,以及在交互线1010处,它向所有生产者设备发送停止向消费者侧堆栈504发送消息的建议。在交互线1012处,生产者侧堆栈502通过下述方式对该建议消息进行反应:重新平衡目的地为该消费者实例的业务量,以及在集群环上分布该业务量。
在交互线1014处,消费者侧堆栈504检测到上游队列已经降到低于第二阈值,以及消费者侧堆栈504向生产者发送再次开始向该消费者侧堆栈504发送消息的另一建议消息。在示例实施例中,第一阈值和第二阈值可以是不同值。在交互线1020处,生产者侧堆栈502恢复向消费者侧堆栈504的事件消息的发送。
图11是示出根据示例实施例的集群消息传递的示例方法1100的流程图。在该示例中,方法1100可以包括多个操作,如接收标识可用于接收数据消息的消费者设备的第一数据(步骤1104),接收标识可用于提供数据消息的发射机机器的第二数据(步骤1106),将多个值链接到相应的消费者设备(步骤1108),从发射机机器访问第一数据消息(步骤1110),以及,向消费者设备中所选择的消费者设备提供第一数据消息(步骤1112)。下面将通过解释说明的方式描述示例方法1100,其由特定模块执行。然而,应当理解,示例方法1100的操作可以由任意数量的图3所示的模块以任意合适的顺序来执行。
在示例实施例中,方法1100开始于步骤1102,并且进行到步骤1104,在步骤1104处,中继代理模块304接收第一数据,第一数据标识可用于接收链接到主题的数据消息的消费者设备。第一数据可以对应于消费者设备发送的一个或多个广告。
在步骤1106处,中继代理模块304接收第二数据,第二数据标识可用于提供链接到该主题的数据消息的生产者设备(或“发射机设备”)。例如,中继代理模块304可以从生产者设备接收指示生产者设备正在针对所标识的主题发布事件消息的发现消息。
在步骤1108处,配置模块308将多个值链接到相应的消费者设备。例如,这些值可以是由一致哈希调度器生成的哈希值。例如,消费者设备的标识符可被用作伪随机数产生器中的种子,以生成多个值,该多个值将被指派给消费者设备作为其哈希值。因此,可以将多个哈希值链接到每个消费者设备。该多个值可以是针对该主题计算的。
在步骤1110处,调度器模块306可以从生产者设备访问链接到该主题的第一事件消息。例如,调度器模块306可以从数据存储器检索第一事件消息(例如,当在生产者设备中实现时),或者经由数据通信通道从生产者设备接收第一事件消息(例如,当在生产者设备外部的设备中实现时)。第一事件消息包括密钥值。在步骤1112处,调度器模块306基于该密钥值与相应消费者设备的多个值的比较,向消费者设备中所选择的消费者设备提供第一事件消息。如所述的,该比较可以包括使用哈希函数来评估密钥值,然后将所得到的哈希值与链接到消费者设备的值进行比较。可以在逻辑环的环周上进行该比较,以顺时针或逆时针方向找到最接近的匹配。在步骤1114处,方法1100可以结束。
示例会话化系统
在一个方面,本文公开的示例实施例提供了一种用于促进网络数据的会话化的系统,所述网络数据例如用于对互联网和移动应用的实时分析,以及还用于监视、安全性、互联网机器人检测等应用。会话化是对包含特定标识符的分组事件(grouping events)的处理,并且发生在被称为会话持续时间的时间窗口期间。访问或会话被定义为来自同一唯一标识的客户端的一系列页面请求、图像请求和/或类似的web资源请求。每当首次检测到具有该唯一标识符的事件时,窗口开启。当在规定的持续时间内没有具有该特定标识符的事件到达时,该时间窗口结束。针对对Web应用的分析,会话化可以将会话持续时间定义为30分钟不活动。然而,针对对移动设备流和其他应用的分析,会话化可以使用不同的会话持续时间。
会话化有利于在事件流经网络时,存储从事件流中提取的所选择字段,以及还有利于计算和存储在会话的生命周期内的字段或事件的聚合计数。本文公开的示例实施例是在会话化用户行为数据的上下文中描述的。应当理解,在替代实施例中,机器行为可被会话化,以及其他类型的数据也适合被会话化。
本文描述的会话化系统包括流水线组合在一起的多级的分布级。第一级是通过多个接口从不同源摄取事件的集合层。会话器层是流水线的第二级。会话器层还包括一个或多个CEP引擎构成的会话器组。本文中,会话器组还将被称为“集群环”,但是应当理解,集群环的CEP引擎不需要物理地按照环形或其他特定的几何图案进行布置。
在一个方面,会话器系统为每个租户(或称为“订户”)创建和维持会话化数据,并且随着会话从其开始直到结束状态的转换而产生生命周期事件。租户是请求会话化数据的客户端设备。
为了实现跨多个数据中心运行的容错的分布式环境,会话化系统使用图3的消息传递系统300来维护和操纵会话的状态。此外,会话化系统可以创建分层会话,在分层会话中一个会话跨越多个子会话和/或多个通道。
图12是示出根据示例实施例的示例会话器系统架构1200的框图。会话器系统架构1200包括通过第一消息传递系统1204向包括一个或多个CEP引擎1208A-F的集合体集群环1206发送事件数据的应用1202。集合体集群环1206与Zookeeper传输1210、1212和队列1214、1216互连。另外,集合体集群环1206连接到第二消息传递系统1224,第二消息传递系统1224将事件消息路由和传递给由一个或多个消费者设备1228A-F形成的会话化集群环1226。另外,会话化集群环1226与Zookeeper传输1230、1232和数据队列1234、1236互连。此外,会话化集群1226可以与订户1240互连。
应用1202可以对应于在用户设备上运行的web资源,并且可以用作针对集合体集群环1206的生产者设备。消息传递系统1204可以使用轮询调度器模块将来自应用1202的事件消息路由给集合体集群环1206。然后,事件消息由第二消息传递系统1224路由给会话化集群环1226处理以生成会话化数据。会话化集群1226将会话化数据提供给对应的订户1240,该订户1240是请求特定的会话化数据的设备。
会话器系统1200的第一层的集合体集群环1206、CEP引擎1208A-F、Zookeeper传输1210,1212和队列1214,1216可被称为收集器层。收集器层可以使用多个数据中心来部署。例如,第一数据中心可以部署CEP引擎1208A-C、Zookeeper传输1210和数据队列1214。第二数据中心可以部署CEP引擎1208D-F、Zookeeper传输1212和数据队列1216。
收集器层通过多个接口从不同源1202(例如应用1202)接收事件消息,并且通过第二消息传递系统1224将事件消息调度给称为会话器层的第二层。因此,CEP引擎1208A-F用作关于应用1202的消费者设备,并且用作关于会话化层1226的生产者设备。在示例实施例中,第二消息传递系统1224可以对应于图3的消息传递系统300。
会话器层包括会话化集群环1226、消费者设备1228A-F、Zookeeper传输1230,1232以及数据队列1234,1236。因此,会话器层可被部署为包含多个数据中心的集群环。例如,第一数据中心可以部署消费者设备1228A-C、Zookeeper传输1230和数据队列1234,而第二数据中心可以部署消费者设备1228D-F、Zookeeper传输1232和数据队列1236。为了提供跨多个数据中心的消息传递,Zookeepers 1210、1212、1230、1232可以将中继代理模块304具体化。
订户1240向会话化集群环1226提供请求接收会话化数据的请求消息。订户可被称为“租户”。会话化集群环1226以每个租户为基础执行会话化。换言之,会话化集群环1226可以专门针对特定租户产生会话化数据。
因此,特定于每个租户的会话具有从事件流中的一个或多个元组导出的唯一标识符。收集器层和第二消息传递系统1224可以基于事件消息中包含的密钥来对会话化集群环1226进行划分。例如,该密钥可以对应于事件消息的全局唯一标识符(“GUID”)。GUID对于作为事件消息的源的设备(例如,浏览网站的用户设备)是唯一的。应当理解,在替代实施例中,事件消息的其他数据可被用作该密钥。例如,应用标识符(“appid”)和GUID可以组合(例如,级联或联合)以形成会话标识符。
如所述的,收集器层可以通过多个接口接收事件消息。在示例实施例中,收集器层在将接收到的事件消息向下游发送之前,附加地对事件消息进行标准化。容宿在收集器层中的CEP引擎1208A-F可以过滤出互联网机器人业务量。例如,CEP引擎1208A-F可以查找互联网机器人签名(例如,事件模式),并将与互联网机器人签名匹配的事件消息标记为“BOTSignatureEvent”类型。可以通过添加元数据指示,“BOTSignatureEvent”类型,来标记事件消息。在过滤之后,然后通过使用事件消息中的密钥(例如通过使用事件消息中的GUID)将事件消息流调度用于会话器层,这将结合图14进行更详细的描述。
会话化系统可以帮助租户定义特定于其会话的会话持续时间。例如,会话持续时间可被定义为30分钟不活动。在替代示例中,会话持续时间可以更短(例如,5-10分钟)或更长(例如,30-60分钟)。
图13是示出包括多个模块的会话器系统1300的示例实施例的框图。所示的会话器系统1300包括计数器更新模块1302、事件装饰器模块1304、机器人检测器模块1306、会话更新器模块1308和元数据更新器模块1310。
在一些实施例中,可以将会话器系统1300的组件包括在图1的数据处理服务器123中和/或会话器环的集群环1226中。然而,应当理解,在备选实施例中,下面描述的会话器系统1300的一个或多个组件可以附加地或备选地被包括在其他设备中,所述其他设备如图1的市场应用120、支付应用122、服务器114、116、118、130、网络104和/或客户端机器110、112中的一个或多个。还将理解,会话器系统1300可被部署在与网络104互连的其他机器中以及不同于在线市场的系统中。
会话器系统1300的模块1302-1310可容宿在通信耦合为能够进行服务器机器间通信的专用或共享服务器机器(未示出)上。模块1302-1310中的一个或多个可被部署在一个或多个数据中心中。模块1302-1310中的每一个彼此间通信耦合(例如经由适当的接口),并耦合到各种数据源,从而允许在会话器系统1300的模块1302-1310之间传递信息,或者允许模块1302-1310共享和访问公共数据。会话器系统1300的各种模块还可以经由数据库服务器124访问一个或多个数据库126。
计数器更新器模块1302可以是有利于对接收到的事件数据中的用户定义字段的出现进行计数和/或对事件消息表示的事件进行计数的硬件实现的模块。在事件消息到达时的操作中,计数器更新器模块1302维护在那些事件消息中的用户定义字段的出现的计数或事件计数。这些计数器被维护在会话数据存储器中。
事件装饰器模块1304可以是有利于将事件消息外部的信息源与事件消息进行组合的硬件实现的模块。例如,具有有价值的信息的其他数据源可以与诸如用户行为流之类的事件流进行组合。可以向事件消息数据添加的数据的示例包括地理信息、设备分类、人口统计以及分段数据。
在示例实施例中,当事件消息流过会话器系统1300时,事件装饰器1304将补充数据与事件消息流进行实时组合。例如,事件装饰器1304使用事件消息的属性之一作为关键字来查找数据存储器。缓存数据可以在处理节点上本地使用,或者可以在外部在快速查找缓存中使用。向事件消息流实时添加补充数据有利于实现可缩放的数据存储库,该数据存储库可以以大规模系统中经历的速率来进行查询。
机器人检测模块1306可以是有利于处理互联网机器人程序生成的事件消息的硬件实现的模块。
机器人检测模块1306可以实时识别与互联网机器人程序的活动对应的事件消息。虽然在机器人检测模块1306的上游的应用层可以在产生应用中查找机器人签名(例如,自我声明的机器人的签名以及在离线处理期间检测到的签名可被存储在缓存中供查找),应用层可能无法识别某些互联网机器人活动。机器人检测模块1306通过观察互联网机器人程序使用签名访问站点的速率来检测互联网机器人程序的活动。机器人检测模块1306使用在滚动时间窗口上测量的概率频率估计技术。机器人检测模块1306可以用于降低由互联网机器人程序生成的事件消息所消耗的处理资源。当会话化系统1300检测到机器人签名时,会话化系统1300更新机器人签名缓存。该缓存可以由收集器层提供,以强制执行机器人过滤。
会话更新器模块1308可以是有利于更新会话信息的硬件实现的模块。例如,会话更新器模块1308可以在会话创建时向对应的会话公告会话开始标记事件,以及在会话结束时向对应的会话公告会话结束标记事件。会话开始标记事件和会话结束标记事件包含从事件流和地理丰富数据导出的元数据。会话器系统1300可以支持被称为超级会话的跨通道(例如,跨多个设备)会话。超级会话的会话标识符是用户标识符。
元数据更新器模块1310可以是有利于从事件消息的流中提取数据的硬件实现的模块。例如,元数据更新器模块1310可以从会话的事件消息中提取数据,并将所提取的数据以会话元数据的形式存储在会话记录中。会话元数据的示例包括会话标识符数据、页面标识符数据、地理位置数据(例如,城市、区域、国家、大陆、经度、纬度、互联网服务提供商)、浏览器类型数据、OS类型数据和设备类型数据。
响应于接收到消息事件,会话器系统1300查找缓存以确定是否存在针对会话的密钥。例如,事件消息具有指示密钥的元数据,以用于缓存查找。由会话化层的消费者设备对事件消息进行评估,并且对于各个租户,如果该会话存在(例如,缓存中存在针对该会话的密钥),则提取元数据并将其更新到相应租户的会话中。如果会话不存在(例如,缓存中不存在针对该会话的密钥),则创建新的会话实例,以及建立(mint)会话密钥并将其注入该会话。然后,从事件中提取的元数据被更新到会话记录中。
会话器系统1300可以实现用于提供会话化能力的接口。在示例实施例中,会话器系统1300实现多个注释,扩展了EPL(Esper的事件处理语言)。示例注释列出如下:
表1:注释列表
图14是示出根据示例实施例的示例会话器架构1400的框图。会话器架构1400可以对应于上面结合图12描述的会话器层。会话器架构1400包括:入站消息通道(IMC)1402、分派器1404、会话器1406、出站消息通道(OMC)1408、机器人检测器1410和机器人OMC 1412。会话器1406可以实现计数器更新模块1302、事件装饰器模块1304、会话更新器模块1308和元数据更新器模块1310。
在示例实施例中,使用JETSTREAM容器来实现会话器架构1400。JETSTREAM容器提供了一种通过声明构建可以在运行时改变的动态流水线的机制。会话器架构1400的流水线可以容宿在JETSTREAM应用容器中,并且在图14所示的实施例中被示出为线。
IMC 1402用作流水线的第一级,其从图12的收集器层接收事件消息。然后,到达IMC的事件消息被转发给分派器1404。在示例实施例中,分派器1404对应于Esper CEP引擎,其评估事件消息并做出路由决定。标记为类型BOTSignatureEvent的事件消息被转发给机器人检测器1410,该机器人检测器1410处理该事件消息,然后向有兴趣接收包含针对不同机器人类型的度量的事件的订户提供事件数据。
响应于确定接收到的事件消息被标记为不需要会话化的事件类型,分派器1404将该接收到的事件消息转发给OMC 1408,从而绕过会话器1406。
因此,分派器1404将已经过滤掉机器人活动的事件消息传递给会话器1406。在示例实施例中,会话器1406是另一CEP引擎实例,其管理会话的生命周期,并提供第四代语言(4GL)编程接口,该4GL编程接口允许从事件提取数据并更新会话。在示例实施例中,会话器1406使用Esper的EPL来实现。作为补充或替代,会话器1406可以使用表1中列出的注释来实现。
作为补充或替代,会话器1406针对在入站事件消息中包含的信息的元组的指定组合来创建新的会话。该会话器架构为用户提供了用于以结构化查询语言(SQL)编写用于强制执行基于租约的会话化的用户定义规则的界面。使用SQL实现此的示例示出如下:
INSERT INTO EWASESSION SELECT appid,guid,30AS sessionduration,*FROMTRACKING_EVENT WHERE appid is not null;
@OutputTo(“sessionizer”)SELECT*FROM SESSIONINFO;
在这个例子中,SQL指令定义了:APPID和GUID形成会话标识符,以及30秒作为会话持续时间。
通过提供4GL编程结构,向用户提供了定义能被满足的规则的能力,使得用户能够以4GL实现这些规则并提交所述规则。例如,可以采用SQL作为4GL编程结构,以使用POWERBUILDERTM、statistical Analysis SystemTM(SAS)、statistical package forsocial sciencesTM(SPSS)、StataTM和/或类似的4GL程序实现规则并提交规则。JETSTREAM框架(具有嵌入到CEP引擎中的JETSTREAM框架)允许会话器创建新的SQL规则并即时应用该规则。
在示例实施例中,会话器架构1400可以跟踪并生成跨多个通道的“超级会话”(例如,针对使用多个屏幕和设备的用户的一个会话)。超级会话由称为“ActorId”的标识符来标识。事件可以具有针对会话的唯一标识符,其被称为会话GUID。当用户从一个通道改变到另一通道时,用户接收多个会话标识符(例如,多个GUID)。可以在用户与系统的交互期间识别用户的身份,并且将ActorId作为用户的指示符包含在事件消息中。
会话器1406可以检测事件消息是否包括ActorId。如果会话器1406检测到事件消息中的ActorId,则会话器1406通过指定ActorId作为关联密钥的不同主题将事件消息转发回会话器集群环1226中。该事件被标记为被重播以处理ActorId。现在会话器1406为ActorId创建新的会话。使用这种方法,归因于通道会话的聚合现在也归因于超级会话。相应地,如果接收到移动事件消息,则该事件消息将被归因于移动会话和超级会话。超级会话可以具有与链接到它的会话相比不同的生命周期。链接的会话和超级会话也可以聚合。
作为补充或替代,会话器架构1400还可以将会话本身划分成多个子会话。在这种情况下,会话器架构1400为每个分区创建子会话,这允许会话器架构1400维护聚合和每个子会话的元数据。子会话的生命周期被封装在父会话的生命周期中。所以当父会话过期时,子会话也过期。聚合和子会话中的元数据更新可以在EPL中执行。例如,作为衡量尝试结果并归因于实验的独立变量的影响的方式,子会话通过为各实验尝试创建子会话来促进实验。
作为补充或替代,会话器架构1400可以跟踪和管理会话生命周期事件,例如会话开始事件和会话结束事件。例如,当事件消息到达会话器架构1400时,会话器1406通过分派器1404传递该事件消息,以确定向哪里转发该事件消息。如果事件要被会话化,则分派器1404将该事件消息转发给会话器处理器1406。如所述的,会话器1406是CEP引擎,其具有以SQL按每个租户编写的规则集合。事件消息由CEP引擎进行评估,以及,针对每个租户,如果对应的会话存在,则提取元数据并将其更新到该租户的会话。如果会话不存在,则创建新的会话实例,以及建立会话密钥并将其注入该会话。然后,从事件中提取的元数据被更新到会话记录中。还使用地理和人口统计信息对新创建的会话进行更新。生成称为“会话开始标记事件”的生命周期事件,以发信号通知新会话的开始。该事件包含会话开始时间和创建时会话中累积的所有数据。该事件被转发给感兴趣的订户。
随着更多事件到达该会话,在该会话中更新聚合。事件本身装饰有地理和人口统计信息以及会话密钥,并被发送给感兴趣的订户。
会话记录可被存储在缓存中,例如可以在JAVA堆之外的非常大的内存区域上工作的堆外缓存。该缓存由跨多个数据中心部署的复制的分布式后备存储(backing store)来支持。缓存组件具有监视缓存中的每个记录的活动的运行器。当在缓存中更新会话记录时,会话记录的最新更新时间戳将被与过期时间一起记录,其中该过期时间可以在该过程中计算。运行器每隔几秒就扫描一次整个缓存。当遇到已经过期的会话记录时,它会将其从缓存中删除,并生成被称为“会话结束标记事件”的生命周期事件。该事件包含会话密钥、在会话中与聚合计数一起记录的数据、以及会话开始事件和会话结束时间。
用户可以订阅会话生命周期事件和原始事件。
作为补充或替代,会话器架构1400可以有利于动态缩放和故障调节。例如,可由CEP引擎1204(例如,收集器集群环1206的生产者设备)自动发现图12的消费者设备1228A-F(也称为“会话器节点”)。会话器集群环1226可以增长到数百个节点,并且当新节点被添加到集群时,业务量自动重新平衡。当会话器集群环1226中的节点发生故障或新节点被添加到该环时,业务量将被重新平衡,使得流向该特定会话器节点的所有事件现在都被调度到该集群环中的其他节点。当业务量进入其他节点时,将从分布式缓存恢复与该事件关联的会话状态。
集群环有利于灾难恢复。响应于检测到由于节点故障或新节点的添加引起的改变,生成事件。监听器可以监听到该事件。然后,监听器向分布式缓存查询从故障节点插入的会话器标识符(此处也称为“密钥”)。已经过期的会话器标识符(例如,最近的事件在会话的持续时间窗口过去之后发生)于是被处理并关闭。作为关闭过期会话的过程的一部分,生成称为“会话结束标记事件”的生命周期事件。
当创建新会话时,建立会话密钥并将其绑定到会话,并且该绑定被存储在缓存中。在示例性实施例中,使用利用分布式后备存储的堆外缓存技术。这种类型的设计允许从故障恢复并恢复状态。可以使用在服务器场中具有后备存储的堆外缓存,以存储会话数据。
当接收到事件消息时,检查缓存以查看密钥是否存在。事件消息具有指示密钥的元数据,以用于缓存查找。如果没有找到密钥,则检查后备存储。如果在后备存储中找到密钥,则从缓存恢复会话,计数递增,并且更新后备存储。
当会话器节点死机时,应当关闭在该节点上被认为过期的会话。这些会话的记录被存储在分布式缓存中。会话器架构1400维护缓存中的分段,该分段包含在窗口(例如,200毫秒)上累积的从会话器节点写入缓存的密钥的集合。以这种方式,保留从特定节点写入的密钥的记录。通过组合时间段和hostId来创建每个这些桶(bucket)条目的密钥,其中hostId可用于标识和/或寻址容宿会话器节点的设备。每个会话器节点具有监听环改变的监听器。当在一个主机上检测到故障时,其他主机具有从过期的节点读取密钥及其对应的会话并将其关闭的领先者(leader)。如果会话仍然有效,则会话被保留;否则发出“会话结束标记事件”。
图15是示出根据示例实施例的生成会话化数据的示例方法1500的流程图。在该示例中,方法1500可以包括多个操作,诸如接收指示请求会话化数据的订阅请求的数据(步骤1504),分配链接到该订阅请求的会话器组(步骤1506),配置链接到该会话器组的相应处理引擎的标识符(步骤1508),将所分配的会话器组注册为可用于处理事件消息(步骤1510),接收事件数据(步骤1512),处理接收的事件数据(步骤1514),以及提供所生成的会话化数据(步骤1516)。下面将通过解释说明的方式描述示例方法1500,其由特定模块执行。然而,应当理解,可以通过任意数量的图3和图13中所示的模块以任意合适的顺序来执行示例方法1500的操作。
方法1500开始于步骤1502,并进行到步骤1504,在步骤1504处,订阅界面接收指示请求会话化数据的订阅请求的数据。该订阅请求可以包括订户标识符、感兴趣的会话等。订阅请求可以是图12的订户1240发送的。订阅界面可以实现在图12的会话器集群环1226处。在示例实施例中,订阅界面可以对应于图3的中继代理模块304。
在步骤1506处,分配模块分配用于服务该订阅请求的会话器组(例如图12的会话器集群环1226)。该会话器组包括可用于服务该订阅请求的处理引擎。该会话器组链接到该订阅请求和订户1240。
在步骤1508中,消息传递接口模块配置链接到该会话器组的相应处理引擎的标识符。例如,消息传递接口模块可以由图12的消息传递系统1224来实现。此外,消息传递系统1224可以实现结合图3描述的用于提供一致哈希调度的消息传递系统300。如此,链接到相应处理引擎的标识符可以对应于分配给该会话器组的处理引擎中的每一个的多个哈希值。
在步骤1510中,消息传递接口模块通过提供所提供的标识符向收集服务器注册所分配的会话器组,将其注册为可用于处理与该订阅请求匹配的事件消息(或“事件数据”)。例如,图12的消费者装置1228A-F向下述项提供广告:消息传递系统1224、与收集器集群环1206接口连接的中继代理模块(例如,Zookeeper传输1230,1232)、或与配置为接收广告的收集器集群环1206连接的服务器(未示出)。因此,CEP引擎1208A-F可以用作关于会话器集群环1226的生产者设备。
在步骤1510中,消息传递接口模块从链接到收集服务器的处理引擎接收事件数据。例如,CEP引擎1208A-F之一通过消息传递系统1224向消费者设备1228A-F中所选择的消费者设备发送事件消息。对消费者设备的选择可以基于一致哈希调度器。
在步骤1514中,消费者设备1228A-F中所选择的消费者设备根据链接到该订阅请求的会话规则数据来处理接收到的事件数据,以生成会话化数据。会话规则数据对应于订户请求的一个或多个属性(例如,信息的元组)。在步骤1516中,向订户1240提供所生成的会话化数据。在步骤1518中,方法1500结束。
图16是示出根据示例实施例的生成和更新会话的示例方法1600的流程图。在示例实施例中,方法1600的步骤1602-1652可以由图12的消费者设备1228A-F来执行。
可以通过接收事件消息而触发方法1600。例如,响应于接收原始事件类型的事件消息,方法1600可以开始于步骤1602。例如,原始事件类型对应于接收来自生产者设备的没被标记为包含互联网机器人程序签名的事件消息和/或未被标记为要被会话器旁路的事件消息。在步骤1604中,方法1600确定是否存在针对该原始事件的会话。响应于确定会话不存在,方法1600可以进行到步骤1606,以确定是否要执行读取。在示例实施例中,响应于会话器节点故障,要执行读取。如果要执行读取,则方法1600可以进行到块1608以加载会话,并且进行到块1610以确定是否负载被挂起。如果负载没有被挂起,则在步骤1612中该方法执行对会话的异步加载。如果负载被挂起,则在步骤1614中该方法1600对接收到的原始事件进行排队。
回到步骤1606的判决,如果该方法1600确定不需要读取,则方法1600进行到步骤1616以创建新会话。该方法1600进行到步骤1618-1624,以利用地理和人口统计信息装饰接收到的事件消息,从接收到的事件消息中提取元数据,针对事件消息运行会话器,以及发送会话开始标记。在步骤1626-1634中,该方法1600更新与装饰的事件消息关联的计数器,运行会话器,保存并同步会话,向订户发送会话化的事件数据,以及处理挂起的事件。在步骤1634中处理挂起的事件之后,该方法1600可以返回到步骤1626,以重复步骤1626-1634的动作。
回到步骤1604的判决,响应于确定存在针对接收到的事件消息的会话,该方法1600进行到步骤1636,以基于会话持续时间来确定现有会话是否为长会话。例如,当基于最新缓存的事件消息超过会话持续时间时现有会话已过期,则现有会话为长会话。基于确定会话为长会话,方法1600进行到步骤1602以结束旧会话并在步骤1616中创建新会话,然后方法1600如上所述执行步骤1618-1634。如果该方法在步骤1636处确定会话不是长会话,则该方法进行到步骤1642,以用地理和人口统计信息来装饰事件消息,然后如上所述进行到步骤1626-1634。
方法1600还可以由接收指示会话加载事件的数据(例如请求加载所选择会话的请求)来触发。该方法1600在步骤1650处开始,并进行至步骤1652,以确定会话是否存在。基于确定会话确实存在,该方法1600进行到步骤1636以确定会话是否为长会话并且如上所述继续。基于确定会话不存在,该方法1600进行到步骤1638以结束旧会话,并且如上所述进行到步骤1616。
图17是示出根据示例实施例的会话生命周期管理的示例方法的流程图。在示例实施例中,方法1700的步骤1702-1752可以由图12的消费者设备1228A-F来执行。可以响应于诸如定时器事件、会话检查事件和会话恢复事件等多个事件来执行方法1700。响应于定时器事件,方法1700在步骤1702处开始,并且进行到步骤1704以处理超时读取请求。在步骤1706处,方法1700处理会话超时,然后进行到步骤1708以检查关联性。例如,如果存在被指派用于接收针对超时事件的对应会话和租户的事件消息的会话器节点,则存在关联性。基于确定没有关联性,方法1700进行到步骤1710以发送会话检查事件,然后在步骤1712处结束(例如从步骤1722开始重复方法1700)。可选地,基于确定存在关联性,方法1700进行到步骤1714以运行会话器。然后,该方法进行到步骤1716、1718,以发送会话结束标记,然后删除会话。接下来,方法1700进行到步骤1719并结束。
响应于会话恢复事件(步骤1720)或会话检查事件(步骤1722)中的任一个,方法1700进行到步骤1724,以确定是否存在本地会话。本地会话是存储在会话器节点的堆外缓存中的会话数据,并且其被备份在诸如图5的Kafka队列1234、1236之类的后备存储中。基于确定存在本地会话,方法1700进行到步骤1726并结束。可选地,基于确定本地会话不存在,方法1700进行到步骤1714以运行会话器,然后如上所述进行到步骤1716-1719。
某些实施例在本文中被描述为包括逻辑或多个组件、模块或机制。模块可以构成软件模块(例如(1)实施在非暂时性机器可读介质上的代码,或(2)以传输信号实施的代码)或硬件实现的模块。硬件实现的模块是能够执行特定操作并可以按特定方式来配置或布置的有形单元。在示例实施例中,一个或多个计算机系统(例如,独立、客户端或服务器计算机系统)或一个或多个处理器可以被软件(例如,应用或应用部分)配置为硬件实施的模块,该模块进行操作以执行如本文所述的某些操作。
在各实施例中,硬件实现的模块可以用机械方式或电子方式来实现。例如,硬件实现的模块可以包括永久地配置为执行某些操作的专用电路或逻辑(例如,硬件实现的模块可以是专用处理器,例如现场可编程门阵列(FPGA)或专用集成电路(ASIC))。硬件实施的模块还可以包括暂时由软件配置以执行某些操作的可编程逻辑或电路(例如,配置为被包含在通用处理器或其它可编程处理器中)。应理解,以机械方式在专用且永久配置的电路中或在临时配置的电路(例如由软件配置)中实现硬件实现的模块的决定可以出于成本和时间的考虑。
因此,短语“硬件实现的模块”应当被理解为包含有形实体,应当是物理构成的、永久配置(例如硬连线的)或暂时或瞬时配置(例如编程的)以在特定方式下工作以执行本文描述的特定操作的实体。考虑到其中硬件实现的模块是暂时配置的(例如编程的)实施例,每个硬件实现的模块不需要是在任意时刻都是已配置或已实例化的。例如,在硬件实施的模块包括使用软件来配置的通用处理器的情况下,通用处理器可以在不同时间配置为各不同的硬件实施的模块。软件可以因此配置处理器,以例如在一个时刻构成特定硬件实施的模块,以及在不同时刻构成不同的硬件实施的模块。
硬件实现的模块可以向其它硬件实现的模块提供信息,并且可以从其它硬件实现的模块接收信息。因此,所描述的硬件实现的模块可以被看作通信耦合。在多个这种硬件实现的模块同时存在的情况下,可以通过信号传输(例如在连接硬件实现的模块的适当的电路和总线上)来实现通信。在多个硬件实现的模块在不同的时间被配置或实例化的实施例中,可以例如通过在多个硬件实现的模块可访问的存储器结构中对信息的存储和检索来实现这样的硬件实现的模块之间的通信。例如,一个硬件实现的模块可以执行操作,并且将该操作的输出存储在与该硬件实现的模块通信耦合的存储设备中。另一硬件实现的模块接着可以稍后访问存储设备,以获取并处理所存储的输出。硬件实现的模块还可以发起与输入或输出设备的通信,并且能够对资源(例如信息的集合)执行操作。
本文描述的示例方法的各种操作可以至少部分地由临时配置(例如通过软件)或永久配置为执行相关操作的一个或多个处理器执行。无论是暂时地还是永久地配置,这样的处理器可以构成进行操作以执行一个或多个操作或功能的处理器实现的模块。在一些示例实施例中,本文中提及的“模块”包括处理器实现的模块。
类似地,本文中描述的方法可以至少部分由处理器实现。例如,方法的至少一些操作可由一个或多个处理器或处理器实现的模块执行。某些操作的执行可以分布在一个或多个处理器中,并不只驻留在单个机器中,而是布置在多个机器中。在一些示例实施例中,处理器可以位于单个位置(例如在家庭环境、办公室环境或服务器群中),而在其他实施例中,处理器可以分布在多个位置。
一个或多个处理器还可以操作以支持在“云计算”环境下的相关操作的执行或作为“软件即服务”(SaaS)的相关操作的执行。例如,至少一些操作可以由一组计算机(例如,包括处理器的机器)来完成,这些操作是可经由网络104(例如,互联网)以及经由一个或多个适当的接口(例如,应用接口(API))来访问的。
示例实施例可以用数字电子电路或者用计算机硬件、固件、软件或它们的组合来实现。示例实施例可以使用计算机程序产品(例如在信息载体中有形地表示的计算机程序)来实现,信息载体例如是由数据处理装置执行的机器可读介质或用于控制数据处理装置的操作的机器可读介质,数据处理装置例如是可编程处理器、计算机或多个计算机。
可以用任何形式的编程语言来编写计算机程序,该编程语言包括:编译或解释语言,并且可以用任何形式来部署计算机程序,包括部署为独立的程序或者部署为适合用于计算环境的模块、子例程、或者其他单元。计算机程序可以配置为在一个计算机执行或在位于一个地点处的多个计算机上执行或者在分布在多个地点上并通过通信网络104互连的多个计算机上执行。
在示例实施例中,操作可以通过一个或多个可编程处理器执行计算机程序来执行,以通过操作输入数据并生成输出来执行功能。方法操作还可以通过由专用逻辑电路(例如,现场可编程门阵列(FPGA)或专用集成电路(ASIC))来执行,并且示例实施例的装置可以实现为专用逻辑电路。
计算系统可以包括客户端和服务器。客户端和服务器一般相互远离并且通常通过通信网络104进行交互。客户端和服务器的关系通过在相应计算机上运行并且相互具有客户端-服务器关系的计算机程序来生成。在使用可编程计算系统的实施例中,将清楚的是,需要考虑硬件架构和软件架构二者。具体地,将清楚的是,在永久配置的硬件(例如ASIC)中、在暂时配置的硬件中(例如软件与可编程处理器的组合)、或是在永久配置的与暂时配置的硬件的组合中实现特定功能可以是设计选择。下文阐述了可以在各种示例实施例中部署的硬件架构(例如机器)和软件架构。
图18是具有计算机系统1800的示例形式的机器的框图,在所述计算机系统中,可以执行指令1824以使所述机器执行本文讨论的任意一个或多个方法。在备选实施例中,机器可以作为独立设备来操作,或者可以连接(例如联网)到其它机器。在联网部署中,机器可以在服务器-客户端网络环境中以服务器机器或客户端机器110的能力进行操作,或者作为对等(或分布式)网络环境中的对等机器进行操作。机器可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、网络应用、网络路由器、交换机或桥接器、或能够执行指令(顺序的或以其他方式)的任何机器,其中所述指令指定要由该机器执行的特定动作。此外,尽管只示出了单个机器,但是术语“机器”还应当被视为包括单独或共同地执行指令1824集合(或多个集合)以执行本文描述的任意一个或多个方法的机器的任意集合。
示例计算机系统1800包括处理器1802(例如中央处理单元(CPU)、图形处理单元(GPU)或这二者)、主存储器1804和静态存储器1806,它们经由总线1808相互通信。计算机系统1800还可包括视频显示单元1810(例如液晶显示器(LCD)或阴极射线管(CRT))。计算机系统1800还包括字母数字输入设备1812(例如键盘或触敏显示屏)、用户界面(UI)导航(或者光标控制)设备1814(例如鼠标)、盘驱动单元1816、信号产生设备1818(例如扬声器)、以及网络接口设备1820。
驱动单元1816包括计算机可读介质1822,在该机器可读介质1122上存储了具体实现本文描述的任何一个或多个方法或功能或由本文描述的任何一个或多个方法或功能使用的数据结构和指令1824(例如软件)的一个或多个集合。在计算机系统1800执行指令1824时,指令1124还可以完全地或至少部分地位于主存储器1804中和/或位于处理器1802中,主存储器1804和处理器1802还构成机器可读介质1822。
尽管计算机可读介质1822在示例实施例中被示为单个介质,术语“计算机可读介质”可以包括存储一个或多个指令1824或数据结构的单个介质或多个介质(例如,集中式或分布式的数据库和/或相关联的缓存和服务器)。术语“计算机可读介质”还应当被视为包括能够存储、编码或承载用于由该机器执行并且使该机器执行本公开主题的方法中的任意一者或多者的指令1824或者能够存储、编码或承载由此类指令1824利用或与此类指令相关联的数据结构的任意非暂时性有形介质。术语“计算机可读介质”因此应当被看做包括但不限于:固态存储器以及光学和磁介质。计算机可读介质1822的具体示例包括:非易失性存储器,其以示例的形式包括半导体存储器设备,例如可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM))、以及闪存设备;磁盘,例如内部硬盘和可拆卸盘;磁光盘;以及CD-ROM和DVD-ROM盘。
指令1824还可以使用传输介质来在通信网络1826上发送或接收。可以使用网络接口设备1820以及多个已知传输协议中的任意一个(例如超文本传输协议(HTTP))来传输指令1824。通信网络1826的示例包括局域网(“LAN”)、WAN、互联网、移动电话网络、普通老式电话(POTS)网络、以及无线数据网络(例如WiFi和WiMax网络)。术语“传输介质”应当被视为包括能够存储、编码或携带用于由机器执行的指令(例如指令1824)的任何无形介质,并且包括数字或模拟通信信号或其他无形介质,以促进这样的软件的通信。
尽管已经参照特定示例实施例描述了本发明主题,将显而易见的是:可以在不脱离本公开的更宽泛的精神和范围的情况下对这些实施例做出各种修改和改变。因此,说明书和附图应当被看做说明性的而不是限制意义的。形成可以实现主题的具体实施例的一部分的附图是作为说明而不是限制的方式示出的。充分详细地描述示出的实施例以使得本领域技术人员能够实现本文公开的教导。可以利用并得出其它实施例,从而可以在不脱离本公开的范围的情况下做出结构和逻辑上的替换和改变。因此,该“具体实施方式”部分不应当看做是限制意义,并且各种实施例的范围仅通过所附权利要求以及权利要求的等同物的全部范围来限定。
本发明主题的这些实施例被单独地和/或统一地由术语“发明”来指代,其仅是为了方便,而不是旨在主动将本申请的范围限制为任意单个发明或发明构思(如果实际上不止一个实施例被公开的话)。因此,尽管本文示出并描述了特定实施例,应当理解,适于实现相同目的的任意设置都可以用于替换所示出的特定实施例。本公开意在覆盖各种实施例的任意和所有的适应性修改或变化。通过研究上述内容,上述实施例的组合以及本文中没有具体描述的其它实施例对于本领域技术人员来说将是明显的。
- 无线本地消息传递系统和确定无线本地消息传递系统内的导航接收器的位置的方法
- 自治系统内的消息传递方法、装置及相应的消息传递系统