Skip to content
Mohan Kumar Pandian edited this page Jan 27, 2016 · 2 revisions

Poseidon is a platform to build API applications that have to aggregate data from distributed services in an efficient way. It comes with an embedded web server and servlet container (Jetty). Poseidon enables to build APIs that aggregate data in parallel from micro services, to convert gathered data into well defined business objects as part of business logic and to respond back with a collection of business objects composed dynamically.

To achieve this, Poseidon takes a layered approach built using Phantom (for resiliency and fault tolerance in distributed SOA), Lego (to scatter and gather data) and Hydra (to dispatch tasks and compose responses declaratively).

Layered Architecture of Poseidon

  • At the bottom most layer, Poseidon uses Phantom and TaskHandler implementations like HttpTaskHandler (with or without RequestCaching) etc which comes with circuit breaker functionality to protect API applications from terminal service failures.

  • Just above this layer, Poseidon provides an IDL based service client layer wherein contracts and request/response objects of terminal services are declared using JSON. Poseidon generates Java contracts and implementations out of these IDL files with various features like auto-versioning, batching, dependency management etc. The generated service client implementations always interacts with terminal services over Phantom and TaskHandler implementations.

  • On top of the service clients layer, API application developers have to write well defined business objects (called as DataTypes) and re-usable business logic (called as DataSources). This is where well defined atomic business objects are created based on responses from one or more services.

  • On top of DataSources, Poseidon provides a dynamic API layer wherein application developers declare their API endpoints using JSON along with parameters it takes, DataSources it fires and the final response composed out of DataTypes returned by those DataSources.