Geo Quorum Routing

medium · distributed-systems, replication, geo

Geo Quorum Routing

A multi-region system has replicas in multiple regions. To satisfy a read or write quorum, the client contacts regions in increasing latency order until it has enough replicas.

Given region latencies and replica counts, compute:

  • the regions used for the read quorum (size R)
  • the regions used for the write quorum (size W)
  • the resulting latency for each quorum (the max latency among chosen regions)

If there are not enough replicas to satisfy a quorum, return latency -1 and an empty region list for that quorum.

Types

type Region struct {
    Name     string
    Latency  int
    Replicas int
}

type RoutePlan struct {
    ReadRegions  []string
    ReadLatency  int
    WriteRegions []string
    WriteLatency int
}

Function signature

func GeoQuorumRoute(regions []Region, r, w int) RoutePlan

Example

regions = [
  {Name:"us-east", Latency:20, Replicas:2},
  {Name:"us-west", Latency:50, Replicas:2},
  {Name:"eu",      Latency:80, Replicas:1},
]
R=2, W=3

ReadRegions  = ["us-east"]      (2 replicas)  ReadLatency=20
WriteRegions = ["us-east","us-west"]         WriteLatency=50

Constraints

  • 0 <= len(regions) <= 1000
  • 0 <= Latency <= 1_000_000
  • 0 <= Replicas <= 1_000_000

Notes

  • Regions are selected by ascending latency; ties break by name.
  • Quorums are satisfied by replica count, not region count.
Run tests to see results
No issues detected