Patent ID: 12260196

DETAILED DESCRIPTION

A build of a software solution that is cooperatively performed is automated. A broadcasting computing entity selects a selected set of functional operations from one or more sets of functional operations associated with the software solution and then broadcasts a request to perform each of the functional operations in the selected set. Each of a plurality of listening computing entities connected to the network receives the request and determines capability of performing each of the functional operations in the selected set. After determining itself capable, a capable one of the plurality of listening computing entities transmits a response to the request indicating such capability, and then performs each of the functional operations in the selected set, thereby generating and transmitting to the broadcasting computing entity the output of the selected set of functional operations. The broadcasting computing entity then performs an action using the output of the functional operation received.

When a collection of automated components (e.g., sensors, transducers, cameras, controllers, gateways, etc.) is deployed to perform various tasks corresponding to a specific application (i.e., a specific use case), such collection of automated components communicate with one another so as to cooperatively perform the various tasks corresponding to the application. The Application and/or some such tasks can often cooperatively be performed by multiple threads of a single automated component (i.e., scaling up of the task) and/or across multiple automated components of the collection (i.e., scaling out of the task). Such scaling up and scaling out of such tasks can be automated freeing a developer from having to write custom code for such scaling processes. Furthermore, some applications and/or tasks can involve some level of cooperation amongst multiple automated components. For example, surveilling property can involve capturing imagery via a camera, and then using a computing entity to perform image analysis, so as to determine if a person is discernable within the captured imagery. Such cooperation amongst multiple automated components can also be automated, again freeing the developer from having to write custom code for such cooperative applications and/or tasks. Herein, such activities, as described immediately above, are called automated building of a software solution for a specific intention that is cooperatively performed amongst a plurality of computing entities.

FIG.1is a schematic diagram of a system for automating building a software solution for a specific intention that is cooperatively performed amongst a plurality of computing entities. InFIG.1, automated system10includes various automated components—local computing entities12a-12cand local modules14a-14d. Local modules14a-14dcan be devices that interact with the physical world, such as, for example, sensors, actuators, transducers, cameras, etc. Typically, local modules14a-14dare devices that convert between a signal and a physical parameter. Computing entities12a-12ccan be state machines or processors that perform execute instructions contained in computer readable memory (e.g., computer code), such as, for example, controllers, computers, gateways, etc. In theFIG.1depiction, local computing entity12aincludes local module14a. Such a device can be, for example, a smart sensor that has computing capabilities. Automated system10has been deployed to perform one or more tasks corresponding to a specific use case (i.e., a specific application). Use cases are essentially applications for which the local modules14a-14dand local computing entities12a-12chave been deployed. Various use cases correspond to various applications for which local modules14a-14dand local computing entities12a-12ccan be configured to address. For example, use cases can include monitor a cold-temperature storage facility, operating a chemical processing facility, controlling a final product assembly line, providing security monitoring of a facility, monitoring health of a population, or myriad other applications that have tasks, which can be automated using local modules and local computing entities, such as those depicted inFIG.1.

Local modules, such as local modules14a-14d, can be any device that facilitates such tasks corresponding to the use case for which local modules14a-14dare deployed. For example, for a use case of monitoring a cold-storage facility, local modules14a-14dmight include one or more temperature sensor. For a use case of surveilling a property, local modules14a-14dmight include a camera, a thermal-imaging camera, or a motion detector, for example. For a use case of controlling a chemical processing facility, local modules14a-14dmight include flow controllers, heaters, valve controllers, pressure sensors, pH sensors, etc. For a use case of controlling a final product assembly line, local modules14a-14dmight include robotic arms, cameras, conveyor belts motors, etc. For these and many other use cases, many tasks that are cooperatively performed amongst a plurality of computing entities can be built automatically as will be described in detail below.

In addition to local communications amongst local modules14a-14dand local computing entities12a-12cvia local network16, automated system10can communicate via cloud18with cloud-based computing entities20a-20e, which can be configured to perform various back-end services. Such back-end services can include, for example, configuration services, organization services, notification services, location/device services, alert services, telemetry services, device-cloud interface, synchronization services, database services (e.g., Cosmos database, SQL database, etc.), IoT hub services, front-end User Interface (UI) services, health monitoring services, etc. Automated building of a software solution for a specific intention that is cooperatively performed amongst a plurality of computing entities can include tasks cooperatively performed amongst combinations of local computing entities12a-12cand cloud-based computing entities20a-20c(e.g., combinations of two or more local computing entities12a-12conly, combinations of two or more cloud-based computing entities20a-20eonly, or combinations of one or more local computing entities12a-12cand one or more cloud-based computing entities20a-20c).

