Requirements
Functional Requirements:
- Create a short URL for a given long URL.
- Return the long URL associated with a given short URL.
- need to be able to handle alot of incoming Get requests
Non-Functional Requirements:
- List the key neon-functional requirements (eg low latency, scalability, reliability, etc.)...
- need to be reliable for no one wants a break a link
- high availability is a must since broken shorts links destroy user trust
- service must scale horizationally to support increaseing traffic and data.
- need to be write light and read heavy system, since most people will click short links than generate them
API Design
Define the APIs expected from the system. This is your chance to analyze and define the read and write paths so that you can come up with the high-level design...
Post/shorten - accepts long url and returns a new short url
Get/expand - given short url returns the associated long url
get / Shortcode handles incoming redirect requests
Post/customer user can provide a preffered short alias
get/ stats/ retrieve analytics
High-Level Design
Describe the overall system architecture. Identify the main components needed to solve the problem end-to-end. Use the diagramming tool to create a block diagram.
Detailed Component Design
Deep dive into 2-3 key components. Explain how they work, how they scale, discuss tradeoffs, capacity, and any relevant algorithms or data structures.
client - uer/mobile web calls to api s to shorten/aexpand/redirect
api gateway - routes traffic to backend services
shortening service - accepts long URLS and genrates a unique short code and writes to db
redirect service - reads from db, hanldes shortcodes
database - stores url mapping as above
cache like redis or memcache - for most common shortcodes to avoid db trips on hot urls
monitoring and metric and longing - track latenxies, errors, traffic and possible abuse.
optional analytics services... collects stats about each redirect event.