Skip to content
On this page
DRAFT

How is Bondy different

Bondy provides a unique combination of features which sets it apart from other application networking solutions (e.g. WAMP routers) in terms of scalability, reliability, high-performance, development and operational simplicity.

Bondy vs. other WAMP routers

Distributed by design

Bondy was designed as a reliable distributed router, ensuring continued operation in the event of node or network failures through clustering and data replication.

Each Bondy node is capable of sending messages to and receiving messages from other nodes. All nodes in Bondy cluster act as relays, passing on a message towards its final destination.

Self-sufficiency

Bondy does not depend on any external system e.g. databases, as it would not be able to guarantee their availability. Bondy stores all configuration and control plane data in its own embedded, globally-replicated database.

Scalable

Bondy is written in Erlang/OTP which provides the underlying operating system to handle concurrency and scalability requirements, allowing it to scale to thousands and even millions of concurrent connections on a single node.

Its distributed architecture allows for horizontal scaling by simply adding nodes to the cluster.

Decentralised, master-less

All nodes in a Bondy cluster are equal peers, there are no special nodes. This enables Bondy's operational simplicity.

Low latency data replication

All nodes in a Bondy cluster share a global state which is replicated through a highly scaleable and low latency eventually consistency model. Data is diseminated in real-time using epidemic broadcast trees (gossip)[1].

Bondy uses Partisan, a high-performance Distributed Erlang alternative that enables various network topologies and supports larger clusters.

Easy to operate

Bondy is easy to operate mainly due to its decentralised peer-to-peer nature, the lack of special nodes, automatic data replication and self-healing.

Multi-tenancy

Bondy Realms (WAMP Realms) allow for complete administrative and routing isolation. By mapping a realm to a tenancy you can enable multi-tenant architecture designs. Realm Same Sign-on and Prototypes provides further flexibility, allowing a tenancy to be mapped to a set of realms.

Identity Management & Authentication

Each Realm represents a User Identity domain and embeds an Identity Management and Authentication service which multiple WAMP and HTTP authentication methods. Identity data is replicated across the cluster to ensure always-on and low-latency operations.

Authorization

Each Realm embeds an Authorization service based on a Role-based Access Control (RBAC) subsystem which controls access to realm resources and operations. Every message flowing through a realm is individually authorized. RBAC data is replicated across the cluster to ensure always-on and low-latency operations.

HTTP API Gateway

Bondy embeds a powerful API Gateway that can translate HTTP actions to WAMP routed RPC and PubSub operations. The API Gateway leverages the underlying storage and replication technology to deploy the API Specifications to the cluster nodes in real-time.

Broker Bridge

Bondy embeds a Broker Bridge that can manage a set of internal WAMP subscribers that re-publishes WAMP events to an external non-WAMP system e.g. a message broker.

In this comparison, we will be featuring NATS, Apache Kafka, RabbitMQ, Apache Pulsar, and gRPC.

Bondy vs. other messaging technologies

This section presents a summary of how Bondy compares with popular messaging technologies of today. This is by no means an exhaustive list and each technology should be investigated thoroughly to decide which will work best for your implementation.

Atribution

In this comparison, we will be featuring NATS, Apache Kafka, RabbitMQ, Apache Pulsar, and gRPC. The content is based on the article Compare NATS.

Language and Platform Coverage

ProjectFeatures and Capabilities
Bondy36 known WAMP clients contributed by the community covering 21 programming languages.
NATSCore NATS: 48 known client types, 11 supported by maintainers, 18 contributed by the community. NATS Streaming: 7 client types supported by maintainers, 4 contributed by the community. NATS servers can be compiled on architectures supported by Golang. NATS provides binary distributions.
gRPC13 client languages.
Kafka18 client types supported across the community and by Confluent. Kafka servers can run on platforms supporting java; very wide support.
Pulsar7 client languages, 5 third-party clients - tested on macOS and Linux.
RabbitMQAt least 10 client platforms that are maintainer-supported with over 50 community supported client types. Servers are supported on the following platforms: Linux Windows, NT.

Built-in Communication Patterns

