عجفت الغور

load balancing

distributed systems

Algorithms Per Server

Leaky Bucket Algorithm

  • Has known properties of capacity (\(C\)), inflow rate (\(R_{in}\)), and outflow rate (\(R_{out}\)).
  • As requests come in, check if the bucket is full, and drop it
  • Good for avoiding bursts of requests downstream
  • Slow processing will stall the entire queue

Token Bucket Algorithm

  • Bucket has predefined capacity of tokens, each bucket is periodically filled with tokens at a constant rate. Checks for tokens in a bucket every time we recieve a request
  • Similar to leaky bucket, but allows for bursts of traffic to come in, and space efficient. At time cutoffs for token refills, however, it could slightly exceed

Fixed Window

  • Same as the others, but has problems like the token one where edges can allow for more requests than normal.
  • Biggest danger is that a consistent burst of traffic at the window edges could overflow

Sliding Window Log

  • LB keeps track of timestamps when things arrive, whenever a request arrives, we look back and count how many are available.
  • Avoids the issue of edges, but requires extra memory

Sliding Window Counter

  • Divide time into various windows. Keep a sliding window over them, and count how many.
  • Avoids the issue edges, but has problems in that it assumes previous window requests are distributed evenly across the window time
  • Smoothes out the burst

Distribution Algorithms

Consistent Hashing

Adya et al: Slicer Auto-Sharding for Datacenter Applications.pdf