How does a new node join a group in the SWIM protocol?
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
The Scalable Weakly-consistent Infection-style Membership protocol, or SWIM, is a membership protocol designed for distributed systems to handle node membership and failure detection efficiently. When a new node joins a group or cluster in a system using the SWIM protocol, several distinct steps and mechanisms ensure seamless integration and communication among the nodes. Understanding how these steps function requires diving into the technical details of the SWIM protocol.
Initial Introduction
When a new node (let's refer to it as Node A) wishes to join a group, it must first know the address of at least one member (say Node B) of the cluster. This can generally be achieved by configuring each node with the address of a few well-known members or using a service registry from which Node A can request the addresses of active members.
Joining Request
Node A sends a JOIN request to Node B. This request is a simple message that indicates Node A’s desire to become part of the cluster.
Acknowledgment and Confirmation
On receiving the JOIN request, Node B will typically respond with an ACK (acknowledgment). This ACK may include essential data about the cluster such as the list of current members, which helps Node A to know about the existence of other nodes in the system.
Dissemination of Membership Information
Node B then initiates a gossip process to disseminate the information about Node A joining the cluster. During this phase, Node B sends messages to a randomly selected subset of nodes in the group, informing them of the new member (Node A). These nodes, in turn, propagate the information further, ensuring rapid and efficient distribution of membership changes without overwhelming the network.
Integration and Monitoring
Once Node A receives acknowledgment from Node B, it starts participating in the protocol’s regular activities. This includes participating in the gossiping of membership lists and responding to ping messages, which help in failure detection and maintaining an up-to-date view of the cluster’s state.
Failure Detection and Self Healing
SWIM protocol categorizes failure detection into two parts:
- Direct Monitoring: Node A will regularly "ping" a randomly selected node in the cluster. If there is no response, the protocol proceeds to the next step.
- Indirect Monitoring: Node A selects a set of k nodes at random from its list of nodes and asks them to ping the non-responsive node. If these nodes also fail to get a response, the node is considered as failed.
This approach not only helps in reducing the false-positive rate of node failure detection but also ensures that the system is self-healing.
Membership Updates
Any changes in the cluster, such as node failures, joins, or voluntary leaves, are continuously communicated through the same gossip protocol. This ensures all nodes maintain a consistent view of the system's membership.
Summary Table
| Term | Description |
| JOIN Request | Initial request sent by a new node to join the cluster. |
| ACK | Acknowledgment sent by an existing node, confirming receipt of JOIN. |
| Gossip Protocol | Mechanism for disseminating membership information and updates. |
| Ping Messages | Messages sent between nodes to establish presence and monitor health. |
| Failure Detection | Two-step process involving direct and indirect monitoring of nodes. |
| Self Healing | Mechanism by which the system handles and recovers from node failures. |
Conclusion
The SWIM protocol provides a robust, scalable way for nodes to manage their membership and monitor their health in distributed systems. By leveraging gossiping algorithms and failure detection, SWIM ensures low overhead and high accuracy in maintaining the cluster's state, thus facilitating smooth operations and dependable service in dynamic environments.
Related reading
- How does an odd number solve a split brain in a distributed system?
- How does any syncronous request works in asycrounous microservices enviorment?
- How does Apache Kafka use open file descriptors?
- How does Cassandra Partitioning actually work?
- How does AMQP overcome the difficulties of using TCP directly?
- How does asychronous programming work in Netty? Does it make things more chatty?
- How does Cassandra partitioning work when replication factor == cluster size?
- How does Cassandra partitioning work when replication factor cluster size?

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.