Skip to content

Server side implementation of the traffic management system for Master's degree.

License

Notifications You must be signed in to change notification settings

jeryini/TaxiManagementSystem

Repository files navigation

Taxi management system

A server side system for reading taxi trips data and distributing its processing. The following consecutive operations are executed by the system:

  1. receives trip as event
  2. checks for errors in received trip
  3. saves the trip into the database
  4. 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.

Purpose

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.

General Requirements

This solution requires the following systems:

Required libraries

Project uses Gradle-based build system and Maven to define dependencies on third party libraries. Nonetheless here is the list of required libraries:

General solution

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.

Testing

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.

Running

TODO

  • Update README.md

About

Server side implementation of the traffic management system for Master's degree.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages