Skip to content

Latest commit

 

History

History
54 lines (40 loc) · 2.49 KB

File metadata and controls

54 lines (40 loc) · 2.49 KB

Static

Round robin

  • Weighted round robin
    • Cons: It may result same node being picked during several consecutive requests.
  • Smooth weighted round robin
    1. For each node, currentWeight = currentWeight + weight
    2. Pick the max currentWeight node as target node
    3. Change target node currentWeight = currentWeight - sum(weight)

Random

  • When compared with round robin, the later could be more smooth. Because random-number based could make several consecutive requests landing in one node.

Consistent hashing

  • Normal hashing algorithm
    • Cons: Too many items to migrate during resharding
  • Consistent hashing
    • Cons: Uneven load during scale up/down
  • Consistent hashing with virtual nodes
    • The interval between nodes could be uneven, but the load will be even.

Pros

  • If local cache is enabled on servers, then consistent hashing could reduce the inconsistency.
    • Using UserID as key, if request 1 for user ID comes to server 1, then request for this user will always land on this node. It will result in better consistency when compared with round robin, etc.
    • However, it could not completely resolve the inconsistency. For example, when cluster scales up, the old request could land on old node and new request could land on new node.

Complexity analysis

  • Assume the total number of data M, the total number of nodes N
  • Read/write complexity increases from O(1)to O(lgn) When compared with traditional hashing because consistent hashing read/write steps are as follow:
    1. Convert hashkey into 32 bit int number. O(1)
    2. Use binary search to find the corresponding node. O(lgn)
  • Data migration complexity decreases from O(m) to O(m/N).

References

Based on metric numbers

  • Least num of connection
  • Least num of ongoing requests
  • Fastest response time

How to collect metrics

  • Client report to metric collector

Cons

  • These approaches don't take the request itself into consideration.
  • For example, using the lease num of connection. There might not be that many requests but each request could be pretty big.

Dynamic