A server side system for reading taxi trips data and distributing its processing. The following consecutive operations are executed by the system:
- receives trip as event
- checks for errors in received trip
- saves the trip into the database
- computes query 1 and query 2 and outputs changes into file
The project is basically a solution of the DEBS 2015 Grand Challenge. So for a complete understanding of the solution for query 1 and query 2 read the description on the provided link. The New York city taxi data was made public by the Chris Wong. The system is horizontally and vertically scalable and resilient to partial outages.
This project was done for a Master's degree at Faculty of Computer and Information Science, University of Ljubljana. We did a comparison between the following architectures:
- EDA - event driven architecture
- SEDA - staged event driven architecture
- AEDA - actor based event driven architecture
- hypothetical ASEDA - actor based staged event driven architecture
- DASEDA - distributed actor based staged event driven architecture
The system was designed and build as a Reactive Streams System providing asynchronous stream processing with non-blocking back pressure. We have extensively followed Reactive Manifesto as well as Reactive Streams initiative. The project builds on top of Reactor framework. The reason for following the reactive programming paradigm was, because we wanted to extend SEDA architecture with Actor based model. SEDA already defines the importance of back pressure and scalability so the step toward Actor based model and Reactive Streams was a logical one.
This solution requires the following systems:
- Java SE Runtime Environment 8 The logic of the system is written in JAVA programming language.
- MySQL The MySQL database for storing traffic tickets. Version 5.7
Project uses Gradle-based build system and Maven to define dependencies on third party libraries. Nonetheless here is the list of required libraries:
- MySQL Java Connector Java connector for MySQL.
- Reactor library All three different architectures are build on top of the Reactor library.
- Commons CLI API for parsing command line options.
The main class from which all different types of Architecture extend is Architecture.java. The class is abstract and has a single abstract method run() which all implementations that extend Architecture must implement. The solution contains a short but inefficient EDAPrimer.java. It is an example of correct implementation for query 1 and query 2 and is used for comparing the output with other implementations.
The test cases define a check to see if the output from the different implementation for query 1 and query 2 are consistent. There is also a test case to check that multiple consecutive runs on the same object result in equal results.
- Update README.md