# US 10,454,997 B2 · Distributed physical security system

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,454,997 B2
- Document ID: US10454997B2
- Status: Granted
- Kind: B2
- Application number: 13/607,447
- Filed: 2012-09-07
- Published: 2014-03-13
- Granted: 2019-10-22
- Earliest claimed: 2012-09-07
- Assignees: Avigilon Corporation
- Applicants: Andrew Martz; Ross Wightman; Greg Magolan; Shaun Marlatt
- Inventors: Andrew Martz; Ross Wightman; Greg Magolan; Shaun Marlatt
- Web page: https://patentgrep.com/patent/US10454997B2

## CPC

- H04L 67/10: in which an application is distributed across nodes in the network (software deployment G06F8/60; multiprogramming arrangements G06F9/46)
- G06F 21/6272: {by registering files or documents with a third party}
- H04L 12/2825: {Reporting to a device located outside the home and the home network (access arrangements H04L12/2856; for remote control or remote monitoring of applications H04L67/025; telephonic communication systems adapted for combination with telemetering systems H04M11/002)}
- G08B 13/19697: {Arrangements wherein non-video detectors generate an alarm themselves}
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- G08B: SIGNALLING SYSTEMS, e.g. PERSONAL CALLING SYSTEMS; ORDER TELEGRAPHS; ALARM SYSTEMS

## Abstract

The present disclosure is directed at methods, systems, and techniques for sharing data in a physical security system that includes multiple server nodes. One of the server nodes (a “first node”) accesses a node identifier identifying another of the server nodes (a “second node”), following which the first node sends the data to the second node. Both the first and second nodes are part of a server cluster that includes multiple server nodes, and each of the server nodes in the server cluster has access to cluster membership information. The cluster membership information identifies all of the server nodes in the server cluster, and the node identifier is part of the cluster membership information.

## Claims

### Claim 1

A method for sharing data in a physical security system that comprises a plurality of server nodes, the method comprising:
(a) accessing, using one of the server nodes (“first node”), a node identifier identifying another of the server nodes (“second node”), wherein the first and second nodes comprise at least part of a server cluster, the node identifier comprises at least part of cluster membership information identifying all and accessible by all server nodes in the server cluster, and each of the server nodes in the server cluster persistently stores its own version of the cluster membership information locally;
(b) sending the data from the first node to the second node; and
(c) adding a new server node to the server cluster, the adding comprising:
(i) exchanging a version of the cluster membership information stored on the new server node with the version of the cluster membership information stored on one of the server nodes that is already part of the server cluster (“membership control node”); and
(ii) synchronizing the version of the cluster membership information stored on the new server node with the versions of the cluster membership information stored, prior to the new server node joining the cluster, on all the server nodes in the cluster.

### Claim 2 (depends on 1)

A method as claimed in claim 1 wherein the server cluster comprises at least three server nodes.

### Claim 3 (depends on 1)

A method as claimed in claim 1 wherein the server nodes comprise cameras, network video recorders, and access control servers.

### Claim 4 (depends on 1)

A method as claimed in claim 1 further comprising:
(a) accessing, using the second node, a node identifier identifying the first node; and
(b) sending additional data from the second node to the first node.

### Claim 5 (depends on 1)

A method as claimed in claim 1 wherein the cluster membership information comprises:
(a) a node identifier uniquely identifying each of the server nodes in the server cluster; and
(b) a cluster identifier uniquely identifying the server cluster to which the server nodes belong.

### Claim 6 (depends on 5)

A method as claimed in claim 5 further comprising:
(a) rebooting one of the server nodes (“rebooted server node”) in the server cluster; and
(b) once the rebooted server node returns online, using the rebooted server node to perform a method comprising:
(i) accessing the cluster identifier identifying the server cluster; and
(ii) automatically rejoining the server cluster.

### Claim 7 (depends on 5)

A method as claimed in claim 5 wherein sending the data comprises:
(a) looking up, using the first node, a communication endpoint for the second node from the node identifier; and
(b) sending the data from the first node to the communication endpoint.

### Claim 8 (depends on 7)

A method as claimed in claim 7 wherein the communication endpoint and the node identifier comprise entries in a network map relating node identifiers for all the server nodes in the server cluster to corresponding communication endpoints, and wherein each of the server nodes in the server cluster persistently stores its own version of the network map locally.

### Claim 9 (depends on 8)

A method as claimed in claim 8 wherein the network map permits each of the server nodes in the server cluster to send the data to any other of the server nodes in the server cluster without using a centralized server.

### Claim 10 (depends on 5)

