What is Bondy
Bondy is an open-source, always-on and scalable application networking platform connecting all elements of a distributed application—offering event and service mesh capabilities combined.
What does Bondy do?
Bondy routes application messages between Internet-connected devices such as browsers, phones, servers and IoT (Internet of Things) devices in realtime by creating an application network.
Application network
An application network is a dynamic overlay network formed by a set of Bondy nodes that interconnects different types of applications and devices, ranging from web and mobile apps to IoT devices and backend microservices.
At its core, Bondy implements the Web Application Messaging Protocol (WAMP) an open protocol that unifies the key services required by every distributed application:
- Authentication, providing multiple authentication methods
- Authorization, providing a fine-grained Role-based Access Control system
- Remote Procedure Calls (RPC) incl. Service Discovery, Routing and Traffic management
- Publish/Subscribe routing
As a result, Bondy offers combined event and service mesh capabilities. However, as you will learn in the following sections, Bondy goes further by creating an application network that leverages an open, universal application messaging protocol.
Additionally, it offers other integration options, such as an HTTP API Gateway, Router bridging (also referred to as Bondy Edge), bridges to external messaging brokers and other features.
Key Characteristics
- Open-source
Bondy is open-source software licensed under the Apache License Version 2.0. The source code is available on Github. - Scalable
Bondy was designed from the ground up as a distributed router. It can leverage different network topologies for data replication and routing allowing it to scale to hundreds of nodes[1]. Bondy is written in Erlang/OTP which offers unprecedented soft real-time, high concurrency and self-healing capabilities. A single node can handle millions of concurrent client connections. - Always-on
Bondy replicates state across the cluster using a masterless architecture (all nodes are equal) and a gossip-based eventually consistent reliable state dissemination protocol which keeps state synchronised across nodes in the cluster without compromising availability. In addition, Bondy uses active anti-entropy to repair missing or divergent state as a result of node failure, physical data loss or corruption, and quickly bring additional nodes up-to-date. The combination of these features allow Bondy to be highly available even under network partitions, message loss and node failures. - Dynamic
Bondy offers dynamic message routing automatically and efficiently delivering RPC and Publish/Subscribe messages between clients connected to separate nodes in the cluster. Clustering formation is automatic and self-healing which saves operators the hassle of maintaining cluster connectivity. - Polyglot
Bondy clients implement an open protocol that works with multiple transports and serialization formats. With Bondy your distributed application components can choose the programming languages and frameworks yet be integrated without adapters. - Easy to deploy anywhere
Bondy can be deployed anywhere from resource-constrained AMD64/ARM64 edge devices to private, hybrid and public clouds running bare metal, virtual machines and containers. Bondy provides out-of-the-box automatic clustering formation based on DNS which allows deploying a cluster on one go.
Why should I use Bondy?
Bondy will provide you a number of benefits when compared to the alternative of integrating and matching individual (partial) implementations of the services required by a distributed application.
- Simplify development by removing accidental complexity
By providing the capabilities of an event and a service mesh combined—thanks to its WAMP core—Bondy can be used for the entire messaging requirements of a distributed application thus reducing technology stack complexity, as well as networking overheads. With Bondy you need a single client library and a single infrastructure component. Bondy also takes care of Authentication and Authorization, further reducing the number of client libraries and infrastructure components you need to use, maintain and manage. - Improve productivity
With Bondy you can go from zero to fully-functioning distributed app with a single infrastructure component. This is because using WAMP on a Web or Mobile app works exactly the same as in a microservice which reduces the need for additional gateways and adapters. This also provides a universal language between frontend, backend and embedded dev teams. Moreover, WAMP operations such as registering an RPC (together with its configuration e.g. load balancing strategy) can be done in a single line of code without external tools e.g. YAML, Service Discovery service. - Unleash the power of distributed computing
As opposed to traditional RPC frameworks where Web, Mobile Apps and constraint IoT devices cannot act as RPC servers, Bondy offers a peer-to-peer programming model, where all of them can be both a Caller and a Callee. This enables new kind of interactions between components that were not possible before e.g. a server calling an procedure on a Web App, Mobile App or IoT device. - Improve manageability and observability
Because Bondy manages session creation, authentication, authorization and routing for RPC and Publish/Subscribe messages. - Deploy anywhere without external dependencies
Bondy can be deployed anywhere from resource-constrained AMD64/ARM64 edge devices to private, hybrid and public clouds running bare metal, virtual machines, containers and container orchestration platforms e.g. Kubernetes. Unlike most service meshes which depend on external technologies like Kubernetes, Istio, Envoy, Etcd or a distributed database, Bondy does not have any external dependencies. This means your distributed applications will survive beyond the lifespan of all those technologies. - Integrate it in your existing architecture
Bondy embeds an HTTP API Gateway which can host multiple APIs dynamically defined using a JSON-based declarative configuration syntax and offering OAuth2 authentication services. This allows the integration of existing HTTP clients and servers faciliting the adoption of Bondy into your existing architecture. Bondy also provides a Kafka bridge and will provide additional bridges to other technologies.
When should I consider using Bondy
You should consider using Bondy when:
- You are developing and application that uses the microservices architectural style.
- You have multiple user touch-points each running its own technology stack e.g. Web, Mobile, IoT Device, yet you want to reduce friction between dev teams by using a common universal protocol while still being able to integrate legacy components.
- You want to enable new type of component interactions that are only possible using a peer-to-peer programming model e.g. a Web, Mobile apps or IoT device as Callees (RPC servers).
Read more in Why Bondy.
Bondy vs. other application networking solutions
Bondy is a reliable application message router, designed for availability and scalability. It scales horizontally and vertically to support a high number of concurrent clients while maintaining low latency and fault tolerance. As opposed to mainstream messaging solutions Bondy offers both routed Remote Procedure Call (RPC) and Publish & Subscribe communication patterns.
Learn more in the How is Bondy different section.
Like a distributed D-Bus over a network
D-Bus is a platform-neutral messaging service that runs by default in most Linux distributions.
As well as Bondy, it offers both Remote Procedure Call and Publish/Subscribe functionality. However, while D-Bus is intended for inter-process communication (IPC) on a single host, Bondy is designed to be distributed over a set of hosts and used over a network.
Bondy uses Partisan, which allows it to use different network topologies. Currently, Bondy can only be deployed using the full-mesh topology, which can scale to hundreds of nodes. However, a peer-to-peer (partial mesh) topology based on Partisan HyParView implementation is currently in development. Partisan HyParView has been proven to scale up to 2,000 nodes. Partisan is currently maintained by the same team that created Bondy. ↩︎