InFIG.1, local computing entities12a-12cand cloud-based computing entities20a-20evariously execute software so as to perform various tasks or functions of or related to automated system10. The various tasks or functions of or related to automated system10can require various levels of coordination between two or more of local computing entities12a-12cand cloud-based computing entities20a-20c. For example, some back-end services might need little coordination between local computing entities12a-12cand cloud-based computing entities20a-20c. Higher levels of coordination can provide beneficial performance for other tasks or functions of or related to automated system10, especially for functions and/or operations locally performed by local computing entities12a-12cusing local modules14a-14d. Thus, although tasks or functions can be cooperatively performed by local computing entities and cloud-based computing entities, below will be described only tasks or functions cooperatively performed by local computing entities12a-12c.

To facilitate such coordination of functions and/or operations locally performed by local computing entities12a-12cand local modules14a-14d, local computing entities12a-12chave been programmed so to facilitate such coordination of functions and/or operations. Such coordination of functions and/or operations can be performed in various manners. Described below are two general manners describing methods and systems to automate building of a software solution that is cooperatively performed. First will be described systems and methods in which broadcasting computing entity12abroadcasts an announcement of a performance capability of a functional operation and then listening computing entities12band12ccan request broadcasting computing entity12ato perform such a functional operation. Second will be described systems and methods in which broadcasting computing entity12abroadcasts a request for one of listening computing entities12band12cto perform functional operation that broadcasting computing entity12awants performed on his behalf. Thus, the two general manners of automating building of a software solution that is cooperatively performed can be called: i) broadcasting-capabilities manner; and ii) broadcasting-needs manner.

In one embodiment exemplifying the broadcasting-capabilities manner to automate building of a software solution that is cooperatively performed, local computing entity12aconnects to local network16, to which local computing entities12band12care also connected. Local computing entity12abroadcasts a specific intention via local network16. The specific intention includes an announcement of a performance capability of a functional operation that local computing entity12acan provide. Local computing entity12acan be considered a broadcasting computing entity by virtue of its broadcast of its specific intention. The specific intention broadcast by broadcasting computing entity12acan be any capability of which it is capable of doing. For example, the broadcasting computing entity can broadcast: i) any capabilities for which it has been programmed to perform; and/or ii) any capabilities associated with local module14awith which it interfaces. Local computing entities12band12clisten to the broadcast of local computing entity12a. For example, if local module14ais a sensor, broadcasting computing entity can broadcast a capability of providing data indicative of a metric sensed by local module14a. Local broadcasting module might be programmed to provide various data processing functions upon such data indicative of a sensed parameter, such as, for example, filtering, histogramming, etc.

Local computing entity12bperhaps has been programmed to listen for specific intentions broadcast from broadcasting computing entities. Local computing entity12bcan be considered a listening computing entity by virtue of its listening for specific intentions broadcast by broadcasting computing entities. In some embodiments, listening computing entity12bcan compare the specific intentions broadcast with one or more specific needs listed in a list of operational needs. In other embodiments, listening computing entity12bassess whether listening computing entity12bcan benefit from the specific intentions broadcast in different manners. In either case, listening computing entity12btransmits a communication in response to determining that listening computing entity12bcould use the specific intention broadcast by broadcasting computing entity12a.

Broadcasting computing entity12areceives the response to the specific intention from a listening computing entity12bvia local network16. The response can include a subscription to an output of the functional operation, for example. Broadcasting computing entity12aperforms the functional operation declared in the specific intention broadcast and generates an output of the functional operation. Broadcasting computing entity12bprovides the output generated to the listening computing entity. In some embodiments such provision of the output to subscribing computing entities is performed using publication/subscription engines.

The above-described system and/or method of automating building a software solution can be used using network configurations that are different from that depicted inFIG.1. For example, local modules14a-14dcan be directly connect to local network16, directly connect to one or more of computing entities12a-12c, and/or connect via cloud18to local computing entities12a-12cand cloud-based computing entities20a-20e. Such connections can be wired or wireless. Such connections can use any available networking protocols.

In another embodiment exemplifying the broadcasting-needs manner to automate building of a software solution that is cooperatively performed, local computing entity12aconnects to local network16, to which local computing entities12band12care also connected. Local computing entity12aselects a functional operation from a set of one or more functional operations associated with the software solution, and then broadcasts a request to perform the functional operation selected. Broadcasting computing12aentity might be incapable of performing such a functional operation as the one selected, or broadcasting computing entity12amight simply be operating at near workload capacity and thus would like to offload some functional operations to listening computing entities12band12c. Listening computing entities12band12clisten to the broadcast of local computing entity12a, thereby receiving the request to perform the functional operation. Each of listening computing entities12band12cthen determines capability of performing the functional operation, wherein a capable one of the plurality of listening computing entities12band12cis one (or more) that determines itself capable of performing the functional operation. Such capability can be determined by comparing the functional operation requested with a list of functional operations of which listening computing entity12band/or12cis capable, for example. Another consideration for determining the capability of performing the functional operation is workload of the listening computing entity. For example. If listening entity12band/or12cis operating at a workload that is greater than a predetermined percentage of its full workload capacity, such listening computing entity12band/or12cwill not determine itself capable of performing the functional operation requested.

