Introduction
Rubris’ design is borne out of practical experiences of implementing browser-based, data-oriented micro-service applications in trading and single dealer applications at Investment Banks and Broker-Dealer financial institutions.
The outcome of this experience is a technical solution that sits somewhere in-between low-level networking libraries such as Netty and full fledged streaming server solutions such as LightStreamer or Diffusion.
Rubris is not a general purpose webserver, does not support REST and treats HTTP as a background transport framing mechanism. It is entirely focused on messaging type applications that regularly occur in the financial arena.
Features of Rubris
- Embeddable small library
- WebSocket and/or HTTP/HTTPS bi-directional streaming
- Multiple Publish/Subscribe mechanisms
- Public Shared topic subscriptions and fanout
- Private Group level topic subscriptions and fanout
- Private User level topic subscriptions
- Fully asynchronous on the server side
- Pluggable authentication and authorisation
- Flexible Batching and Queueing of server-side messages
- Small JS library that acts as a plug-in for the widely used Engine-IO JS library
- Simple Client and Server APIs
- Strong bias against heap memory allocation
- a significant amount is done using off-heap memory/ preallocated pools so as to create as little GC pressure as possible on the application
- binary/opaque message payloads (although JSON and text protocols can easily be sent as is) to provide pass through messaging for any format
Dependencies
As we eat our own dogfood we have striven to make the library as small and dependency free as possible, as nothing is more irritating than a large dependency set that either conflicts with our own choices, especially with regard to frameworks like Spring, or forces us down a particular upgrade cycle with shared libraries.
Accordingly the library depends only upon: