List non-functional requirements for the system...
Request:POST /api/v1/shorturl
{ expiration_date, longurl}
Response: { shorturl, expiration_date}
PATCH /api/v1/{shorturl}/
{ timestamp, expiration_date, longurl}
Response: { shorturl, expiration_date }
DELETE /api/{tinurl}
Repsonse: Status
GET /api/v1/url/{short_url}
Response: { timestamp, expiration_date, longurl}
User Table: userid
Url Table: userid, timestamp, expiration date, long_url, short_url
Create Tiny URL
Client -> Load Balance -> API Gateway -> URL Generation Service -> Message Queue -> Database
Request Tiny URL
Client -> Load Balance -> API Gateway -> URL Request Service -> Cache -> Database
Future:
URL Request Service -> Message Queue -> Logging Service -> Database
Tiny URL creation flow
Tiny URL creation flow
Generate URL
Short Url CreateUrl(timestamp, server, user id)
Request URL
Get URL(URL)
Used Cache for Frequently requested URLs
Load balance to distribute load
API Gateway for logging, security, rate limiting
NoSQL database
Eventual consistency if fine
Message queue - pub/sub for later writes to database
Database is important
The cache can go down but the database cannot
It also puts a message on the message queue for logging access statistics