具有多个服务器节点的物理安全系统
相关申请的交叉引用
本申请是2012年9月7日提交的美国13/607,447号专利申请的部分继续申请,其全部内容通过引用结合至此。
技术领域
本申请涉及一种具有多个服务器节点的物理安全系统。
背景技术
物理安全系统是这样一种系统:该系统采取措施防止未授权人员获得对资产,例如建筑,设施或机密信息的物理访问。物理安全系统的例子包括监控系统,例如使用相机以对资产和接近它的人进行监视的系统;访问控制系统,例如使用射频识别(RFID)卡控制对建筑的访问的系统;侵入检测系统,例如家庭盗窃报警系统;以及前述系统的组合。
物理安全系统通常包括计算机。随着这种物理安全系统的发展,运行系统所需的计算能力也在增长。例如,随着监控系统中使用的相机数量增长,必需的计算能力也要增长,从而允许存储额外的视频并允许同时使用和管理更多数量的相机。因此,持续进行研发以克服随着物理安全系统的发展而面临的问题。
发明内容
根据第一方面,本发明提供了一种用于在包括多个服务器节点的物理安全系统中共享数据的方法。该方法包括:使用所述服务器节点中的一个服务器节点(“第一节点”)访问识别所述服务器节点中的另一个服务器节点(“第二节点”)的节点标识符,其中所述第一节点和所述第二节点包括 服务器群集的至少一部分,其中所述节点标识符包括群集成员信息的至少一部分,所述群集成员信息识别所述服务器群集中的所有服务器节点并可以由所述服务器群集中的所有服务器节点访问;以及将所述数据从所述第一节点发送至所述第二节点。
所述服务器群集可以包括至少三个服务器节点。
所述服务器节点可以包括相机,网络视频录像机,和访问控制服务器。
所述方法还可以包括使用所述第二节点访问识别所述第一节点的节点标识符;以及将附加数据从所述第二节点发送至所述第一节点。
所述群集成员信息可以包括唯一地识别所述服务器群集中的所述服务器节点中的每个的节点标识符;以及唯一地识别所述服务器节点所属的所述服务器群集的群集标识符。
所述服务器群集中的所述服务器节点中的每个服务器节点可以永久性地在本地存储其自身的版本的群集成员信息。
所述方法还可以包括重启所述服务器群集中的所述服务器节点中的一个(“重启的服务器节点”);并且一旦所述重启的服务器节点重新上线,使用所述重启的服务器节点执行包括(i)访问识别所述服务器群集的所述群集标识符;和(ii)自动重新加入所述服务器群集的方法。
所述方法还可以包括通过执行包括以下步骤的方法将新服务器节点添加到所述服务器群集中:交换所述新服务器节点上存储的版本的群集成员信息和所述服务器节点中已经是服务器群集的一部分的一个服务器节点(“成员控制节点”)上存储的版本的群集成员信息;以及在所述新服务器节点加入所述群集之前,同步所述新服务器节点上存储的版本的群集成员信息和所有服务器节点上存储的版本的群集成员信息。
发送所述数据可以包括使用所述第一节点根据所述节点标识符寻找所述第二节点的通信端点;以及将所述数据从所述第一节点发送至所述通信端点。
所述通信端点和所述节点标识符可以包括网络地图中的项,所述网络地图将所述服务器群集中的所有服务器节点与相应的通信端点联系起来, 并且所述服务器群集中的所述服务器节点中的每个服务器节点可以在本地永久性存储其自身的版本的网络地图。
所述网络地图可以允许所述服务器群集中的所述服务器节点中的每个服务器节点在不使用集中式服务器的情况下将所述数据发送至所述服务器群集中的任何其他服务器节点。
所述数据可以本地存储在所述第一节点上,并且所述方法还可以包括使用所述第一节点修改所述数据,其中将所述数据从所述第一节点发送至所述第二节点包括在所述第一节点修改所述数据之后对所述第一节点和第二节点上的数据进行同步的一部分。
所述数据可以包括使用因果关系版本控制机制生成的版本信息,所述数据的不同版本可以存储在所述第一节点和第二节点上,同步所述数据可以包括比较存储在所述第一节点和第二节点上的版本信息,并且在所述第一节点和第二节点上采用其版本信息表明其较新的数据。
所述数据可以包括所述第一节点的节点标识符,所述第一节点的心跳状态信息,所述第一节点的应用状态信息,以及版本信息,并且发送所述数据可以包括使用流言协议将所述数据传播至所述服务器群集中的所有服务器节点,所述流言协议在所述群集中的各对服务器节点之间执行数据交换。
所述数据可以周期性传播给所述服务器群集中的所有服务器节点。
所述数据可以在所述第一节点加入到所述群集时被发送至所述第二节点。
由能够被所述服务器群集中的任意服务器节点修改的项填充的域可以本地存储在所述服务器群集中的每个节点上,所述方法还包括使用因果关系版本控制机制生成版本信息,由此所述版本信息表明哪个服务器节点最近修改了一个所述项。
应用状态信息可以包括通过对所述域中的所有项进行散列(hash)生成的顶级散列。
所述方法还可以包括使用所述第二节点比较所述顶级散列和通过对本地存储在所述第二节点上的版本的相应域进行散列生成的顶级散列;以及如果所述散列不同,则使用所述版本信息同步所述第一节点和第二节点上的域。
只能由所述第一节点修改的状态项可以本地存储在所述第一节点上,所述版本信息可以包括版本号,只要所述第一节点修改所述状态项,所述第一节点就会增加所述版本号。
所述应用状态信息可以包括状态项对,该状态项对包括识别所述状态项和所述版本号的状态标识符。
所述方法还可以包括使用所述第二节点比较从所述第一节点接收的所述版本号和本地存储在所述第二节点上的相应状态项的版本号;以及如果所述版本号不同,则用本地存储在所述第一节点上的所述状态项更新本地存储在所述第二节点上的所述状态项。
更新所述状态项可以包括从所述第一节点向所述第二节点发送本地存储在所述第一节点上的附加状态项,所述附加状态项与所述状态项同时被修改。
所述第一节点和第二节点可以包括所述群集中的一组服务器节点的至少一部分,所述第一节点能够以完全按照顺序的方式向所述组中的所有服务器节点发送所述数据,并且发送所述数据可以包括所述第一节点向所述组中的所有服务器节点发送所述数据。
所述数据可以包括在所述物理安全系统的运行时间期间生成的非永久性数据。
所述数据还可以包括通过所述第一节点从所述服务器群集中的另一个服务器节点流动(stream)至所述第二节点的流式视频。
根据另一方面,本发明提供了一种用于在物理安全系统中共享数据的系统,该系统包括多个服务器节点,所述多个服务器节点包括第一节点和第二节点,其中所述第一节点包括通信耦合至计算机可读介质的处理器,所述计算机可读介质上编码有语句和指令,所述语句和指令引起所述处理 器执行方法,该方法包括:访问识别所述第二节点的节点标识符,其中所述第一节点和第二节点包括服务器群集的至少一部分,并且其中所述节点标识符包括群集成员信息的至少一部分,所述群集成员信息识别所述服务器群集中的所有服务器节点并可以由所述服务器群集中的所有服务器节点访问;以及将所述数据发送至所述第二节点。
根据另一方面,本发明提供了一种非瞬时性计算机可读介质,该非瞬时性计算机可读介质上编码有语句和指令,所述语句和指令引起所述处理器执行用于在包括多个服务器节点的物理安全系统中共享数据的方法,该方法包括:使用所述服务器节点中的一个服务器节点(“第一节点”)访问识别所述服务器节点中的另一个服务器节点(“第二节点”)的节点标识符,其中所述第一节点和所述第二节点包括服务器群集的至少一部分,其中所述节点标识符包括群集成员信息的至少一部分,所述群集成员信息识别所述服务器群集中的所有服务器节点并可以由所述服务器群集中的所有服务器节点访问;以及将所述数据从所述第一节点发送至所述第二节点。
根据另一方面,本发明提供了一种用于与包括多个服务器节点的物理安全系统中的无人值守显示器进行交互的方法,该方法包括:从所述服务器节点中与所述无人值守显示器通信的一个服务器节点(“第二节点”)向所述服务器节点中与客户端显示器通信的另一个服务器节点(“第一节点”)发送视图状态数据,所述视图状态数据指示在所述无人值守显示器上显示的视图;以及在所述客户端显示器上显示在所述无人值守显示器上显示的所述视图的至少一部分。在一个方面,所述服务器节点都不是集中式网关服务器;在替代方面,所述服务器节点中的至少一个是集中式网关服务器。
所述方法还可以包括从所述第一节点向所述第二节点发送消息以改变所述无人值守显示器的视图;以及根据从所述第一节点发送至所述第二节点的所述消息更新所述无人值守显示器。
所述第一节点和所述第二节点以及所述多个服务器节点中的至少另一个服务器节点可以包括服务器群集,所述第一节点和所述第二节点可以包括所述群集中的一组服务器节点的至少一部分,所述第二节点能够以完全 按照顺序的方式向所述组中的所有其他服务器节点发送所述视图状态数据,并且发送所述视图状态数据可以包括所述第二节点向所述组中的所有其他服务器节点发送所述数据。
所述第一节点和所述第二节点以及所述多个服务器节点中的至少另一个服务器节点可以包括服务器群集,所述第一节点和所述第二节点可以包括所述群集中的一组服务器节点的至少一部分,所述第二节点能够以完全按照顺序的方式向所述组中的所有其他服务器节点发送所述消息以改变所述无人值守显示器的状态,并且所述第一节点可以向所述组中的所有其他服务器节点发送所述消息以改变所述无人值守显示器的状态。
所述方法还可以包括从所述第二节点向所述第一节点发送通知,该通知表明可以对所述无人值守显示器的所述视图进行控制。
发送所述通知可以包括使用流言协议将所述通知传播至所述服务器群集中的所有服务器节点,所述流言协议在所述群集中的各对服务器节点之间执行数据交换。
在向所述控制显示器发送所述无人值守显示器的所述状态之前,所述方法可以包括使用所述第二节点访问识别所述第一节点的节点标识符,其中所述第一节点和所述第二节点包括服务器群集的至少一部分,并且其中所述节点标识符包括群集成员信息的至少一部分,所述群集成员信息识别所述服务器群集中的所有服务器节点并可以由所述服务器群集中的所有服务器节点访问。
所述群集成员信息可以包括唯一地识别所述服务器群集中的所述服务器节点中的每个的节点标识符;以及唯一地识别所述服务器节点所属的所述服务器群集的群集标识符。
所述服务器群集中的所述服务器节点中的每个服务器节点可以永久性地在本地存储其自身的版本的群集成员信息。
根据另一方面,本发明提供了一种物理安全系统,该物理安全系统包括:客户端显示器;无人值守显示器;以及多个服务器节点,其中所述服务器节点中的一个服务器节点(“第一节点”)与所述客户端显示器通信, 并且所述服务器节点中的另一个服务器节点(“第二节点”)与所述无人值守显示器通信,其中所述第二节点被配置为向所述第一节点发送视图状态数据,所述视图状态数据指示在所述第二显示器上显示的视图,所述第一节点被配置为在所述客户端显示器上显示在所述第二显示器上显示的所述视图的至少一部分。在一个方面,所述服务器节点都不是集中式网关服务器;在替代方面,所述服务器节点中的至少一个是集中式网关服务器。
根据另一方面,本发明提供了一种物理安全系统,该物理安全系统包括:客户端显示器;无人值守显示器;以及多个服务器节点,其中所述服务器节点中的一个服务器节点(“第一节点”)与所述客户端显示器通信,并且所述服务器节点中的另一个服务器节点(“第二节点”)与所述无人值守显示器通信,其中所述第二节点被配置为向所述第一节点发送视图状态数据,所述视图状态数据指示在所述第二显示器上显示的视图,所述客户端和第一节点被配置为在所述客户端显示器上显示在所述第二显示器上显示的所述视图的至少一部分。在一个方面,所述服务器节点都不是集中式网关服务器;在替代方面,所述服务器节点中的至少一个是集中式网关服务器。
所述无人值守显示器可以直接连接至所述第二节点或间接通过-举例来说,无人值守客户端或工作站-连接至所述第二节点。
根据另一方面,本发明提供了一种非瞬时性计算机可读介质,该非瞬时性计算机可读介质上编码有语句和指令,所述语句和指令引起处理器执行用于同物理安全系统中的无人值守显示器进行交互的方法,该方法包括:从所述服务器节点中与所述无人值守显示器通信的一个服务器节点(“第一节点”)向所述服务器节点中与客户端显示器通信的另一个服务器节点(“第二节点”)发送视图状态数据,所述视图状态数据指示在所述无人值守显示器上显示的视图;以及在所述客户端显示器上显示在所述无人值守显示器上显示的所述视图的至少一部分。
根据另一个方面,本发明提供了一种利用包括多个服务器节点的物理安全系统来共享视图(“共享视图”)的方法,该方法包括:从第一客户端 向所述服务器节点中的一个服务器节点(“第一节点”)发送状态数据,所述状态数据代表所述第一客户端所显示的所述共享视图;通过所述服务器节点中的另一个服务器节点(“第二节点”)将所述视图状态数据从所述第一节点发送至第二客户端;使用所述视图状态数据更新所述第二客户端的显示器,从而显示所述共享视图;响应于所述第二客户端上所述共享视图的变化,将更新的视图状态数据从所述第二客户端发送至所述第二节点,其中所述更新的视图状态数据代表所述第二客户端所显示的所述共享视图;通过所述第一节点将所述更新的视图状态数据从所述第二节点发送至所述第一客户端;以及使用所述更新的视图状态数据更新所述第一客户端的所述显示器,从而显示所述共享视图。在一个方面,所述服务器节点都不是集中式网关服务器;在替代方面,所述节点中的至少一个是集中式网关服务器。
所述第一节点和所述第二节点以及所述多个服务器节点中的至少另一个服务器节点可以包括服务器群集,所述第一节点和所述第二节点可以包括所述群集中的一组服务器节点的至少一部分,所述第一节点能够以完全按照顺序的方式向所述组中的所有其他服务器节点发送所述视图状态数据,并且发送所述视图状态数据可以包括所述第一节点向所述组中的所有其他服务器节点发送所述数据。
所述第一节点和所述第二节点以及所述多个服务器节点中的至少另一个服务器节点可以包括服务器群集,所述第一节点和所述第二节点可以包括所述群集中的一组服务器节点的至少一部分,所述第二节点能够以完全按照顺序的方式向所述组中的所有其他服务器节点发送所述更新的视图状态数据,并且发送所述更新的视图状态数据可以包括所述第二节点向所述组中的所有其他服务器节点发送所述更新的视图状态数据。
在在所述第二客户端的显示器上显示所述共享视图之前,所述方法可以包括通过所述第一节点和所述第二节点从所述第一客户端向所述第二客户端发送通知,该通知表明所述第一客户端显示的所述共享视图可以与所述第二客户端共享。
所述第一节点和所述第二节点以及所述多个服务器节点中的至少另一个服务器节点可以包括服务器群集,所述第一节点和所述第二节点可以包括所述群集中的一组服务器节点的至少一部分,所述第一节点能够以完全按照顺序的方式向所述组中的所有其他服务器节点发送所述通知,并且发送所述通知可以包括所述第一节点向所述组中的所有其他服务器节点发送所述通知。
在所述第一节点通过所述第二节点向所述第二客户端发送所述状态数据之前,所述方法可以包括使用所述第一节点访问识别所述第二节点的节点标识符,其中所述第一节点和所述第二节点包括服务器群集的至少一部分,并且其中所述节点标识符包括群集成员信息的至少一部分,所述群集成员信息识别所述服务器群集中的所有服务器节点并可以由所述服务器群集中的所有服务器节点访问。
所述群集成员信息可以包括唯一地识别所述服务器群集中的所述服务器节点中的每个的节点标识符;以及唯一地识别所述服务器节点所属的所述服务器群集的群集标识符。
所述服务器群集中的所述服务器节点中的每个服务器节点可以永久性地在本地存储其自身的版本的群集成员信息。
根据另一个方面,本发明提供了一种物理安全系统,该物理安全系统包括:具有显示器的第一客户端;具有显示器的第二客户端;以及多个服务器节点,其中所述服务器节点中的一个服务器节点(“第一节点”)与所述第一显示器通信,并且所述服务器节点中的另一个服务器节点(“第二节点”)与所述第二显示器通信,其中所述第一客户端和所述第二客户端以及所述第一节点和所述第二节点被配置为:从所述第一客户端向所述第一节点发送视图状态数据,所述视图状态数据代表在所述第一客户端的所述显示器上显示的共享视图;通过所述第二节点将所述视图状态数据从所述第一节点发送至所述第二客户端;使用所述视图状态数据更新所述第二客户端的所述显示器,从而显示所述共享视图;响应于所述第二客户端上所述共享视图的变化,将更新的视图状态数据从所述第二客户端发送至所述第 二节点,其中所述更新的视图状态数据代表所述第二客户端的所述显示器上显示的所述共享视图;通过所述第一节点将所述更新的视图状态数据从所述第二节点发送至所述第一客户端;以及使用所述更新的视图状态数据更新所述第一客户端的所述显示器,从而显示所述共享视图。在一个方面,所述服务器节点都不是集中式网关服务器;在替代方面,所述服务器节点中的至少一个是网关服务器。
根据另一个方面,本发明提供了一种非瞬时性计算机可读介质,所述非瞬时性计算机可读介质上编码有语句和指令,所述语句和指令引起处理器执行一种利用包括多个服务器节点的物理安全系统来共享视图(“共享视图”)的方法,该方法包括:从第一客户端向所述服务器节点中的一个服务器节点(“第一节点”)发送状态数据,所述状态数据代表所述第一客户端所显示的所述共享视图;通过所述服务器节点中的另一个服务器节点(“第二节点”)将所述视图状态数据从所述第一节点发送至第二客户端;使用所述视图状态数据更新所述第二客户端的显示器,从而显示所述共享视图;响应于所述第二客户端上所述共享视图的变化,将更新的视图状态数据从所述第二客户端发送至所述第二节点,其中所述更新的视图状态数据代表所述第二客户端所显示的所述共享视图;通过所述第一节点将所述更新的视图状态数据从所述第二节点发送至所述第一客户端;以及使用所述更新的视图状态数据更新所述第一客户端的所述显示器,从而显示所述共享视图。
该发明内容部分不一定描述了所有方面的全部范围。通过下面对具体实施方式的描述,本发明的其他方面,特征和优点对于本领域技术人员是显而易见的。
附图说明
在以下附图中描述了一个或多个示例实施方式:
图1是根据一个实施方式的分布式物理安全系统的框图。
图2是图1所示系统使用的协议族的框图。
图3是UML序列图,显示了图1所示系统是如何在不同系统用户之间共享设置的。
图4是UML序列图,显示了图1所示系统是如何在不同系统用户之间共享状态的。
图5是UML序列图,显示了图1所示系统是如何在不同系统用户之间共享视图的。
图6是UML序列图,显示了图1所示系统是如何在不同系统用户之间共享数据流的。
图7是图1所示系统的用户所看到的视图。
图8是根据另一个实施方式的用于在物理安全系统中共享数据的方法。
图9是根据另一个实施方式的用于自动重新加入群集的方法。
图10是UML序列图,显示了图1所示系统是如何与系统用户共享无人值守视图的。
图11是根据另一个实施方式的用于和包括多个服务器节点的物理安全系统中的无人值守显示器进行交互的方法。
图12是根据另一个实施方式的使用包括多个服务器节点的物理安全系统来共享视图的方法。
具体实施方式
在下面的描述中使用的方位术语,例如“顶部”,“底部”,“向上”,“向下”,“垂直”和“横向”仅仅是为了提供相对参照,不应理解为限制物品在使用过程中是如何定位的,或者如何安装在组件中,或者相对于环境是怎样的。此外,除非另有说明,本说明书中使用的术语,例如“连接”和它的变形,例如“连接的”应该理解为包括间接连接和直接连接。例如,如果第一装置连接至第二装置,则所述连接可以通过直接连接实现,或通过借助其他装置和连接的间接连接实现。同样,如果第一装置可通信地连接至第二 装置,则所述通信可以通过直接连接实现,或通过借助其他装置和连接的间接连接实现。
一旦监控系统发展为包括多个相机,使用单个服务器来运行监控系统就会变得不切实际或者不可能,因为受到存储能力和处理能力的限制。因此,为了适应增多的相机,为系统增加额外的服务器。这导致许多问题。
举例来说,监控系统的用户可能希望能够查看另一个用户正在查看什么(用户的“视图”)和使用系统中的相机捕获的,或系统中的服务器上存储的视频流-即使该用户并未直接连接到该相机或服务器。同样,用户可能希望能够访问用户状态(例如,系统的另一个用户当前是否登录到系统中)和在系统中的其他地方发生的系统事件(例如,告警是否被触发)-即使它们源自该用户并未直接连接到的服务器。在传统的通过增加服务器而扩展的监控系统中,提供该功能的典型方式是为系统增加集中式网关服务器。集中式网关服务器通过自身将系统事件,用户状态,视图和视频从系统中的一个服务器路由至另一个服务器,由此允许用户访问或查看这些事件,状态,视图和视频,而不管该用户直接连接到哪个特定服务器。但是,使用集中式网关服务器会为监控系统带来单点故障,因为如果集中式网关服务器出现故障,就不能再共享事件,状态,视图和视频。使用集中式网关服务器还增加了监控系统的成本,因为要为系统增加一个服务器专门用于提供集中式网关服务器的功能。
用户还可能想要在系统中的多个服务器之间同步通用设置(例如,形式为用户名,密码,访问权限等的用户访问信息)。在传统的通过增加服务器而扩展的监控系统中,该功能是通过将设置从一个服务器手动输出到其他服务器,或者使用集中式管理服务器实现的,所述集中式管理服务器存储所有的这些设置,其他服务器需要取回这些设置以进行通信。手动输出设置问题重重,因为存在相对较大的同步延迟,难以使用设置,并且因为大的同步延迟会损害系统冗余。使用集中式管理服务器会遇到上面讨论的使用集中式网关服务器所遇到的问题。
这里所描述的一些实施方式涉及分布式物理安全系统,例如监控系统,该分布式物理安全系统能够在系统中的两个或更多个服务器节点质检自动共享数据,例如视图,视频,系统事件,用户状态和用户设置,而不依赖集中式服务器,例如上面讨论的网关服务器或管理服务器。这些实施方式涉及点对点监控系统,在该系统中,用户通过客户端连接至服务器节点,例如网络视频录像机,相机和服务器。服务器节点分组为群集,群集中的每个服务器节点能够与群集中的其他服务器节点共享数据。为了共享该数据,每个服务器节点运行服务,该服务基于协议族交换数据,取决于该数据是否代表视图,视频,系统事件,用户状态或用户设置,该协议族以不同方式在服务器节点之间共享数据。图1至10描述了这些实施方式。
在替代实施方式中,被用于在不同服务器节点之间共享视图的一些技术可以应用于联邦网络(即包括集中式服务器的网络)和点对点网络,例如图1至9所示的点对点网络。图10和11显示了这些实施方式。
参考图1,显示了根据一个实施方式的分布式物理安全系统,其形式为监控系统100。系统100包括三个客户端102a-c(第一客户端102a至第三客户端102c,统称为“客户端102”),六个服务器104a-f(第一服务器104a至第六服务器104f,统称为“服务器104”),三个服务器节点相机106a-c(第一节点相机106a至第三节点相机106c,统称为“节点相机106”),和五个非节点相机114。
相机106和服务器104中的每个包括互相连接的处理器110和存储器112,其中存储器112上编码有语句和指令,所述语句和指令引起处理器110执行这里描述的方法的任意实施方式。服务器104和节点相机106分组为三个群集108a-c(统称为“群集108”)。”第一至第三服务器104a-c可通信地互相连接以形成第一群集108a;第四至第六服务器104d-f可通信地互相连接以形成第二群集108b;三个节点相机106可通信地互相连接以形成第三群集108c。第一至第三服务器104a-c被称为第一群集108a的“成员”;第四至第六服务器104d-f被称为第二群集108b的“成员”;第一至第三节点相机被称为第三群集108c的“成员”。
服务器104和节点相机106中的每个是“服务器节点”,因为它们知道其群集108中的其他成员的存在,并能够向其群集108中的其他成员发送数据;相反,非节点相机114不是服务器节点,因为它们只知道与它们直接连接的服务器104a,b,c,d,f。在所示的实施方式中,服务器节点通过访问群集成员信息而知道群集108中的所有其他成员,群集成员信息列出了群集108中的所有服务器节点。群集成员信息永久性地本地存储在每个服务器节点上,允许每个服务器节点在系统100运行期间重启时自动重新加入到它的群集108。除非另有说明,这里所提到的“节点”指的是“服务器节点”。
尽管在所示实施方式中群集108都没有参加群集间通信,但是在替代实施方(未显示)中,不同群集108的成员可以互相共享数据。在所示实施方式中,服务器104是可商购服务器,相机106,114由加拿大温哥华的威智伦(AvigilonTM)公司制造,但是,在替代实施方式中,可以使用其他合适类型的服务器108和相机106,114。
第一客户端102a通过可通信地连接至第一服务器104a和第四服务器104d而可通信地连接至第一群集108a和第二群集108b,第一服务器104a和第四服务器104d是第一群集108a和第二群集108b的成员;第二客户端102b通过可通信地连接至第二服务器104b和第四服务器104d以及第一节点服务器106a而可通信地连接至所有的三个群集108,第二服务器104b和第四服务器104d以及第一节点服务器106a是这些群集108的成员;第三客户端102c通过可通信地连接至服务服务器104e和第二节点服务器106b可通信地连接至第二群集108b和第三群集108c,服务服务器104e和第二节点服务器106b是第二群集108b和第三群集108c的成员。如同下面更详细地讨论的那样,在群集108a-c的任意一个中,每个节点运行允许节点根据协议族200(如图2所示)互相通信的服务,所述协议族200允许任意一个节点使用分布式计算(即不使用集中式服务器)与任意其他节点共享数据,该数据是视图,视频,系统事件,用户状态,用户设置或其他种类的数据。每个节点可以访问群集成员信息,该群集成员信息识别 构成相同群集108的一部分的节点,通过访问该群集成员信息,数据能够在群集108的所有节点之间共享和同步。
图2显示了相同100的节点所使用的协议族200的框图。协议族200分为三层,并包括表1中概括的下列协议:
表1:协议族200概括
下面描述协议族200中的每个协议的功能和运行:
传输层
传输层对应于开放式系统互联(OSI)模型的层4,负责在节点之间向群集支持层,数据同步层和应用层提供可靠的数据传输服务。系统100中的传输层包括UDP202和TCP/HTTP 204协议。
群集支持层
群集支持层包括用于发现节点,核实节点存在,检查节点活跃度,确定节点是否是群集108中的一个的成员,以及确定如何在节点之间路由数据的协议。
发现协议206
发现协议206是基于结构化信息标准促进组织(OASIS)颁布的WS-发现协议的1.1版本,该协议通过引用全部结合至此。在所示实施方式中,用GoogleTM Protobuf编码取代所颁布的标准中使用的XML格式。
发现协议206允许系统100中的任意节点通过向系统100中的其他节点组播探测(Probe)消息并等待它们做出响应而识别系统100中的其他节点。节点可以替代地在加入系统100时广播问候(Hello)消息以向其他节点意识到它的存在,而不需要其他节点首先组播Probe消息。Probe消息和Hello消息都在OASIS颁布的WS-发布协议上被模式化。
流言协议208
流言协议208是一种传染性协议,它通过在群集108的节点对之间随机执行数据交换而将数据从群集108的一个节点散播到所有节点。流言协议208通过交换形式为每个节点的心跳计数的“心跳状态”数据来传播活跃度,允许节点确定群集108中的一个节点何时意外离开了(例如,归咎于服务器崩溃)。流言协议208还传播“应用状态”数据,例如一致性协议216使用的顶级散列和被状态协议218用于确定何时在节点之间同步数据的状态实体标识符和它们的版本号,下面将更详细地描述。使用流言协议208传播的数据通过周期性的节点到节点交换而最终传播到群集108中的所有节点。
群集108中的任意两个节点之间借助流言协议208实现的数据交换包括执行从相同群集108中的第一节点(“节点A”)到第二节点(“节点B”)的远程过程调用(RPC):
1.节点A向节点B发送GreetingReq消息,该消息包括节点A知道的集群108中所有节点的摘要列表。对于每个节点,摘要包括唯一节点标识符和版本信息,每次该节点的心跳状态或应用状态变化时,所述版本信息都增加。举例来说,版本信息可以是一维版本号或多维版本向量。通过使用版本向量,允许摘要概括节点所经历的状态变化。
2.节点B向节点A发送GreetingRsp消息,该消息包含:
(a)节点的摘要列表,节点B希望从节点A接收更多的关于所述节点的信息,节点B确定发送给它的GreetingReq消息中的版本信息;
(b)节点A不知道的构成群集108的一部分的节点的摘要列表;
(c)心跳状态和应用状态中的一者或二者的列表,该列表将使节点A知道它所掌握的信息是过时信息的节点的最新信息;
(d)节点A认为构成群集108的一部分,而节点B知道已经从群集108移除的节点的列表。
3.然后节点A向节点B发送ClosureReq消息,其中节点A发送:
(a)节点的摘要列表,节点A希望从节点B接收更多的关于所述节点的信息(例如,节点A可以请求直到节点B向节点A发送GreetingRsp消息之前节点A不知道的节点的信息);
(b)状态列表,该状态列表将使节点B知道它所掌握的信息是过时信息的节点的最新信息;以及
(c)节点B认为构成群集108的一部分,而节点A知道已经从群集108移除的节点的列表。
4.节点B接下来向节点A发送ClosureRsp消息,其中节点B发送:
(a)作为对节点A在ClosureReq中的请求的响应的状态列表,该状态列表将使节点A知道它所掌握的信息是过时信息的节点的最新信息;以及
(b)自GtreetingRsp之后从群集108移除的节点的列表。
节点A和节点B交换RPC之后,它们将具有相同的活跃节点列表,该活跃节点列表包括群集108中的在RPC之前已知并且未从群集108移除的所有节点的心跳状态和应用状态的最新版本。
节点协议210
节点协议210负责为每个节点生成系统100的网络拓扑图的视图,该视图为每个节点提供网络地图,该网络地图允许该节点域系统100中的任意其他节点通信。在一些实施方式中,网络地图是路由表。网络地图参考通信端点,通信端点是地址(IP/FQDN),端口号,以及协议,可以通过 所述地址(IP/FQDN),端口号,以及协议在连接节点的IP网络上到达该节点。
节点协议210以三种方式实现这一目的:
1.通过下面进一步描述的“Poke交换”;
2.通过发现协议206,当节点加入或离开系统100时,发现协议206通知节点协议210。当节点加入系统100时,与该节点进行“Poke交换”;以及
3.响应于用户输入而手动实现。
Poke交换包括周期性低执行以下RPC,从而为节点生成网络地图:
1.Poke请求,其中节点A向节点B发送节点A自己的视图和节点A看到的节点A已知的其他节点的列表,随后节点B鉴于该信息而更新它的网络地图;以及
2.Poke响应,其中节点B向节点A发送节点B自己的视图和节点B看到的节点B已知的其他节点的列表,随后节点A鉴于该信息而更新它的网络地图。
根据TCP/HTTP协议204执行RPC。
为减少带宽的使用,如果节点信息在上次被交换之后改变了,则节点信息只在节点A和B之间交换。
Poke交换是在发现协议206通知节点协议210节点加入到系统100中之后执行,因为发现协议206通知节点的通信端点,但是不保证该节点可以使用这些通信端点到达该节点。例如,端点可能由于防火墙而无法使用。通过使用发现协议206在识别的节点上执行Poke交换,可以确认通信端点是否实际上可用。
节点协议210还可以确认通知的UDP通信端点是否可以到达,但是,所示实施方式中的节点协议210不在UDP协议202上执行Poke交换。
就群集108中的任意指定节点而言,对于相同群集108中的每个节点,网络地图使节点标识符与通信端点相关。因此,协议栈200中与节点协议 210通信的其他协议能够通过只使用该节点的节点标识符就将消息传送给群集108中的任意其他节点。
成员协议212
成员协议212负责确保群集108中的每个节点都保持群集108中的所有其他节点的群集成员信息,并允许节点通过RPC加入和离开群集108。使用状态协议218在群集108的节点之间共享群集成员信息。群集108中的每个节点保持其自身的群集成员信息的版本并从状态协议218学习群集108中的其他节点保持的群集成员信息。如同下面更详细地描述的那样,两个不同节点保持的群集成员信息的版本可能不匹配,因为一个节点上存储的最近被更新的版本群集成员信息的版本可能还没有与群集108中的其他成员同步。
对于每个节点,群集成员信息包括:
1.群集108的所有节点的成员列表,其中每个节点由以下特征表示:
(a)节点标识符,该节点标识符在系统100的所有节点之间是唯一的;
(b)节点的状态,该状态是以下之一:
(i)发现:节点是群集108的成员,但是自启动之后还未与群集108的其他成员同步;
(ii)正在加入:节点正处于加入群集108的过程中;
(iii)正在同步:节点正处于使用同步协议,一致性协议和状态协议214,216,218与它所加入的群集108同步数据的过程中;
(iv)有效:节点完成了群集成员信息同步,成为群集108中的有效节点;以及
(v)超时:节点变得无反应,不再是群集108的活跃成员(在被用户移除之前,该节点仍然是群集108的成员);
(c)会话令牌;
(d)当节点加入群集108时的群集成员信息的版本号;以及
(e)上次变化时的群集成员信息的版本号。
2.墓碑(gravestone)列表,它列出了从群集108移除的所有节点,其中每个被移除的节点由以下特征表示:
(a)该节点的节点标识符;以及
(b)当节点被移除时该节点的群集成员信息的版本。
在所示实施方式中,节点一直是至少包括其自身的群集108的成员;只有一个节点的群集108被称为“单独群集”。此外,虽然在所示实施方式中成员信息包括上面提到的成员列表和墓碑列表,但是在替代实施方式(未显示)中,成员信息可以具有不同组成,举例来说,在一个这种替代实施方式中,成员信息缺少墓碑列表,而在另一个这种替代实施方式中,节点的状态可能与上面描述的状态不同。
当节点A想要作为新的服务器并且想逃加入包括节点B的群集108时,它与节点B通信,发生以下情况:
1.节点A向节点B发生群集秘密,在所示实施方式中,该群集秘密是节点B在允许另一个节点加入它的群集108之前要求的密匙。客户端102中的一个向节点A提供群集秘密。由于节点B控制节点A对群集108的访问,几点B担任“成员控制节点”。
2.节点A和B交换它们的成员信息。节点A和B上的成员信息的版本被更新以包括节点A的节点标识符和节点A正加入的群集108中的所有节点的节点标识符。
3.当节点A接入群集时,节点A的状态改变为“正在加入”。
4.一旦加入,节点A的状态改变为“正在同步”,因为数据在节点A和它所加入的群集108之间交换。节点B也使用状态写协议218更新在群集108的所有其他节点上存储的成员信息的版本。对存储在节点A和群集108的所有成员上的成员信息的版本进行更新的过程被称为“同步”存储在所有这些节点上的成员信息的版本。
5.完成更新之后,节点A的状态变为“有效”。
数据同步层
数据同步层包括使数据能够以不同顺序保证和性能权衡在群集的节点之间发送的协议。数据同步层中的协议直接使用传输层和群集支持层中的协议。
同步协议214
同步协议214被用于以消息的形式将数据从系统100中的节点A发送到节点B,由此消息以节点A可以控制的顺序,例如节点A发送消息的顺序到达节点B。使用同步协议214传输数据的服务在专用高优先级I/O服务线程上运行。
在所示实施方式中,如同在下面资料中描述的一样,同步协议214基于称作Totem协议的虚拟同步的实现:Agarwal DA,Moser LE,Melliar-Smith PM,Budhia RK(1998)多环定序和拓扑维护协议,美国计算机学会计算机系统汇刊,93-122页。该资料通过引用全部结合至此。在同步协议214中,节点被分成组,下面的描述中称为“同步环”,任意同步环上的节点向相同环上的其他节点发送完全有序的消息。同步协议214以如下方式修改Totem协议:
1.同步协议214使用服务标识符和环标识符来识别同步环。服务标识符识别给定同步环的所有实例,而环标识符识别给定同步环的特定实例。例如,每次节点加入或离开同步环时,该环的环标识符会变化,而服务标识符不发生变化。服务标识符允许节点向共享相同服务标识符的一组节点(即属于相同同步环的一组节点)组播完全有序的消息。
2.在Totem协议中,在某些情况下,当节点不发送消息时,节点所看到的同步环并未反映出当节点开始发送消息时收敛的最终环结构。同步协议214允许节点互相发送探测消息,从而引起同步环在发送非探测消息之前收敛。
3.Totem协议只允许有序的消息被发送至构成同步环的一部分的所有节点。相反,同步协议214使用调度模块,通过提供接口以对系统100中的所有可到达节点进行广播;使用目的节点标识符的列表对系统100中的任意节点集合进行组播;和使用单个节点自己的节点标识符对系统100中 的单个节点进行广播,该调度模块从同步协议214提取网络层。调度模块还支持使用消息过滤对相同IP端口上的服务进行多路复用,并通过服务标识符路由。除非组播,来自节点的外发消息被发送至具有相同服务标识符的节点子集。
4.同步协议214使用分段消息和用户负载分块和合并来解决最大传输单位大小大约1500字节所带来的问题。
5.同步协议214修改节点使用加入消息的方式,加入消息是节点在Totem协议中用于加入同步环的消息。
(a)只有当节点在同步环中的当前可操作节点集合中具有最低节点标识符时才发送加入消息。
(b)在可操作集合中不具有最低节点标识符的节点将加入消息单播给可操作集合中具有最低节点标识符的节点。
(c)加入消息包括服务标识符,并且不是相应同步环的一部分的节点不进行响应。
相对于Totem协议,这些修改帮助降低节点加入同步环所使用的总计带宽。
6.同步协议214检测由于某些类型的网络错误配置而不能加入同步环的节点,并将它们列入黑名单。举例来说,能够向其他节点发送信息,但是不能从其他节点接收信息的节点对于其他节点而言将表现为只是曾经发送过探测消息,因为本实施方式中的其他所有消息都是被请求的,因此会被列入黑名单。
7.同步协议214执行负载加密和消息的真实性验证。
8.同步协议214限制每个节点能够保持Totem协议中使用的令牌的时间;在所示实施方式中,每个节点可以将令牌保持15ms。
9.同步协议214实施TCP友好的拥塞控制算法。
如同下面更详细地描述的那样,系统100为共享视图和协同应用222,以及共享事件和告警应用224使用同步协议;在这些应用222中,在群集 108的成员之间共享的数据是非永久性的,快速并且以已知顺序共享是有益的。
一致性协议216
一致性协议216被用于自动并且周期性地在群集108的所有节点之间共享数据,由此使用一致性协议216共享的数据最终在群集108中的所有节点上同步。在下面讨论共享设置应用226和共享用户对象应用228的部分中对使用一致性协议216共享的数据的类型进行更详细的描述。通过一致性协议216共享的数据存储在每个节点的数据库上,数据库中的每个项包括键值对,其中键唯一地识别值,并且键彼此独立。一致性协议216在节点之间同步数据,同时对不同节点可能在不同的数据库上进行的平行修改进行解析。如同下面更详细地讨论的那样,一致性协议216通过以下方式完成该目的:首先被告知数据库不同步;其次,找出哪些特定数据库项不同步;再次,找出项的哪个版本是最近的、同步的并且被保存的。
为了解析决定数据库何时发生变化的平行修改,为加入群集108的每个节点分配因果关系版本控制机制,该因果关系版本控制机制被用于记录节点何时改变了数据并确定所述改变是在群集108中的其他节点对相同数据进行改变之前还是之后做出的。在本实施方式中,每个节点使用区间树时钟(ITC)作为因果关系版本控制机制。但是,在替代实施方式中,可以使用其他版本控制机制,例如矢量时钟和版本矢量。系统100还使用协调世界时(UTC),使用网络时间协议在不同节点之间同步协调世界时,从而在两个或更多个节点的ITC相同时确定做出改变的顺序。在P.Almeida,C.Baquero,和V.Fonte(2008)区间树时钟:动态系统的逻辑时钟,分布式系统原理,计算机科学讲义,5401卷,259-274页中更详细地描述了ITC,该资料通过引用全部结合至此。
一致性协议216在节点之间同步的目录划分为分支,每个分支被称作最终一致性域(ECD)。一致性协议216独立于其他ECD对每个ECD进行同步。EC内的每个数据库项被称作最终一致性项(ECE)。每个ECE包括键;来自ITC和UTC的时间戳,只要ECE被修改,这两个时间戳都 会更新;使用-例如-Murmurhash函数生成的ECE的散列值;数据自身;以及当ECE被删除时添加的墓碑。
散列值被用于比较两个不同节点上的相应ECD和ECE,从而确定它们是否相同。当两个相应的ECD被比较时,比较这些ECD的“顶级”散列。给定节点上的ECD的顶级散列是通过散列该节点内的所有ECE生成的。如果顶级散列匹配,则ECD相同,否则,一致性协议216确定ECD不同。为了确定ECD中的哪个特定ECE不同,以逐渐减小的范围对两个节点上的ECE进行散列。进行散列的间隔最终充分收缩,由此分离并识别两个节点之间不同的ECE。可以使用双向跳跃表来-举例来说-确定和比较ECD间隔的散列值。
利用一致性协议216进行通信的两个节点可以使用以下RPC:
1.SynEntries:SynEntries将新的或更新的ECE传输给节点,该节点将ECE插入到合适的ECD中。
2.GetEntries:GetEntries将键或一系列键传输给节点,该节点返回与所述一个或多个键对应的ECE。
3.SynEntries:SynEntries将键或一系列键传输给节点,然后两个节点比较ECE的逐渐减小范围的散列,从而确定两个节点之间的哪些ECE不同,如同上面描述的那样。如果ECE不同,则节点将它们的ECE合并,由此通过比较ITC时间戳在节点上保存相同的ECE;如果ITC时间戳匹配,则节点比较与ECE关联的UTC时间戳。这些时间戳用作版本信息,该版本信息允许两个节点采取这些ECE的版本信息所指示的最近修改的ECE。
当节点改变ECE时,该节点通常调用SynEntries以通知群集108中的其他节点该ECE被改变了。如果群集108中的某些节点不可用(例如,它们离线了),一旦不可用节点返回线上,则使用流言协议208而不是SynEntries来将顶级散列传输给不可用节点。在前面讨论群集108中的流言协议208的部分中已经提到,每个节点保持自己的顶级散列,该顶级散列通过使用流言协议208与节点标志符,版本信息,以及心跳状态一起传 播到其他节点。当另一个节点接收到该散列时,该节点比较接收到的顶级散列和其自身的顶级散列。如果顶级散列相同,则两个节点上的ECE匹配,否则,ECE不同。
如果ECE不同,则不管这是使用SynEntries还是使用流言协议208确定的,运行SynEntries或者接收顶级散列的节点将对ECE进行同步。
状态协议218
如同上面所讨论的那样,流言协议208在整个群集108中共享群集108中的节点的状态实体标识符和它们的版本号(“状态实体对”)。示例性状态实体标识符可以-举例来说-表示不同类型的形式为状态项的状态数据,例如节点的存储有多少是可用的;哪些设备(例如,非节点相机114)与该节点连接;哪个客户端112与该节点连接;以及群集成员信息。当一个节点通过流言协议208接收到该数据时,该节点比较状态项的版本号和它本地存储的相应状态项的版本号。如果版本号不同,则状态协议218与作为状态实体对的来源的节点开始RPC(“Syn RPC”),从而更新相应的状态项。
通过路径和节点标识符唯一地确认使用状态协议218同步的状态项。与使用一致性协议216同步的数据不同,状态项所描述的节点是指被允许修改状态项或状态实体对的唯一节点。因此,与使用一致性协议216同步的ECD和ECE不同,在节点A本地存储的节点A的状态项的版本一直都是该状态项的最近版本。
如果节点A同时修改多个状态项,则当节点B调用SyncRPC时,状态协议218为节点B一起更新所有的修改后状态项。因此,同时改变的项可能互相依赖,因为它们将一起被发送给节点B以进行分析。相反,每个使用一致性协议216同步的ECE以独立于其他ECE的方式同步,因此ECE不能互相依赖,因为节点B不能依赖于以任意特定顺序来接收项。
应用
系统100中的每个节点运行实施上述协议族200的服务。虽然在所示实施方式中协议202-218中的每个使用一种服务,但是在替代实施方式(未 描述)中,可以使用更多或较少的服务来实施协议族200。每个节点自身实施协议族200,因此,与使用集中式服务器的传统物理安全系统相反,系统100是分布式的,更不容易受到任何单个节点故障的伤害。例如,如果系统100中的一个节点发生故障(“故障节点”),在每个剩余的节点上,运行状态协议218(“状态服务”)的服务将通过监控故障节点的心跳状态确定该故障节点离线,并将向每个其他节点上运行节点协议210和成员协议212的服务(分别称为“节点服务”和“成员服务”)告知该故障。每个节点上实施同步协议214和一致性协议216的服务(分别称为“同步服务”和“一致性服务”)将随后停止与故障节点共享数据,直到故障节点返回线上并重新加入它的群集108。
下面描述系统100能够实施的各种应用220-230。应用220-230可以实施为图8所示的用于共享数据的示例性方法800的各种实施方式。方法800从方块802开始,前进至方块804,在方块804中,系统100中的第一节点访问识别系统100中的另一个节点的节点标识符。第一节点和第二节点都是相同服务器群集108的成员。第一节点所访问的节点标识符是识别群集108中所有成员的群集成员信息的一部分。群集成员信息可以被群集108的所有成员访问。在所示实施方式中,群集108的每个成员永久性地在本地存储其自身的群集成员信息的版本;但是,在替代实施方式(未描述)中,群集成员信息远离节点存储和/或存储在中心位置。在访问第二节点的节点标识符之后,在方块806中,第一节点像第二节点发送数据,接下来在方块808中,方法800结束。举例来说,当使用上面描述的节点服务时,在第一节点上运行的同步服务和一致性服务能够通过使用第二节点的节点标识符,并通过委托将第二节点的通信端点与它的节点标识符关联的节点服务责任而将数据发送至第二节点。在方块806中,将数据从第一节点发送给第二节点可以包括双向数据交换的一部分,例如当根据流言协议208交换数据时。
共享设置应用226和共享用户对象应用228
在系统100的运行过程中,永久性地存储的信息在群集108的节点之间传输。共享设置应用226和共享用户对象应用228在节点之间共享的该实时信息的例子是共享设置,例如响应于系统事件(例如,告警触发)而实施的规则和用户对象,例如用户名,密码和主题。使用一致性协议216在节点之间共享这种类型的数据(“一致性数据”);一般而言,一致性数据是不需要以实时方式或完全有序方式共享,并由每个节点永久性地存储的数据。但是,在替代实施方式(未描述)中,一致性数据可以不永久性地存储。
图3显示了UML序列图300,其中形式为用户设置的一致性数据在第一用户302a和第二用户302b(统称为“用户302”)之间共享。用户302,第一客户端102a和第二客户端102b,以及在本示例中作为第一节点和第二节点的第一服务器104a和第二服务器104b在图300中是对象。服务器104a,b构成相同群集108a的一部分。由于与客户端102a,b通信的服务器104a,b未直接互相连接,因此使用一致性协议216来在两个服务器104a,b之间传输数据,由此在两个用户302之间传输数据。尽管所示实施方式描述了共享设置,但是在替代实施方式(未描述)中,用户302可以类似地共享用户对象。
图300具有两个框332a、b。在第一框332a中,第一用户302a命令第一客户端102a打开设置面板(消息304),客户端102a随后执行SettingsOpenView()程序(消息306),该程序将设置传输至第一服务器104a。同时,第二用户302b以相似方式命令第二客户端102b(消息308和310)。在第二框332b中,用户302同时编辑他们的设置。第一用户302a通过使第一客户端102a运行UIEditSetting()(消息312)而编辑他的设置,随后第一客户端102a通过使第一服务器104a运行SettingsUpdateView()(消息314)而更新第一服务器104a上存储的设置。第一服务器104a随后运行ConsistencySetEntries()(消息316),ConsistencySetEntries()执行SetEntries程序并将第一用户302a输入的设置传输至第二服务器104b。第二服务器104b随后通过调用 SettingsNotifyViewUpdate()(消息318)将传输过来的设置发送给第二客户端102b,随后第二客户端102b更新第二用户302b(消息320)。同时,第二用户322b类似地修改设置,并使用一致性协议216将这些设置发送给第一服务器104a(消息322,324,326,328和330)。服务器104a,b中的每个永久性地保存用户设置,由此它们不需要在服务器104a,b中的任意一个重启时在服务器104a,b之间重新同步。
共享事件和告警应用224
在系统100的运行过程中,在运行时间期间生成的实时信息在群集108的节点之间传输。共享事件金额告警应用224在节点之间共享的该实时信息的例子是告警状态(即是否在系统100中的任何地方触发了告警);系统事件,例如检测到的运动,设备(例如节点相机106中的一者)是否正向系统100的剩余节点发送数字数据,设备(例如,运动检测器)是否连接至系统100,设备是否正在记录,告警是否已发生或被用户302确认,用户302中的一个是否正在系统100上执行审计,服务器104中的一个是否已经出现了错误,与系统连接的设备是否出现了错误,是否发生了销售点文本交易;以及服务器节点到客户端通知,例如,是否设置/数据发生了变化,当前记录状态,是否更新了时间线,以及数据库查询结果。在本实施方式中,使用同步协议在节点之间传输的数据被称为“同步数据”,在运行时间生成,并且不被节点永久性地保存。
图4显示了UML序列图400,其中使用同步协议214在服务器104之间共享告警通知。图400中的对象包括一个非节点相机114,第一群集108a中的三个服务器104,以及与第一群集108a中的服务器104c连接的第二客户端102b。
在图400的头三个框402中,服务器104中的每个加入名为“ServerState”的同步环,由此任意服务器104的状态能够传输至任意其他节点104;在所示实施方式中,将要传输的状态是“AlarmStateTriggered”,意思是在服务器108中的一个上面通过非节点相机114检测到的事件触发了告警。在框404中,第二服务器104b被选为告警应用的主机摂,这意 味着是由第二服务器104b确定来自非节点相机114的输入是否满足转变到AlarmStateTriggered状态的标准,并向同步环中的其他服务器104a,c发送消息,以将它们也转变到AlarmStateTriggered状态。
第二用户302b在服务器104加入ServerState同步环之后登录第三服务器104c(消息406)。在用户302b登录之后,第三服务器104c加入另一个名为“ClientNotification”的同步环,如同后面所更详细地描述的那样,该还用于将系统状态传输至用户302b,而ServerState同步环用于只在服务器104之间进行通信。非节点相机114向第一服务器104a发送数字输入,例如门或窗被打开的指示(消息410),随后第一服务器104a检查该数字输入是否满足用于确定是否在系统100中触发告警的一组规则(消息412)。在所示实施方式中,第一服务器104a确定应该触发告警,并相应调用AlarmTrigger(),其警示第二服务器104b去改变状态。第二服务器104随后转变状态为AlarmStateTriggered(消息416)并向ServerState同步环发送消息,该消息命令其他两个服务器104a,c也将状态改变为AlarmStateTriggered(消息418)。在命令其他服务器104a,c之后,第二服务器104b运行AlarmTriggerNotification()(消息420),这引起第二服务器104b也加入ClientNotification同步环(框422)并向ClientState同步环传递消息,该消息引起位于ClientState同步环上的另一个服务器,即第三服务器104c转变为“NotifyAlarmTriggered”状态(框424)。一旦第三服务器104c变为该状态,它直接通知第二客户端102b告警被触发了,第二客户端102b将该消息转发给第二用户302b,并等待用户302b确认告警(消息426)。一旦用户302b确认了告警,第二服务器104b相应地将状态变为“AlarmStateAcknowledged”(消息428)并向ServerState同步环发送消息,由此其他两个服务器104a,c也相应地改变状态(框430)。第二服务器104b随后再次将状态改变为“NotifyAlarmAcknowledged”(消息432),并通过ClientNotification同步环向第三服务器104c发送消息,因引起第三服务器104c相应地改变状态(框434)。第三服务器104c随 后通知客户端102c系统100已经确认了该告警(消息436),系统100将该消息转发给第二用户302b(消息438)。
在第二服务器104b发生故障,不能再担任同步环的主机的替代实施方式(未描述)中,系统100自动选出服务器104中的另一个服务器担任环的主机。同步环的主机是被允许在同步环被用于在节点之间共享告警通知时引起环上的所有其他节点改变状态的服务器104。
图7显示了根据图4中的图400确认告警状态时呈现给用户302的示例视图700。视图700包括显示来自非节点相机114的实时视频流的视频面板702a-c(统称为“面板702”);表明告警已经由非节点相机114正记录的内容触发的警示704;以及确认按钮706,用户302点击该确认按钮706以确认被触发的告警。
共享视图和协同应用222
系统100的用户也可能想要共享各自的视图700并在共享视图700的同时-例如,通过系统100互相发生消息并互相谈话-协作。该共享视图和协同应用222因此允许用户302共享数据,例如视图状态和服务器到客户端通知,例如用户消息,并共享请求。这种类型的数据是实时共享的同步数据。
图5显示了UML序列图500,其中使用同步协议214在用户302之间共享视图700。图500包括六个对象:第一用户302a和第二用户302b,分别与第一用户302a和第二用户302b连接的第一客户端102a和第二客户端102b,以及分别与第一客户端102a和第二客户端102b连接的第一服务器104a和第二服务器104b。
第一用户302a通过第一客户端102a登录第一服务器104a(消息502),然后第一服务器104a加入ClientNotification同步环(框504)。相似地,第二客户端302b通过第二客户端102b登录第二服务器104b,然后第二服务器104b也加入ClientNotification同步环(框508)。
第一用户302a接下来命令第一客户端102a他想共享他的视图700。第一用户302a通过点击共享按钮来实现这一目的(消息510),点击之后 引起第一客户端102a打开将在第一服务器104a上共享的视图700(“共享视图700”)(消息512)。第一服务器104a创建共享视图会话(消息514),然后将会话标识符发送给第一客户端102a(消息516)。
在框518中,每个客户端102加入允许它们共享共享视图700的同步环。第一服务器104a加入框520中的SharedView1同步环。同时,第一客户端106a命令第一服务器104a通过同步环214告知服务器104b第一用户302a的视图700能够通过向第一客户端104a传递用户列表和会话标识符被共享(消息522)。第一服务器104a通过以下方式实现这一目的:通过ClientNotify同步环向第二服务器104b发送消息,该消息引起第二服务器104变为NotifyViewSession状态(框524)。在NotifyViewSession状态中,第二服务器104b引起第二客户端106b提示第二客户302b共享第一用户302a的视图700(消息526和528),第二用户302b的肯定回应转发回给第二服务器104b(消息530和532)。第二服务器104b随后加入SharedView1同步环(框534),该SharedView1同步环被用于共享第一用户302a的视图700。
在第二框519中,每个用户106更新共享视图700,并且该更新自动互相共享。第一用户302a放大共享视图700的第一面板702a(消息536),第一客户端102a向第一服务器104a转发第一用户302a是如何放大第一面板702a的(消息538)。第一服务器104a通过沿着SharedView1同步环传递放大细节而与第二服务器104b共享这些放大细节(框540)。第二服务器104b由此更新在第二客户端106b上显示的共享视图700(消息542),接下来更新的共享视图700被显示给第二用户302b(消息544)。同时,第二用户302b平移共享视图700中的第二面板702b(消息546),第二客户端102b向第二服务器104b转发第二用户302b是如何平移该面板702b的(消息548)。第二服务器104b通过沿着SharedView1同步环传递平移细节而与第一服务器104a共享这些平移细节(框550)。第一服务器104a由此更新在第一客户端106a上显示的共享视图700(消息552),接下来更新的共享视图700被显示给第一用户302a(消息556)。
在第二框519之后,第一用户302a关闭他的视图700(消息556),该视图700被转发给第一服务器104a(消息558)。第一服务器104a因此离开SharedView1同步环(消息和框560)。第二用户302b同样关闭他的视图700,这引起第二服务器104b离开SharedView1同步环(消息562和564,以及消息和框566)。
在图5所示的示例中,用户302平移和放大共享视图700。在替代实施方式(未描述)中,用户302可以通过其他方式修改共享视图700。例如,用户302可以各自改变面板702的布局;选择是以实时方式还是回放方式来显示视频,在这种情况下用户302还能够暂停,播放或快进视频;以及将用户对象,例如地图或网页与用户对象相关信息,例如修订记录一起显示。在这些替代实施方式中,使用同步环同步的附加状态信息的例子包括视频是否正被播放,暂停或快进以及用户对象的修订记录。
虽然上面的描述聚焦于图1所示点对点物理安全系统100中的共享视图和协同应用222的实施,但是,更普遍地,该应用222可以在包括多个服务器104的物理安全系统,例如包括集中式网关服务器的联邦系统中实施。图12显示了这种更普遍的实施方式的一个例子,图12描述了一种使用包括多个服务器节点的物理安全系统来共享视图的示例方法1200。方法1200从方框1202开始,前进至方框1204,在方框1204中,代表第一客户端(例如,第一客户端102a)所显示视图(其作为将被共享的视图)的视图状态数据从第一客户端发送至第一服务器节点(例如第一服务器节点104a和通过消息538发送的视图状态数据)。在方框1206中,视图状态数据通过第二服务器节点(例如,第二服务器104b和通过框540和消息542发送的视图状态数据)从第一服务器节点转发至第二客户端(例如,第二客户端102b)。在方框1208中,第二客户端接下来利用视图状态数据更新显示器,从而显示共享的视图(例如,通过消息544)。响应于第二客户端上的共享视图的变化,例如由在第二客户端上与用户的交互引起的变化(例如,通过消息546),在方框1210中,更新的视图状态数据从第二客户端发送至第二服务器节点(例如,通过消息548)。更新的视图 状态数据代表第二客户端上显示的共享视图。在方框1212中,更新的视图状态数据通过第一服务器节点从第二服务器节点发送至第一客户端(例如,通过框550和消息552),在方框1214中,当共享视图在第二客户端上利用更新的视图状态数据被修改时,第一客户端的显示器随后被更新以显示共享视图(例如,通过消息554)。方法1200在方框1216中结束。在替代实施方式中,例如,当涉及使用集中式网关服务器的联邦系统时,所有的视图状态数据可以通过集中式服务器来路由。
无人值守视图共享应用225
系统100的用户302还可能想要能够查看和控制未直接或间接连接至服务器104,用户302不直接控制(即,用户302通过其他服务器104控制)的显示器上的视图(该显示器是“无人值守显示器”,该无人值守显示器上的视图是“无人值守视图”)。例如,无人值守显示器可以安装在用户302前面的墙上,并通过群集108中的一个服务器104连接至服务器群集108,而用户302可以通过群集108中的其他服务器104连接至服务器群集108。如同下面参考图10所讨论的那样,虽然用户302都不直接连接至控制无人值守视图的服务器104,但是无人值守视图共享应用225允许用户302查看并控制无人值守视图。在服务器104之间交换以实现该功能的视图数据是实时共享的同步数据。
图10显示了UML序列图1000,其中利用同步协议214与第一用户302a共享无人值守视图。图1000包括以下六个对象:第一用户302a;与第一用户302连接,并包括显示器(“客户端显示器”)的第一客户端102a,第一用户302与该显示器交互;第一服务器104a和第二服务器104b;在硬件上运行的监控实例1004,例如,该硬件是客户端102中的无人值守客户端,该无人值守客户端连接至第二服务器104b和无人值守显示器;以及设置监控实例1004的管理员1002。在替代实施方式(未描述)中,无人值守显示器可以直接连接至第二服务器104b,监控实例1004可以在第二服务器104b上运行。
在图10中,管理员1002创建监控实例1004(消息1006),监控实例1004随后自动登录到第二服务器104b上(消息1008和1010)。监控实例1004通过在第二服务器104上调用SharedViewOpen(viewState)使无人值守视图对于第二服务器104b可用,其中viewState是表示无人值守视图的视图状态数据(消息1012)。接下来,该第二服务器104b通过运行SharedViewSessionCreate()创建共享视图会话(消息1014),并随后将相应的会话标识符发送至监控实例(消息1016)。在接收到会话标识符之后,监控实例1004加入SharedView1同步环(框1018),SharedView1同步环用于将视图状态数据发送至群集108中的其他服务器104和从群集108中的其他服务器104发送视图状态数据,所述其他服务器104也是SharedView1同步环的成员。
在加入SharedView1同步环之后,监控实例1020向群集108中的其他服务器104发布无人值守视图可以被查看和控制的通知。监控实例1020通过在第二服务器104上调用RegisterMonitor(sessionId)实现这一目的(消息1018),这引起与无人值守视图相关的会话标识符注册到新的目录中(框1022)。使用一致性协议216与群集108中的其他服务器104共享视图目录。
一旦视图目录被传播给群集108中的其他服务器104,这些其他服务器104就能够访问目录,从而决定可以查看和控制哪些无人值守视图。在第一服务器104a接收到视图目录后,第一用户302a通过第一客户端102a登录第一服务器104a,从而获得对群集的访问(消息1024)和视图目录的访问。第一用户302a命令第一客户端102a通过调用UIDisplayMonitor(sessionId)来显示无人值守视图(消息1026),这引起第一客户端102a向第一服务器104a发送无人值守视图的会话标识符,命令打开无人值守视图(消息1028)。第一服务器104a确认第一客户端102的命令(消息1030),然后加入SharedView1同步环(框1032),从而自动接收描述无人值守显示器当前视图的视图状态数据(消息1034),并自动保持了解接下来对无人值守视图的任何改变。
第一用户302a接下来平移在客户端显示器上显示的无人值守视图的一个面板(消息1036),第一客户端102a通过调用SharedViewUpdate(action=pan,panelId=2)向第一服务器104a转发该平移动作和被平移的特定面板的标识(消息1038)。第一服务器104a将更新的视图状态数据发送给作为SharedView1同步环的成员的所有服务器104(框1040),这允许所有的这些服务器104重现无人值守视图的更新版本。第二服务器104b接收该更新的视图状态数据并通过调用NotifySharedViewUpdate(action=pan,params,panelId=2)将其转发给监控实例1004(消息1042)。监控实例1004接下来更新无人值守显示器,以显示第一用户302a修改的无人值守视图(消息1044)。
在图10所示的示例中,第一用户302a平移无人值守视图的多个面板中的一个。在替代实施方式(未描述)中,第一用户302a可以通过其他方式修改无人值守视图。例如,第一用户302a可以改变一个或多个无人值守视图面板的布局;选择是以实时方式还是回放方式来显示视频,在这种情况下第一用户302a还能够暂停,播放或快进视频;以及将用户对象,例如地图或网页与用户对象相关信息,例如修订记录一起显示。在这些替代实施方式中,使用同步环同步的附加状态信息的例子包括视频是否正被播放,暂停或快进以及用户对象的修订记录。
在另一个替代实施方式(未描述)中,无人值守视图共享应用225可以被用于创建聚合显示器,该聚合显示器包括nxm个无人值守显示器的矩阵。例如,当n=m=2,因此具有四个无人值守显示器时,第一用户302a可以同时控制所有四个无人值守显示器,从而创建一个大的虚拟显示器。单个视频随后能够被放大,使得每个无人值守视图是视频的四分之一,从而允许视屏能够被放大并在四个无人值守显示器上显示。在该实施方式中,无人值守显示器的监控实例1004可以通过一到四个服务器104中的任意一个与服务器群集108通信。
虽然图10只显示了用户302a,但是在替代实施方式(未描述)中,一个以上的用户302能够通过同样加入SharedView1同步环而查看和控制 无人值守视图。在上面包括n x m个无人值守显示器矩阵的聚合显示器的示例中,聚合显示器可以安装在房间里面,供多个用户302同时查看,每个用户302具有控制每个无人值守视图的能力。
虽然上面的描述聚焦于图1所示点对点物理安全系统100中的无人值守视图共享应用225的实施,但是,更普遍地,该应用225可以在包括多个服务器104的物理安全系统,例如包括集中式网关服务器的联邦系统中实施。该更普遍实施方式的一个例子在图11中显示,图11描述了一种与包括多个服务器节点的物理安全系统中的无人值守服务器交互的示例方法1100。方法从方框1102开始,前进至方框1104,在方框1104中,与无人值守显示器通信的第二服务器节点(例如第二服务器104b)向第一服务器节点(例如第一服务器104a)发送代表无人值守视图的视图状态数据(例如,通过图10所示框1020和1032上的同步环)。方法110接下来前进至方框1106,在方框1106中,无人值守视图的至少一部分显示在客户端显示器上(例如,根据图10所示消息1034对显示器的更新)。在替代实施方式中,例如,当涉及使用集中式网关服务器的联邦系统时,所有的视图状态数据可以通过集中式服务器来路由。
群集流应用220
用户302中的一个还可能想要在用户302和相机106,114之间的点对点连接不可用的情况下从相机106,114中的一个流动视频。图6显示了UML序列图500,其中视频通过第一服务器104a,第二服务器104b和第一客户端102a从非节点相机114流动至第一用户302a。UML图包括五个对象:第一用户302a,第一客户端102a,第一服务器104a,第二服务器104b和非节点相机114。第一客户端102a可以直接与第一服务器104a通信,但是不能直接与第二服务器104b通信。但是,第一服务器104a和第二服务器104b能够互相直接通信。此外,虽然第二服务器104b和非节点相机114能够互相直接通信,但是第一服务器104a和非节点相机114不能直接通信。
第二服务器104b首先与非节点相机114建立回话,从而使视屏从非节点相机114流动至第二服务器104b。第二服务器104b首先与非节点相机114建立实时流协议(RTSP)会话(消息602和604),并命令非节点相机114向它发送视屏(消息606和608)。非节点相机114随后开始流动(消息610)。
第一用户302a与第一客户端102a建立连接(消息612),随后命令第一客户端102a打开显示流式视频的窗口(消息614)。第一客户端102接下来调用LookupRoute()以确定连接到那个服务器104;因为第一客户端不能直接连接至第二服务器104b,它与第一客户端104a建立RTSP连接(消息618)。第一服务器104b随后调LookupRoute()用以确定连接到哪个节点上来访问实时视频,并确定应该连接至第二服务器104b(消息620)。第一服务器104a随后与第二服务器104b建立RTSP连接(消息622),第二服务器104b向第一服务器104a返回会话标识符(消息624)。第一服务器104a将会话标识符转发给第一客户端102a(消息626)。第一客户端102a使用会话标识符命令第二服务器104b开始播放RTSP视频(消息628至634),第二服务器104b随后通过第二服务器104,然后是第一服务器104a,再然后是第一客户端102a将视频流动至第一用户302a(消息636至640)。
虽然图6是将视频从与群集108中的一个服务器104a连接的一个非节点相机114路由至相同群集108中的其他服务器104,但是在替代实施方式(未描述)中,视频还可以从群集108中的一个节点相机106路由至相同群集108中的其他节点相机106。
重启
在本实施方式中,群集成员信息永久性本地存储在每个节点上。当一个节点重启时,它自动重新加入在重启之前就是其成员的群集。这在图9所示的示例方法900中描述。在执行方框806之后,群集108中的一个节点重启(方框902)。重启之后,该节点访问永久性存储的群集成员信息,该群集成员信息识别群集108,在重启之前该节点就是群集108的成员(方 框904),随后在返回方框808之前重新加入该群集108(方框908)。节点重启之后自动重新加入群集108是有利的,因为这有利于系统100在它的任意一个或多个服务器重启之后恢复。因为每个节点永久性存储一致性信息,在重新加入群集108后,只再次同步那些在节点上次离开群集108之后发生变化的一致性信息,从而节省了带宽。
虽然描述了某些示例实施方式,但是未描述的一些替代实施方式也是可以的。例如,虽然在所描述的实施方式中节点相机106和非节点相机114互不相同,但是在替代实施方式(未描述)中,单个相机可以同时作为节点相机和非节点相机。例如,在图1中第一相机106a是节点,该节点是1群集108的成员;但是,如果第一相机106a还直接连接至第五服务器104e而只保留它的第三群集108c的群集成员信息,则第一相机106a将仍然是第三群集108c的成员,同时从第五群集104e的角度看作为非节点相机114。
前述实施方式中使用的处理器可以是-举例来说-微处理器,微控制器,可编程逻辑控制器,现场可编程门阵列,或特殊应用集成电路。计算机可读介质的例子是非瞬时性的,包括光盘,例如CD-ROM和DVD,磁性介质,例如硬盘和其他形式的磁盘存储,半导体介质,例如闪存,随机存取存储器和只读存储器。
本说明书中讨论的任何方面或实施方式能够与本说明书中讨论的任何其他方面或实施方式仪器实施或组合。
为简单起见,上面的示例实施方式描述为不同的互连功能块。但是这不是必然的,存在这样的情况:这些功能块等同地聚合到单个逻辑设备,程序或运算中,具有不清晰的界限。在任何情况下,功能块可以由它们自己实施,或与其他硬件或软件组合在一起实施。
虽然前面描述了特定实施方式,但是应该了解,其他的实施方式也是可能的并且包括在本申请中。本领域技术人员明白,未显示的对前述实施方式的修改或调整是可能的。
原文链接:https://www.zhuanlichaxun.net/p-22810.html
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/6030