Opher, from IBM, recently posted an interesting article explaining the need for an EPN.
As I have posted in the past, an Event Processing Network (EPN) is a directed graph that specifies the flow of the events from and to event processing agents (EPAs), or, for short, processors.
Opher’s posting raised the valid question on why do we need an EPN at all, and instead couldn’t we just let all processors receive all events and drop those that are not of interest.
He pointed out two advantages of using an EPN, firstly it improves usability, and secondly it improves efficiency.
I believe there is a third advantage, the EPN allows one to specify concurrency.
For example, the following EPN specifies three sequential processor A, B and C. It is clear from the graph that processor C will only commence processing its events after B has finished, which likewise only processes its events after they have been processed by A.
Conversely, in the following EPN, processor B and C execute in parallel, only after the events have been processed by A.
Events are concurrent by nature, therefore being able to specify concurrency is a very important aspect of designing a CEP system. Surely, there are cases when the concurrency model can be inferred from the queries (i.e. rules) themselves by looking at their dependencies, however that is not always the case, or rather, that may not in itself be enough.
By the way, do see any resemblances between an EPN and a Petri-Network? This is not merely coincidental, but alas the subject of a later posting.