Performance

Performance

Metrics

  • Suppose using redis cache for caching hot short url => long url mappings, using HBase to store the short url => long url mappings. And 80% of responses come from cache.

  • If Redis response time is typically around 1ms, and server response time is around 5ms, then it would satisfy the requirement that 80% request response time is within 5ms.

  • Typically HBase response is within 10ms.

Scale read with cache

Cluster size

  • Suppose cache (e.g. redis) has a retention time of 7 days.

  • Every 7 days, there needs to be 0.25 billion urls being accessed.

  • Each entry has a 1KB size. Then cluster size will be 1KB * 0.25 billion = 0.25 * 10^12 bytes = 250 GB.

One master multiple slaves

  • Write to master, streamly replicated to slaves, usually less than one second Read from slaves.

Pros

  • Increase availability to handle single point of failure

  • Reduce read pressure on a single node

Cons

  • Replication lag

    • Solution1: We can write to memcache when creating a new tiny url. Service can get tiny url from memcache instead of database.

    • Solution2: We can implement Raft protocol against relational database or use opensource or commercial realted database.

Deploy servers in different geographical locations

  • Web server

    • Different web servers deployed in different geographical locations

    • Use DNS to parse different web servers to different geographical locations

  • Database

    • Centralized MySQL + Distributed memcached server

    • Cache server deployed in different geographical locations

Last updated