Listening computing entity12bperhaps has determined itself capable of performing the functional operation requested and is therefore a capable one of listening computing entities12band12c. Listening computing entity12btransmits a communication in response to determining that listening computing entity12bis capable of performing the functional operation requested. Broadcasting computing entity12areceives the response to the request to perform the functional operation from a listening computing entity12bvia local network16. The response can include information regarding publication of and subscription to an output of the functional operation, for example. Listening computing entity12bthen performs the functional operation requested and generates an output of the functional operation. Listening computing entity12bprovides the output generated to broadcasting computing entity12a. In some embodiments such provision of the output to subscribing computing entities is performed using publication/subscription engines.

The above-described systems and/or methods of automating building a software solution can be used using network configurations that are different from that depicted inFIG.1. For example, local modules14a-14dcan be directly connect to local network16, directly connect to one or more of computing entities12a-12c, and/or connect via cloud18to local computing entities12a-12cand cloud-based computing entities20a-20e. Such connections can be wired or wireless. Such connections can use any available networking protocols.

FIG.2is a block diagram of a computing entity that coordinates performance of a task with another computing entity. InFIG.2, computing entity12includes network interface22, processor24, computer readable memory26containing instructions28that, when executed by processor24cause computing entity12to perform various steps for automating building a software solution for a specific intention that is cooperatively performed amongst a plurality of computing entities. Examples of computing entity12can include a smart sensor or actuator, an edge computer, a gateway computer, etc. Computing entity12, as disclosed in theFIG.2embodiment, can be used for both broadcasting a specific intention as well as listening to broadcasts from other computing entities. Local computing entity12can be any of those local computing entities depicted inFIG.1, for example (i.e., local computing entities12a-12c).

In an embodiment exemplifying the broadcasting-capabilities manner to automate building of a software solution that is cooperatively performed, processor24can read program instructions28from computer readable memory26, which cause computing entity12to: i) connect to a network; ii) broadcast the specific intention which includes announcing performance capability of a functional operation by the broadcasting computing entity; iii) receive a response to the specific intention from a listening computing entity via the network, each response including a subscription to an output of the functional operation; iv) generate the output of the functional operation; and v) provide the output generated to the listening computing entity. When performing the above operations, computing entity12is operating as a broadcasting computing entity. Examples of processor24can include any one or more of a microprocessor, a controller, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field-programmable gate array (FPGA), or other equivalent discrete or integrated logic circuitry.

Computing entity12can also operate as a listening computing entity for such a broadcasting-capability solution. When operating as a listening computing entity, processor24can read program instructions28from computer readable memory26, which cause computing entity12to: i) connect to a network; ii) listen for a specific intention broadcast by a broadcasting computing entity; ii) compare the functional operation included in the specific intention broadcast by the broadcasting computing entity with a list of operational needs; iv) subscribe to an output of the functional operation performed by the broadcasting computing entity in response to the functional operation being listed in the list of operational needs; and v) receive the output of the functional operation performed by the broadcasting computing entity).

In another embodiment exemplifying the broadcasting-needs manner to automate building of a software solution that is cooperatively performed, processor24can read program instructions28from computer readable memory26, which cause computing entity12to: i) select a functional operation from a set of one or more functional operations associated with the software solution; ii) broadcast a request for a listening computing entity to perform the functional operation selected; iii) receive a response indicating capability of performing the functional operation from the listening computing entity; iv) receive an output of the functional operation performed by the listening computing entity; and v) perform an action using the output of the functional operation received, thereby cooperatively performing at least a part of the software solution. When performing the above operations, computing entity12is operating as a broadcasting computing entity. Examples of processor24can include any one or more of a microprocessor, a controller, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field-programmable gate array (FPGA), or other equivalent discrete or integrated logic circuitry.

Computing entity12can also operate as a listening computing entity for such a broadcasting-needs solution. When operating as a listening computing entity, processor24can read program instructions28from computer readable memory26, which cause computing entity12to: i) receive the request to perform the functional operation from a broadcasting computing entity; and ii) determine capability of the system of performing the functional operation. If the system is determined capable of performing the functional operation, then the processor24can read further program instructions28from computer readable memory26, which cause computing entity12to: iii) transmit a response to the request received indicating capability of performing the functional operation; iv) perform the functional operation, thereby generating an output of the functional operation; and v) transmit the output of the function operation performed, thereby cooperatively performing at least a part of the software solution

Computer-readable memory26can be configured to store information obtained and/or computed during operation of computing entity12. Computer-readable memory26, in some examples, is described as computer-readable storage media. In some examples, a computer-readable storage medium can include a non-transitory medium. The term “non-transitory” can indicate that the storage medium is not embodied in a carrier wave or a propagated signal. In certain examples, a non-transitory storage medium can store data that can change over time (e.g., in RAM or cache). In some examples, computer-readable memory26is a temporary memory, meaning that a primary purpose of computer-readable memory26is not long-term storage. Computer-readable memory26, in some examples, is described as volatile memory, meaning that computer-readable memory26do not maintain stored contents when power to IoT device interface system36is turned off. Examples of volatile memories can include random-access memories (RAM), dynamic random-access memories (DRAM), static random-access memories (SRAM), and other forms of volatile memories. In some examples, computer-readable memory26is used to store program instructions for execution by processor24. Computer-readable memory26, in one example, is used by software or applications running on computing entity12(e.g., a software program performing such scaling up or scaling out of tasks) to temporarily store information during program execution.

In some examples, computer-readable memory26can also include one or more computer-readable storage media. Computer-readable memory26can be configured to store larger amounts of information than volatile memory. Computer-readable memory26can further be configured for long-term storage of information. In some examples, computer-readable memory26includes non-volatile storage elements. Examples of such non-volatile storage elements can include magnetic hard discs, optical discs, flash memories, or forms of electrically programmable memories (EPROM) or electrically erasable and programmable (EEPROM) memories.

Network interface22, in one example, is configured to facilitate communication between computing entity12and external devices via one or more networks, such as one or more wireless or wired networks or both. Network interface22can include a network interface card, such as an Ethernet card, an optical transceiver, a radio frequency transceiver, or any other type of device that can send and receive information. Other examples of such network interfaces can include Bluetooth, 3G, 4G, and Wi-Fi radio computing devices as well as Universal Serial Bus (USB).

FIG.3is a flow chart of an embodiment of a method for providing a functional operation for other computing entities. InFIG.3, method30is disclosed from the perspective of a broadcasting computing entity, such as broadcasting computing entity12adepicted inFIG.1. Method30begins at step32, where broadcasting computing entity connects to local network16. Then, at step34, broadcasting computing entity12abroadcasts, via local network16, the specific intention. The specific intention broadcast includes announcing performance capability of a functional operation by broadcasting computing entity12a. In some embodiments, the specific intention can further include instructions for a listening entity to communicate with broadcasting computing entity12a. In some embodiments, broadcasting computing entity12aencrypts the specific intention using an encryption algorithm known to both broadcasting computing entity12aand listening computing entities.

At step36, broadcasting computing entity12awaits to receive a response to the specific intention from a listening computing entity via the network. A response will include a subscription to an output of the functional operation. If a response is received, method30advances to step38, where broadcasting computing entity12agenerates the output of the functional operation. At step40, broadcasting computing entity12aprovides the output generated to the listening computing entity. After providing the output at step40, method30returns to step34and broadcasts the specific intention again. Such periodic broadcasting of its intention permits listening computing entities that are later connected to the network to find broadcasting computing entities that provide operations that are on their list of operational needs. Such periodic broadcasting also permits subscribing computing devices with periodic indicators that the broadcasting computing entity to which they subscribe is still operating and online. Should these periodic broadcasts cease to be heard, such listening devices can search for other providers or assume responsibility for performing such operations themselves.

In some embodiments, the output of the functional operation is/are based on input data. Such input data can be provided by a listening computing entity or a local module, for example. In embodiments in which input data is provided by a listening computing entity, broadcasting computing entity12areceives such input data from the listening computing entity via the network. Then, broadcasting computing entity12acomputes the output based on the input data received from the listening computing entity. Different listening computing entity can provide different input data to broadcasting computing entity12aso as to have broadcasting computing entity12acompute different outputs for each of these different sets of input data. In such an embodiment, broadcasting computing entity12aprovides each input computing entity with an output corresponding to the input data provided thereby.

Using the methods of method30, broadcasting computing entity12aperforms a part of the software solution in cooperation with the listening computing entity. The part performed by broadcasting computing entity12aincludes, at least, performance of the functional operation. Listening computing entity then uses the output of the functional operation to perform an action that is part of the software solution.

FIG.4is a flow chart of an embodiment of a method for subscribing to a functional operation for other computing entities. InFIG.4, method50is disclosed from the perspective of a listening computing entity, such as listening computing entity12bdepicted inFIG.1. Method50begins at step52, where listening computing entity12bconnects to a network. At step54listening computing entity12blistens, via the network, for a specific intention broadcast by a broadcasting computing entity. The specific intention will include an announcement of a performance capability of a functional operation by the broadcasting computing entity. In some embodiments, the specific intention can further include instructions for listening entity12bto communicate with the broadcasting computing entity. In some embodiments, the specific intention has been encrypted by the broadcasting computing entity. In such embodiments, listening computing entity12bdecrypts the specific intention using an encryption algorithm used to encrypt the specific intention by the broadcasting computing entity.

If, at step54, listening computing entity12bhears (i.e., receives) a specific intention that meets a criterion of listening computing entity12b, then method30continues to step56, where listening computing entity12bcompares the functional operation included in the specific intention broadcast by the broadcasting computing entity with a list of operational needs. If the functional operation is listed in the list of operational needs, then method50continues to step58, where listening computing entity12bsubscribes to an output of the functional operation performed by the broadcasting computing entity. At step60listening computing entity12breceives the output of the functional operation performed by the broadcasting computing entity. In some embodiments, the output of the functional operation is based on input data. Such input data can be provided by listening computing entity12bor a local module, for example. In embodiments in which input data is provided by listening computing entity12b, listening computing entity12btransmits such input data to the broadcasting computing entity via the network. Then, after the broadcasting computing entity computes the output based on the input data transmitted to the broadcasting computing entity, such output will be provided to listening computing entity12b.

Listening computing entity12bthen performs some action using the output of the functional operation received from broadcasting computing entity12a. This action performed using the output of the functional operation is a part of the software solution of the system. Such an action is performed by listening computing entity12bincludes. This cooperation of broadcasting computing entity12aand listening computing entity12bis automatically performed using methods30and50, without human intervention.

Deployment of an automated system can involve one or more computing entities, such as, for example, local computing entities12a-12c(depicted inFIG.1) as well as one or more modules, such as, for example, local modules14a-14d(depicted inFIG.1). Each of local computing entities12a-12cand each of local modules14a-14dare deployed for a reason—to perform some particular task or tasks. When a system involves multiple components, such as those depicted inFIG.1, such components often need to communicate with one another and/or coordinate performance of their respective tasks. In the past, such communication and coordination has been accomplished by a developer writing custom software for the particular automated system requiring the specific combination of local computing entities12a-12cand each of local modules14a-14d. Using the above-described methods30and50, such communication and coordination can be automated, without need for custom software development. Broadcasting of specific intentions (i.e., functional operations), of which a local computing module is capable to perform, makes known to listening computing entities that such operational functions are offered by the broadcasting computing entity, should it be helpful (e.g., listed on an operations list) to any listening computing entities. When a listening entity avails itself of an offered operational function, that listening computing entity offloads a portion of the tasks it needed to perform to another computing entity—the broadcasting computing entity. In this way, the computing effort (e.g., the tasks) of the entire automated system can distributed amongst the various components. Such a distribution can result in: i) a leveling of the computing effort performed by the various components; ii) the automatic finding of a broadcasting computing entity capable of performing a specific functional operation that a listening computing entity is incapable of or inefficient in performing itself; iii) an optimization in which tasks are performed by computing entities most capable of such performance (e.g., equipped with specific hardware to perform such tasks); and/or iv) elimination of redundant performance of tasks, should two or more listening computing entities response to a specific intention broadcasted.

FIG.5is a schematic diagram of an imaging system in which a software solution is built in an automated fashion. InFIG.5imaging system110includes edge computer112, cameras114a-114c, user computer70and display screen72. Edge computer112operates as a local computing entity, such as local computing entities12a-12c, as depicted inFIG.1. Cameras114a-114ccan operate as local modules, similar to local modules14a-14d, as depicted inFIG.1. Imaging system110has been deployed to monitor a crowd at a public facility. Some of the functional outputs of imaging system110include: i) a count of the number of persons in the public facility; and ii) determination of density of persons as a function of location. Imaging cameras114a-114care positioned in such a manner that the entire facility is imaged by at least one of imaging cameras114a-114c.

Edge computer112, when connected to the network, broadcasts its specific intention, which includes various functional operations, such as, for example, image correlation, person identification, counting algorithms, density algorithms, etc. User computer70is running an application that provides the functional outputs of: i) displaying the raw image data from any cameras imaging the public facility; ii) counting the numbers of persons at the public facility and provides an index of such a count; and iii) calculating the local densities of persons and annotating the displayed imagery to indicate areas of low and high densities. After listening to such a broadcast by edge computer112and receiving the specific intention broadcast, user computer70subscribes to the functional operations broadcast thereby.

Each of cameras114a-114c, when connected to the network, broadcasts its specific intention, which includes providing streaming imagery of the scene aligned within its field of view. Cameras114a-114cfunction as both a broadcasting computing entity and a local module in this embodiment. The broadcasting of the specific intentions is described above as an action of a computing entity, while the imaging of data is described above as an action of an image sensing module. Such combined functions are depicted inFIG.1with reference to local computing entity12aand local module14a.