A method as claimed in claim 5 wherein the data is stored locally on the first node and further comprising modifying the data using the first node, wherein sending the data from the first node to the second node comprises part of synchronizing the data on the first and second nodes after the first node has modified the data.

### Claim 11 (depends on 10)

A method as claimed in claim 10 wherein the data comprises version information generated using a causality versioning mechanism and different versions of the data are stored on the first and second nodes, and wherein synchronizing the data comprises comparing the version information stored on the first and second nodes and adopting on both of the first and second nodes the data whose version information indicates is more recent.

### Claim 12 (depends on 5)

A method as claimed in claim 5 wherein the data comprises the node identifier of the first node, heartbeat state information of the first node, application state information of the first node, and version information, and wherein sending the data comprises disseminating the data to all the server nodes in the server cluster using a gossip protocol that performs data exchanges between pairs of the server nodes in the cluster.

### Claim 13 (depends on 12)

A method as claimed in claim 12 wherein the data is periodically disseminated to all the server nodes in the server cluster.

### Claim 14 (depends on 12)

A method as claimed in claim 12 wherein the data is sent to the second node when the first node joins the cluster.

### Claim 15 (depends on 12)

A method as claimed in claim 12 wherein a domain populated with entries that can be modified by any of the server nodes in the server cluster is stored locally on each of the nodes in the server cluster, and further comprising generating the version information using a causality versioning mechanism such that the version information indicates which of the server nodes has most recently modified one of the entries.

### Claim 16 (depends on 15)

A method as claimed in claim 15 wherein the application state information comprises a top-level hash generated by hashing all the entries in the domain.

### Claim 17 (depends on 16)

A method as claimed in claim 16 further comprising:
(a) comparing, using the second node, the top-level hash with a top-level hash generated by hashing a version of a corresponding domain stored locally on the second node; and
(b) if the top-level hashes differ, synchronizing the domains on both the first and second nodes using the version information.

### Claim 18 (depends on 12)

A method as claimed in claim 12 wherein a status entry that can only be modified by the first node is stored locally on the first node, and wherein the version information comprises a version number that the first node increments whenever it modifies the status entry.

### Claim 19 (depends on 18)

A method as claimed in claim 18 wherein the application state information comprises a status entity pair comprising a status entity identifier that identifies the status entry and the version number.

### Claim 20 (depends on 19)

A method as claimed in claim 19 further comprising:
(a) comparing, using the second node, the version number received from the first node with a version number of a corresponding status entry stored locally on the second node; and
(b) if the versions numbers differ, updating the status entry stored locally on the second node with the status entry stored locally on the first node.

### Claim 21 (depends on 20)

A method as claimed in claim 20 wherein updating the status entry comprises sending from the first node to the second node additional status entries stored locally on the first node that were modified simultaneously with the status entry.

### Claim 22 (depends on 5)

A method as claimed in claim 5 wherein the first and second nodes comprise at least part of a group of server nodes in the cluster to which the first node can send the data in a totally ordered manner to all of the server nodes in the group, and wherein sending the data comprises the first node sending the data to all of the server nodes in the group.

### Claim 23 (depends on 22)

A method as claimed in claim 22 wherein the data comprises non-persistent data generated during the runtime of the physical security system.

### Claim 24 (depends on 5)

A method as claimed in claim 5 wherein the data comprises streaming video streamed from another of the server nodes in the server cluster through the first node to the second node.

### Claim 25

A system for sharing data in a physical security system, the system comprising a plurality of server nodes comprising a first node and a second node, wherein the first node comprises a processor communicatively coupled to a computer readable medium that has encoded thereon statements and instructions to cause the processor to perform a method comprising:
(a) accessing a node identifier identifying the second node, wherein the first and second nodes comprise at least part of a server cluster, the node identifier comprises at least part of cluster membership information identifying all and accessible by all the server nodes in the server cluster, and each of the server nodes in the server cluster persistently stores its own version of the cluster membership information locally;
(b) sending the data to the second node; and
(c) adding a new server node to the server cluster, the adding comprising:
(i) exchanging a version of the cluster membership information stored on the new server node with the version of the cluster membership information stored on one of the server nodes that is already part of the server cluster (“membership control node”); and
(ii) synchronizing the version of the cluster membership information stored on the new server node with the versions of the cluster membership information stored, prior to the new server node joining the cluster, on all the server nodes in the cluster.

### Claim 26

