The project

Our customer ADTECH is a worldwide operating company for digital marketing, offering solutions for publishing, managing and evaluating online marketing campaigns.

Our project goal was to develop a system for monitoring the stream of advertisement requests. The implementation should be Java-based and using the Complex Event Processing framework Esper.

CEP Livemonitoring

The CEP Livemonitoring system is developed for the company ADTECH. ADTECH is a worldwide operating advertisement distributor. Their main business area is the relaying of advertisement from the advertiser to web hosters. The CEP Livemonitoring system will be used to query data and create statistics from the advertisement delivery stream.

The following steps are performed to deliver an advertisement to a website visitor (figure 1.1):

  • A person requests a website
  • The website provider delivers the page content. The website’s content includes a JavaScript code, which requests the actual advertisement data (banners, flash animations, ...)
  • The JavaScript code sends a request to an ad-server of ADTECH. The requests includes metadata about the request (any data specified by the hoster of the website)
  • The CEP Livemonitoring system receives a copy of the request and processes the requested data
  • ADTECH’s server sends the advertisement back to the website visitor

The Livemonitoring System uses the complex event processing framework Esper to analyze the data flow of the adrequests. The system can be used by ADTECH to monitor the data stream and by ADTECH's customers to aggregate statistical data about their advertisement.

Esper uses its own SQL-like querying language called Event Processing Language (EPL). ADTECH’s customers can register and manage their EPL queries in the system using a REST API. Those queries are then executed on every future request to an advertisement of that customer. The customer can register any valid EPL query in the CEP Livemonitoring system.

In addition to managing queries a customer can also specify an optional handler for each of his queries. These handlers determine how the data of a request, that matches a query, is processed.

To achieve the necessary performance, the queries and ad-request are divided between multiple, independent (virtual) machines where each machine is running one instance of the application. The separation is based on the customers. Each instance of the application is responsible for one or more customers.