ProjectFeatures and Capabilities
BondyAs a WAMP router, Bondy provides support for publish/subscribe and Routed RPC, a first-class RPC implementation supporting URI-based discovery, call timeouts, failover/standy and load balancing. Payload pass-through mode supported.
NATSStreams and Services through built-in publish/subscribe, request-reply, and load-balanced queue subscriber patterns. Dynamic request permissioning and request subject obfuscation is supported.
gRPCOne service, which may have streaming semantics, per channel. Load Balancing for a service can be done either client-side or by using a proxy.
KafkaStreams through publish/subscribe. Load balancing can be achieved with consumer groups. Application code must correlate requests with replies over multiple topics for a service (request-reply) pattern.
PulsarStreams through publish/subscribe. Multiple competing consumer patterns support load balancing. Application code must correlate requests with replies over multiple topics for a service (request-reply) pattern.
RabbitMQStreams through publish/subscribe, and services with a direct reply-to feature. Load balancing can be achieved with a Work Queue. Applications must correlate requests with replies over multiple topics for a service (request-reply) pattern.

Delivery Guarantees

ProjectFeatures and Capabilities
BondyAt most once.
NATSAt most once, at least once, and exactly once is available in JetStream.
gRPCAt most once.
KafkaAt least once, exactly once.
PulsarAt most once, at least once, and exactly once.
RabbitMQAt most once, at least once.

Multi-tenancy and Sharing

ProjectFeatures and Capabilities
BondyBondy supports true multi-tenancy and decentralised security through WAMP Realms. Each realm can have its own authentication and authorization scheme.
NATSNATS supports true multi-tenancy and decentralized security through accounts and defining shared streams and services.
gRPCN/A
KafkaN/A
PulsarMulti-tenancy is implemented through tenants; built-in data sharing across tenants is not supported. Each tenant can have its own authentication and authorization scheme.
RabbitMQMulti-tenancy is supported with vhosts; data sharing is not supported.

Authentication

ProjectFeatures and Capabilities
BondyWAMP Crytosign, WAMP Ticket (JWT), HTTP OAuth2 (JSON Web Token), WAMP CRA, username and password, Trust and Anonymous. All authentication methods support CIDR address restrictions.
NATSNATS supports TLS, NATS credentials, NKEYS (NATS ED25519 keys), username and password, or simple token.
gRPCTLS, ALT, Token, channel and call credentials, and a plug-in mechanism.
KafkaSupports Kerberos and TLS. Supports JAAS and an out-of-box authorizer implementation that uses ZooKeeper to store connection and subject.
PulsarTLS Authentication, Athenz, Kerberos, JSON Web Token Authentication.
RabbitMQTLS, SASL, username and password, and pluggable authorization.

Authorization

ProjectFeatures and Capabilities
BondyRealms provide a fine grained Role-based Access Control (RBAC) model that enables user-level Publish/Subscribe and RPC permissions and CIDR address restrictions. Supports exact, pattern and wildcard URI matching.
NATSAccount limits including number of connections, message size, number of imports and exports. User-level publish and subscribe permissions, connection restrictions, CIDR address restrictions, and time of day restrictions.
gRPCUsers can configure call credentials to authorize fine-grained individual calls on a service.
KafkaSupports JAAS, ACLs for a rich set of Kafka resources including topics, clusters, groups, and others.
PulsarPermissions may be granted to specific roles for lists of operations such as produce and consume.
RabbitMQACLs dictate permissions for configure, write, and read operations on resources like exchanges, queues, transactions, and others. Authentication is pluggable.

Message Retention and Persistence

ProjectFeatures and Capabilities
Bondy
NATS
gRPC
Kafka
Pulsar
RabbitMQ

High Availability and Fault Tolerance

ProjectFeatures and Capabilities
Bondy
NATS
gRPC
Kafka
Pulsar
RabbitMQ

Deployment

ProjectSupported Deployment Models
Bondy
NATS
gRPC
Kafka
Pulsar
RabbitMQ

Monitoring

ProjectMonitoring Tooling
Bondy
NATS
gRPC
Kafka
Pulsar
RabbitMQ

Management

ProjectManagement Tooling
Bondy
NATS
gRPC
Kafka
Pulsar
RabbitMQ

Integrations

ProjectBuilt-in and 3rd-party Integrations
Bondy
NATS
gRPC
Kafka
Pulsar
RabbitMQ

  1. Epidemic broadcast trees, João Leitão, José Pereira and Luís Rodrigues ↩︎

Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution-ShareAlike (CC-BY-SA) 4.0 International license.
Bondy and Leapsight are registered trademarks.