High Availability Message Bus

Iridium Communication Ground System

The high availability message bus was designed to be a durable job queue that runs on two hosts. It supplied the key communication mechanism for the Iridium SMS message distribution subsystem. The job queue offered an “at most once” delivery guarantee. Durability was provided by the RocksDB NoSQL database that was embedded in this C++ application. Since the solution had to run on two nodes off the shelf job queues were not appropriate, since nearly all of them required three nodes (due to their use of the Raft Consensus Algorithm). Instead, I implemented a two node distributed lock that assured that the two databases were accessed without contention. I also created the necessary API and client libraries.

The job queue API is designed to support publishers and subscribers. The publisher supplies a topic and a payload and the service deposits this data for subscribers to pick up at a later time. Subscribers register for topics of interest and are served payloads in round robin fashion (on the same topic). A notable feature of the API is that it enabled publishing and subscribing to multiple topics on the same network connection.

This job queue was also utilized as an event bus. Some of the events generated in the system had to be converted into SNMP V3 traps. Since the event stream was composed of XML messages I built a protocol adapter which translated the XML events to proper SNMP V3 traps. This service was written in Go because the necessary libraries were very simple to use in comparison to the C/C++ libraries offered in the Linux operating system (net-snmp).

Laszlo Kiss — (602) 418-9922