WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Software Engineering · Guru · question 94 of 100

Explain the concept of an atomic broadcast in distributed systems, and how it can be used to achieve strong consistency.?

📕 Buy this interview preparation book: 100 Software Engineering questions & answers — PDF + EPUB for $5

Atomic broadcast is an important concept in distributed systems that provides a mechanism for broadcasting a message such that it is delivered and processed in the same order by all the nodes in the system. Atomic broadcast ensures that all participating nodes first agree on the order of messages, and then execute each message in the agreed order.

Atomic broadcast is a fundamental building block for achieving strong consistency in a distributed system. Strong consistency requires that all nodes in the system see the same sequence of events, and that every read operation returns the same value regardless of which node it is executed on.

One common algorithm for implementing atomic broadcast is the Total Order Broadcast (TOB) algorithm. This algorithm ensures that all nodes agree on the order of messages and that each message is delivered to every node exactly once.

The TOB algorithm works as follows. When a node broadcasts a message, it sends the message to all other nodes in the system. Each receiving node then adds the message to a buffer and sends an acknowledgement (ACK) back to the sender. When the sender receives ACK messages from all other nodes, it delivers the message locally and broadcasts a deliver message to every node. Each node that receives the deliver message then removes the message from its buffer and delivers it locally.

One advantage of the TOB algorithm is that it guarantees strong consistency since all nodes agree on the same order of messages. In addition, the algorithm is fault-tolerant, meaning that it can withstand node failures without sacrificing consistency.

Here is an example code implementation of the TOB algorithm:

public class TotalOrderBroadcast {
  List<Node> nodes; // list of all nodes in the system

  // called when a node broadcasts a message
  public void broadcast(Message message) {
    // send the message to all other nodes in the system
    for (Node n : nodes) {
      if (n != this) {
        n.addToBuffer(message);
      }
    }
    
    // wait for ACK messages from all other nodes
    while (!allAckReceived(message)) {
      Thread.sleep(100); // wait for a short period before checking again
    }
    
    // deliver the message locally and broadcast a deliver message to every node
    deliver(message);
    for (Node n : nodes) {
      if (n != this) {
        n.deliver(message);
      }
    }
  } 

  // called when a node receives an ACK message
  public void onAckReceived(Message message, Node sender) {
    sender.addToAckList(message);
  }

  // check if ACK messages have been received from all other nodes
  private boolean allAckReceived(Message message) {
    for (Node n : nodes) {
      if (n != this && !n.hasReceivedAckFor(message)) {
        return false;
      }
    }
    return true;
  }

  // called when a node receives a deliver message
  public void onDeliver(Message message) {
    if (!message.isDelivered()) {
      message.setDelivered(true);
      processMessageLocally(message);
    }
  }

  // process a message locally
  private void processMessageLocally(Message message) {
    // execute the message locally
  }
}
Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Software Engineering interview — then scores it.
📞 Practice Software Engineering — free 15 min
📕 Buy this interview preparation book: 100 Software Engineering questions & answers — PDF + EPUB for $5

All 100 Software Engineering questions · All topics