Geo Quorum Routing
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) <= 10000 <= Latency <= 1_000_0000 <= 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