Resoa (Rest Service Oriented Architecture) is an open source framework for development and operating of service oriented internet applications within a computer grid. It puts focus on performance, high availability and scalability. Application services are developed in Java language, communication is based on HTTP/Rest and JSON.
Resoa defines three components, which, when installed on several machines, create a computing grid.
*Resoa Nodes: Nodes are the container for Java Business Services. Services are aggregated to domains before being deployed on several nodes.
*Resoa Rest: Rest servers provide a http interface for invoking Java services beside acting as a convenient HTTP Server for static content. Communication mainly happens by AJAX/JSON.
*Resoa Controller: Controllers maintain the grid topology; they manage the communication between all components and control the deployment configuration of nodes and web applications. Furthermore, they act as a central instance for a grid-wide session and permission management.
Principles of development
* The design of the business model happens in XSD. The JAXB generated Java source code is the base of the business services development.
* Resoa provides a Javascript source code generator for all JAXB compiled classes, providing helpful functions for the web interface development like automatic form filling and integrated JSON object de-/serialization.
* There is no interface implementation restriction for service development, the Resoa framework identifies valid services by examining class function arguments only.
* There is no need designing and maintaining a separated model for data persistence, Resoa offers an integrated, grid synchronized BTREE based database, resolving object relations into several ACID storage transactions, using JSON for object serialization.
Deployment and runtime management
* A Resoa grid is formed by at least one Controller, one Node and one Rest Server. The design of the topology happens by folder / file structure.
* Resoa provides a tool, which generates all runtime information, a grid component needs for start up. This tool also generates encrypted license files, which ensure a secure grid communication over internet.
* Every grid component tries to connect to a Controller on start-up and receives all relevant deployment information. Controllers can update this information during runtime, a re-start of the component is not required. Rest Server and nodes maintain connections among each other as well, if the deployment configuration demands this.
* If a node goes offline, all web/rest requests will be routed to another randomized selected node, serving the required business domain. When a new node joins the grid, it automatically connects to those Rest servers and nodes, where the deployment configuration demands a linkage to.
The development of Resoa has its origin in 2003 enrooted to exchange trading systems.
The intention was to define a software architecture, which is able to analyse real-time streams from world-wide exchanges and generate signals for automated trading and risk management. The daily analysed volume was several gigabytes, additionally there was the requirement of historic time series integration. This all had to happen for thousands of securities, with a signal generation time of less than 500 milliseconds.
A small team of developers from Germany and Russia, with a many years experience within the brokerage branch, faced this challenge on a private basis. A lot of existing open source solutions has been examined and some expedient looking ideas were finally discarded by fundamental re-designs. It soon became obvious, that the main task is to unify a service oriented software architecture with the emerging ideas of grid/cloud computing. As this is a generic topic also for a lot of other business cases, there was the decision in 2008, to create a generic open source framework for software development and runtime management. End of July 2009 Resoa initially went public with the release 0.9.1.
* Website of the project
* framework used for the REST Interface
< Prev   Next >