Edge computer112subscribes to the streaming imagery broadcast by each of cameras114a-114c, which will be used as inputs for the functional operations provided by edge computer112. For example, edge computer112will correlate concurrent frames provided by cameras114a-114c, so as to avoid double counting of persons who are simultaneously imaged by two or more of cameras114a-114c. Edge computer112will then count persons and calculate the local densities of persons, and then provide functional outputs of such functional operations, which will be disseminated to any and all computing entities subscribing to such functional operations, such as user computer70.

User computer70also subscribes to the streaming imagery broadcast by each of cameras114a-114c, which will be displayed on display screen70. User computer will display an index of the count of persons on the display screen as well as annotating the displayed imagery with indicia of local densities of person. All of the above-described coordination of tasks is performed automatically by the various computing entities of imaging system110. No custom computer code is required for these separate entities-edge computer112, cameras114a-114cand user computer70to coordinate amongst themselves so as to provide functional outputs and obtain functional outputs needed for successful accomplishment of their tasks.

FIG.6is a flow chart of an embodiment of a method for requesting performance of a functional operation by other computing entities. InFIG.6, method120is disclosed from the perspective of a broadcasting computing entity, such as broadcasting computing entity12adepicted inFIG.1. Method120begins at step122, where broadcasting computing entity12aconnects to local network16. Then, at step124, broadcasting computing entity12abroadcasts, via local network16, a request for listening computing entities12bor12cto perform a functional operation. In some embodiments, the broadcast can further include instructions for listening entities12band12cto communicate with broadcasting computing entity12a. In some embodiments, broadcasting computing entity12aencrypts the specific intention using an encryption algorithm known to both broadcasting computing entity12aand listening computing entities12band12c.

At step126, broadcasting computing entity12awaits to receive a response to the request from a capable one of the listening computing entities12bor12c, via network16. The response can indicate that the capable one of listening computing entities12bor12chas determined itself capable of performing the functional operation requested. A response can further include information regarding publication and subscription of an output of the functional operation after being performed by the capable listening computing entity12bor12c. If more than one response is received, such as, for example, if both listening computing entities12band12crespond indicating capability, then broadcasting computing entity12acan select one or both of listening computing entities12band12cto perform the functional operation. Broadcasting computing entity12acan, for example, transmit a reply to the response indicating which of listening computing entities12band12chas been selected.

If a response is received at step126, then method120advances to step128, where broadcasting computing entity12areceives the output of the functional operation performed by the capable one of listening computing entities12band12c. After receiving the output at step128, method120returns to step124and broadcasts the same request again or another request for one of listening computing entities12band12cto perform another functional operation. In some embodiments, especially those in which the functional operation is repeatedly performed, such a video image capture or ongoing monitoring, instead of or in addition to returning to step124after step128, method120will remain at step128obtaining outputs of such a repeatedly performed functional operation.

In some embodiments, the output of the functional operation is based on input data. Such input data can be provided by broadcasting computing entity12a, listening computing entity12bor12c, or one of local modules14a-14c, for example. In embodiments in which input data is provided by broadcasting computing entity12a, broadcasting computing entity12atransmits such input data to the capable listening computing entity12bor12cvia network16. Then, the capable one of listening computing entities12band12ccomputes the output based on the input data received from broadcasting computing entity12a. In other embodiments, one of listening computing entities12band12cor one of local modules14a-14dcan provide input data to the capable listening computing entity12bor12cso as to have the capable listening computing entity12bor12ccompute the output of the functional operation requested. In such an embodiment, the listening computing entity12bor12cor the local module14a-14dthat provides such data transmits it to the capable one of listening computing entity12band/or12c. In some embodiments the selected functional operation can require input data from more than one entity.

Using the methods of method30, the capable listening computing entity12bor12cperforms a part of the software solution in cooperation with broadcasting computing entity12a. The part performed by the capable listening computing entity12bor12cincludes, at least, performance of the functional operation. Broadcasting computing entity12athen uses the output of the functional operation to perform an action that is part of the software solution.

FIG.7is a flow chart of an embodiment of a method for performing a functional operation for other computing entities in response to a request for such performance. InFIG.7, method130is disclosed from the perspective of a listening computing entity, such as listening computing entity12bdepicted inFIG.1. Method130begins at step132, where listening computing entity12bconnects to a network. At step134listening computing entity12blistens, via the network, for a request to perform a functional operation transmitted by broadcasting computing entity12a(or another broadcasting computing entity). In some embodiments, the request can include instructions for listening entity12bto communicate with broadcasting computing entity12a. In some embodiments, the request has been encrypted by broadcasting computing entity12a. In such embodiments, listening computing entity12bdecrypts the request using an encryption algorithm used to encrypt the specific intention by broadcasting computing entity12a. If, at step134listening computing entity12bhears (i.e., receives) such a request, then method130advances to step136, where listening computing entity12bdetermines whether it is capable of performing the functional operation indicated by the request.

If, at step136, listening computing entity12bdetermines itself capable of performing the functional operation requested, then method130continues to step138, where listening computing entity12bresponds to the request indicating itself capable of performing the functional operation. If, however, at step136, listening computing entity does not determine itself capable of performing the functional operation requested, then method130returns to step134, where listening computing entity12blistens, via the network, for a request to perform a functional operation transmitted by a broadcasting computing entity. After step138, method130continues to step140, where listening computing entity12bperforms the functional operation requested and transmits an output of the functional operation to broadcasting computing entity12a.

In some embodiments, the output of the functional operation is based on input data. Such input data can be provided by broadcasting computing entity12aor by another local module, for example. In embodiments in which input data is provided by broadcasting computing entity12a, listening computing entity12breceives such input data from broadcasting computing entity12avia network16. Then, after listening computing entity12bcomputes the output based on the input data received from broadcasting computing entity12a, such output will be provided to broadcasting computing entity12a.

Broadcasting computing entity12athen performs some action using the output of the functional operation received from listening computing entity12b. This action performed using the output of the functional operation is a part of the software solution of the system. This cooperation of broadcasting computing entity12aand listening computing entity12bis automatically performed using methods120and130, without human intervention.

FIG.8is a flow chart of an embodiment of a method for requesting performance of a set of functional operations by other computing entities. InFIG.8, method150is disclosed from the perspective of a broadcasting computing entity, such as broadcasting computing entity12adepicted inFIG.1. Method150begins at step152, where broadcasting computing entity12aselects a selected set of functional operations from one or more sets of functional operations associated with the software solution. The selected set represent a plurality of functional operations that are sequentially performed so as to generate an output. Broadcasting computing entity can then perform an action, based on the output generated by performing each of functional operations in the selected set. This set of functional operations can be thought of as a recipe to obtain such an output.

Various criterial can be used by broadcasting computing entity12ain selecting the selected set of functional operations. For example, broadcasting computing entity12amight have been deployed to perform these one or more sets of functional operations, which are associated with the software solution. Broadcasting computing entity12amight have insufficient capacity to perform all of these one or more sets of functional operations, and therefore must engage one or more of listening computing entities12band12c, which has/have available capacity to perform these one or more of these sets of functional operations, so as to offload some workload for broadcasting computing entity12a.

In other embodiments, one of the sets of functional operations might best be performed by a computing entity with special purpose hardware, such as, for example, a graphical processing unit. Broadcasting computing entity12athen might engage one or more of listening computing entities12band12c, which is/are equipped with such special purpose hardware.

In still other embodiments, broadcasting computing entity12amight have, over time, assumed responsibility for performing so many sets of functional operations that now broadcasting computing entity12amight be operating near its workload capacity. Broadcasting computing entity12amight compare its workload with a predetermined fraction of its workload capacity. If broadcasting computing entity12adetermines that its workload exceeds such a predetermined fraction of its workload capacity, broadcasting computing entity12athen might engage one of listening computing entities12band12c, which is operating at a lower fraction of its workload.

Regardless of the criteria used at step152in selecting the selected set of functional operations, method150advances to step154, where broadcasting computing entity broadcasts a request to perform each of the functional operations in the selected set. In some embodiments, broadcasting computing entity12aencrypts the request using an encryption algorithm known to both broadcasting computing entity12aand listening computing entities12band12c. Such a broadcast can be heard by listening computing entities12band12cby way of their common network connections.

At step156, broadcasting computing entity12awaits to receive a response to the request from a capable one of the listening computing entities12band/or12c, via network16. Then if one of listening computing entities12band12cdetermines itself capable of performing each of the functional operations in the selected set, then, at step156, broadcasting computing entity will receive a response indicating from such a capable listening computing entity that it is capable of performing each of the functional operations in the selected set. A response can further include information regarding publication and subscription of an output of the functional operation after being performed by the capable listening computing entity12band/or12c.

If more than one response is received, such as, for example, if both listening computing entities12band12crespond, then broadcasting computing entity can select one or both of listening computing entities12band12cto perform the selected set of functional operations. Broadcasting computing entity can, for example, transmit a reply to the response indicating which of listening computing entities12band12cis selected. Various criteria can be used by broadcasting computing entity to select which of the capable subset of listening computing entities12band12cfor performing the selected set of functional operations. For example, each of listening computing entities can include in its response indication of its workload availability (e.g., the amount of computing capacity available for performing such a selected set of functional operations). In some embodiments, each of listening computing entities can include in its response indication of any special purpose hardware with which it is equipped. Such indications can be used as selection criteria by broadcasting computing entity12a.

If a response is received at step156, then method150advances to step158, where broadcasting computing entity12areceives the output generated by performance of the set of functional operations by the capable one of listening computing entities12band12c. After receiving the output at step158, method150returns to step152, where broadcasting computing entity12acan select the same selected set or another selected set of functional operations for another request of listening computing entities12band12c. In some embodiments, especially those in which the selected set of functional operations is repeatedly performed or an ongoing activity, such as video image capture, instead of or in addition to returning to step152after step158, method150will remain at step158so as to continue obtaining outputs of such a repeatedly performed set of functional operations.

In some embodiments, the output of the functional operation is based on input data. Such input data can be provided by broadcasting computing entity12a, one of listening computing entities12band12c, or one of local modules14a-14d. In embodiments in which input data is provided by broadcasting computing entity12a, broadcasting computing entity12atransmits such input data to the capable listening computing entity12bor12cvia network16. Then, the capable listening computing entity12bor12ccomputes the output based on the input data received from broadcasting computing entity12aand according to the recipe represented by the set of functional operations provided by broadcasting computing entity12a. In another embodiment, listening computing entities12bor12cor local modules14a-14dcan provide input data to the capable listening computing entity12bor12cso as to have the capable listening computing entity12bor12ccompute the output of the functional operation requested. In such an embodiment, local computing entity12bor12cor local modules14a-14dthat provides such data transmits it to the capable one of listening computing entity12bor12c. Such a transmission can be direct or can be performed using publication/subscription services, for example. In some embodiments the selected set of functional operations requires input data from more than one entity.

Using the methods of method150, the capable listening computing entity12bor12cperforms a part of the software solution in cooperation with broadcasting computing entity12a. The part performed by the capable listening computing entity12bor12cincludes, at least, performance of each of the functional operations in the selected set. Broadcasting computing entity12athen uses the output of the selected set of functional operations to perform an action that is part of the software solution.

FIG.9is a flow chart of an embodiment of a method for performing each of a set of functional operations for other computing entities in response to a request for such performance. InFIG.9, method170is disclosed from the perspective of a listening computing entity, such as listening computing entity12bdepicted inFIG.1. Method170begins at step172, where listening computing entity12bconnects to a network. At step174listening computing entity12blistens, via the network, for a request to perform a selected set of functional operations transmitted by broadcasting computing entity12a(or another broadcasting computing entity). In some embodiments, the request can include instructions for listening entity12bto communicate with broadcasting computing entity12a. In some embodiments, the request has been encrypted by broadcasting computing entity12a. In such embodiments, listening computing entity12bdecrypts the request using an encryption algorithm used to encrypt the specific intention by broadcasting computing entity12a. If, at step174listening computing entity12bhears (i.e., receives) such a request, then method170advances to step176, where listening computing entity12bdetermines whether it is capable of performing each of the functional operations in the selected set indicated by the request.

If, at step176, listening computing entity12bdetermines itself capable of performing each of the functional operations in the selected set, then method170continues to step178, where listening computing entity12bresponds to the request indicating itself capable of performing each of the functional operations in the selected set. If, however, at step176, listening computing entity does not determine itself capable of performing each of the functional operations in the selected set, then method170returns to step174, where listening computing entity12blistens, via the network, for a request to perform a selected set of functional operations transmitted by broadcasting computing entity12a. After step138, method170continues to step180, where listening computing entity12bperforms each of the functional operations in the selected set and transmits an output of the set of functional operations to broadcasting computing entity12a.

In some embodiments, the output of the functional operation is based on input data. Such input data can be provided by broadcasting computing entity12aor by another local module, for example. In embodiments in which input data is provided by broadcasting computing entity12a, listening computing entity12breceives such input data from broadcasting computing entity12avia network16. Then, after listening computing entity12bcomputes the output based on the input data received from broadcasting computing entity12a, such output will be provided to broadcasting computing entity12a.

Broadcasting computing entity12athen performs some action using the output of the functional operation received from listening computing entity12b. This action performed using the output of the functional operation is a part of the software solution of the system. This cooperation of broadcasting computing entity12aand listening computing entity12bis automatically performed using methods150and170, without human intervention.

While the invention has been described with reference to an exemplary embodiment, it will be understood by those skilled in the art that various changes may be made, and equivalents may be substituted for elements thereof without departing from the scope of the invention. In addition, many modifications may be made to adapt a particular situation or material to the teachings of the invention without departing from the essential scope thereof. Therefore, it is intended that the invention not be limited to the particular embodiment disclosed, but that the invention will include all embodiments falling within the scope of the appended claims.