Brendan Ang

Search

Search IconIcon to open search

Broadcast Abstractions

Last updated Feb 2, 2023 Edit Source

# Broadcast Abstractions

# Unreliable Broadcast

Does not guarantee anything. Such events are allowed:

# Best Effort Broadcast

Guarantees reliability only if sender is correct

# Implementation

We can use perfect links: Upon <beb Broadcast | m>send message m to all processes (for-loop)
Correctness

# Reliable Broadcast

BEB gives no guarantees if sender crashes. Reliable strengthens this by giving guarantees even if sender crashes. Guarantee: either all correct processes deliver m or none of them.

# Fail Stop (Lazy) Implementation

# Performance

Message complexity: best case O(N), worst case O(N^2) Time complexity: best case 1 round. worst case 2 rounds

# Fail Silent (Eager)

No failure detector necessary. A pessimistic approach that just redistributes any message by assuming that the process has failed.

# Uniform Reliable Broadcast

Reliable broadcast creates a problem. If a failed process delivers a message that has a side effect (such as withdrawing some money from an account), the correct processes need not deliver (know of) this side effect.

# Eager (Fail-stop)

Intuition: deliver the message only when we know that every other correct process can deliver the message. If we do not wait for all correct processes (or we do not have the complete set of failed processes using a weaker FD), we might deliver m even though some correct processes did not receive the message, violating agreement.

# Majority-ACK (Fail Silent)

Correctness assumption: a majority of processes are always correct. Resilience is N/2 machines can fail

# Causal Broadcast

Causality between broadcast events is preserved by the corresponding delivery events

# Examples

# Reliable (Fail Silent)

Each broadcasted messages carries a history which can be used to ensure causality before delivery. The history is an ordered list of casually preceding messages in the past.

# Fail Silent waiting

# Orderings