A non-transitory computer readable medium having encoded thereon statements and instructions to cause a processor to perform a method for sharing data in a physical security system that comprises a plurality of server nodes, the method comprising:
(a) accessing, using one of the server nodes (“first node”), a node identifier identifying another of the server nodes (“second node”), wherein the first and second nodes comprise at least part of a server cluster, the node identifier comprises at least part of cluster membership information identifying all and accessible by all server nodes in the server cluster, and each of the server nodes in the server cluster persistently stores its own version of the cluster membership information locally;
(b) sending the data from the first node to the second node; and
(c) adding a new server node to the server cluster, the adding comprising:
(i) exchanging a version of the cluster membership information stored on the new server node with the version of the cluster membership information stored on one of the server nodes that is already part of the server cluster (“membership control node”); and
(ii) synchronizing the version of the cluster membership information stored on the new server node with the versions of the cluster membership information stored, prior to the new server node joining the cluster, on all the server nodes in the cluster.

### Claim 27

A method for sharing data in a physical security system that comprises a plurality of server nodes, the method comprising:
(a) accessing, using one of the server nodes (“first node”), a node identifier identifying another of the server nodes (“second node”), wherein the first and second nodes comprise at least part of a server cluster and wherein the node identifier comprises at least part of cluster membership information identifying all and accessible by all server nodes in the server cluster; and
(b) sending the data from the first node to the second node,
wherein the server nodes comprise cameras, network video recorders, and access control servers,
wherein the data comprises streaming video originating from one of the cameras that comprises one of the server nodes or from another camera that does not comprise one of the server nodes, and
wherein the streaming video is sent from the camera from which the streaming video originates to the first node and then to the second node.

### Claim 28 (depends on 27)

A method as claimed in claim 27 wherein the server cluster comprises at least three server nodes.

### Claim 29 (depends on 27)

A method as claimed in claim 27 further comprising:
(a) accessing, using the second node, a node identifier identifying the first node; and
(b) sending additional data from the second node to the first node.

### Claim 30 (depends on 27)

A method as claimed in claim 27 wherein the cluster membership information comprises:
(a) a node identifier uniquely identifying each of the server nodes in the server cluster; and
(b) a cluster identifier uniquely identifying the server cluster to which the server nodes belong.

### Claim 31 (depends on 30)

A method as claimed in claim 30 wherein each of the server nodes in the server cluster persistently stores its own version of the cluster membership information locally.

### Claim 32 (depends on 31)

A method as claimed in claim 31 further comprising:
(a) rebooting one of the server nodes (“rebooted server node”) in the server cluster; and
(b) once the rebooted server node returns online, using the rebooted server node to perform a method comprising:
(i) accessing the cluster identifier identifying the server cluster; and
(ii) automatically rejoining the server cluster.

### Claim 33 (depends on 31)

A method as claimed in claim 31 further comprising adding a new server node to the server cluster by performing a method comprising:
(a) exchanging a version of the cluster membership information stored on the new server node with the version of the cluster membership information stored on one of the server nodes that is already part of the server cluster (“membership control node”); and
(b) synchronizing the versions of the cluster membership information stored on the new server node with the versions of the cluster membership information stored on all the server nodes in the cluster prior to the new server node joining the cluster.

### Claim 34 (depends on 31)

A method as claimed in claim 31 wherein sending the data comprises:
(a) looking up, using the first node, a communication endpoint for the second node from the node identifier; and
(b) sending the data from the first node to the communication endpoint.

### Claim 35 (depends on 34)

A method as claimed in claim 34 wherein the communication endpoint and the node identifier comprise entries in a network map relating node identifiers for all the server nodes in the server cluster to corresponding communication endpoints, and wherein each of the server nodes in the server cluster persistently stores its own version of the network map locally.

### Claim 36 (depends on 35)

A method as claimed in claim 35 wherein the network map permits each of the server nodes in the server cluster to send the data to any other of the server nodes in the server cluster without using a centralized server.

### Claim 37 (depends on 31)

A method as claimed in claim 31 wherein the data is stored locally on the first node and further comprising modifying the data using the first node, wherein sending the data from the first node to the second node comprises part of synchronizing the data on the first and second nodes after the first node has modified the data.

### Claim 38 (depends on 37)

A method as claimed in claim 37 wherein the data comprises version information generated using a causality versioning mechanism and different versions of the data are stored on the first and second nodes, and wherein synchronizing the data comprises comparing the version information stored on the first and second nodes and adopting on both of the first and second nodes the data whose version information indicates is more recent.

### Claim 39 (depends on 31)

