hmbdc is a lightweight (mostly headers), versatile (from message to byte level API) and lightening fast C++ middleware framework and library built on top of various real-world tested lockfree algorithms that facilitates ultra low latency and high throughput messaging (inter-thread, inter-process and through network) programming.
It takes most out of the allocated hardware or cloud computing resources (memory, cores, NICs and switches) to achieve latency and throughput goals. It works as a framework but it could also be driven by user's code to collaborate with other frameworks.
Keywords and features:
- supports both x86_64 and ARM64(aarch64) platforms
- multithreaded without the headache
- lockfree / disruptor pattern
- ultra low latency / high throughput / kernel bypassing
- support multiple types of transport mechanisms with the consistent look and feel C++14 API:
- interthread(~200ns delay, free),
- interprocess(IPC, ~200ns delay, free),
- UDP multicast(udpcast, ~20us delay, free),
- TCP(tcpcast, ~20us delay, free),
- netmap multicast(netmap, ~10us delay, free),
- reliable UDP multicast (rmcast, ~18us delay, hmbdc-licensed)
- reliable netmap multicast (rnetmap, ~10us delay, hmbdc-licensed)
- rmcast provides the same latency, throughput and scalability as UDP multicast and is as reliable as TCP. rnetmap, even better, as reliable as TCP, it further reduces latencies by using the netmap driver.
- support symmetric (no broker process) publish / subscribe topic based network communication including sophisticated features like subscribing using topic prefixes, slow receiver dropping, and message history replay
- other high performance computing features (free): packet or message level sniffing, network link traffic arbitration, high speed async logging, timer, rate control ...
- straightforward integration with any other programming languages that supports Linux piping - see the Python example in the package.
- performance measurement binaries using hmbdc are packaged in releases as well as their source code. Both rmcast and rnetmap performance measure tools are runnable without any license requirement.
- the C++(14) flavor API is powerful and yet very intuitive to use. The best way to get a taste of the lib is through its examples and the API doc can be found at opt/hmbdc/doc/html/index.html .
Some full examples to use hmbdc to send and receive messages (inter-thread, ipc and thru network) can be found in https://bitbucket.org/hmbd/hmbdc-rel/src. More examples are packaged in the release.
Who needs hmbdc?The short answer is:
hmbdc is for developers who find existing (open sourced?) middle ware being slow or expensive when it comes to code performance, project delivery speed and hardware resources.
The longer version:
It is used in areas that are CPU or network intensive with ultra high performance (latency / throughput) requirements. Where the application latencies are measured in the unit of microsecond, or the system throughput is measured in millions per second - such as high frequency trading, high performance server-backend, autonomous driving, robotics, multi-core real-time systems, etc.
hmbdc helps you get the job done quick and fast with way less hardware costs!
How do I get set up?* hmbdc supports:
gcc 4.8.5 (or later), clang 5.0.1 (or later, except for aarch64)
CentOs 7, Ubuntu 18.04 (or later)
x86_64, aarch64 (arm64)
* go to the download page, and install the rpms (or
deb on Ubuntu, tar on AARCH64) and the dependency will be checked
automatically. installed libraries and doc are located at /opt/hmbdc dir.
* boost (later than 1.62), netmap and rnetmap need netmap driver