A method as claimed in claim 31 wherein the data comprises the node identifier of the first node, heartbeat state information of the first node, application state information of the first node, and version information, and wherein sending the data comprises disseminating the data to all the server nodes in the server cluster using a gossip protocol that performs data exchanges between pairs of the server nodes in the cluster.

### Claim 40 (depends on 39)

A method as claimed in claim 39 wherein the data is periodically disseminated to all the server nodes in the server cluster.

### Claim 41 (depends on 39)

A method as claimed in claim 39 wherein the data is sent to the second node when the first node joins the cluster.

### Claim 42 (depends on 39)

A method as claimed in claim 39 wherein a domain populated with entries that can be modified by any of the server nodes in the server cluster is stored locally on each of the nodes in the server cluster, and further comprising generating the version information using a causality versioning mechanism such that the version information indicates which of the server nodes has most recently modified one of the entries.

### Claim 43 (depends on 42)

A method as claimed in claim 42 wherein the application state information comprises a top-level hash generated by hashing all the entries in the domain.

### Claim 44 (depends on 43)

A method as claimed in claim 43 further comprising:
(a) comparing, using the second node, the top-level hash with a top-level hash generated by hashing a version of a corresponding domain stored locally on the second node; and
(b) if the top-level hashes differ, synchronizing the domains on both the first and second nodes using the version information.

### Claim 45 (depends on 39)

A method as claimed in claim 39 wherein a status entry that can only be modified by the first node is stored locally on the first node, and wherein the version information comprises a version number that the first node increments whenever it modifies the status entry.

### Claim 46 (depends on 45)

A method as claimed in claim 45 wherein the application state information comprises a status entity pair comprising a status entity identifier that identifies the status entry and the version number.

### Claim 47 (depends on 46)

A method as claimed in claim 46 further comprising:
(a) comparing, using the second node, the version number received from the first node with a version number of a corresponding status entry stored locally on the second node; and
(b) if the versions numbers differ, updating the status entry stored locally on the second node with the status entry stored locally on the first node.

### Claim 48 (depends on 47)

A method as claimed in claim 47 wherein updating the status entry comprises sending from the first node to the second node additional status entries stored locally on the first node that were modified simultaneously with the status entry.

### Claim 49 (depends on 31)

A method as claimed in claim 31 wherein the first and second nodes comprise at least part of a group of server nodes in the cluster to which the first node can send the data in a totally ordered manner to all of the server nodes in the group, and wherein sending the data comprises the first node sending the data to all of the server nodes in the group.

### Claim 50 (depends on 49)

A method as claimed in claim 49 wherein the data comprises non-persistent data generated during the runtime of the physical security system.

### Claim 51 (depends on 31)

A method as claimed in claim 31 wherein the data is streamed from another of the server nodes in the server cluster through the first node to the second node.

### Claim 52 (depends on 27)

A method as claimed in claim 27 wherein the streaming video originates from the camera that does not comprise one of the server nodes (“non-node camera”), the non-node camera is directly communicative with the first node and is only indirectly communicative with the second node.

### Claim 53

A system for sharing data in a physical security system, the system comprising a plurality of server nodes comprising a first node and a second node, wherein the first node comprises a processor communicatively coupled to a computer readable medium that has encoded thereon statements and instructions to cause the processor to perform a method comprising:
(a) accessing a node identifier identifying the second node, wherein the first and second nodes comprise at least part of a server cluster and wherein the node identifier comprises at least part of cluster membership information identifying all and accessible by all the server nodes in the server cluster; and
(b) sending the data to the second node,
wherein the server nodes comprise cameras, network video recorders, and access control servers,
wherein the data comprises streaming video originating from one of the cameras that comprises one of the server nodes or from another camera that does not comprise one of the server nodes, and
wherein the streaming video is sent from the camera from which the streaming video originates to the first node and then to the second node.

### Claim 54

A non-transitory computer readable medium having encoded thereon statements and instructions to cause a processor to perform a method for sharing data in a physical security system that comprises a plurality of server nodes, the method comprising:
(a) accessing, using one of the server nodes (“first node”), a node identifier identifying another of the server nodes (“second node”), wherein the first and second nodes comprise at least part of a server cluster and wherein the node identifier comprises at least part of cluster membership information identifying all and accessible by all server nodes in the server cluster; and
(b) sending the data from the first node to the second node,
wherein the server nodes comprise cameras, network video recorders, and access control servers,
wherein the data comprises streaming video originating from one of the cameras that comprises one of the server nodes or from another camera that does not comprise one of the server nodes, and
wherein the streaming video is sent from the camera from which the streaming video originates to the first node and then to the second node.
