We'll go with a key-value NoSQL store assuming that no new significant feature development is required in near future. Considering that we'd like to focus on a rapid prototyping and we'd start with DynamoDB.
All the related ER graph are drew. They will be stored in different tables as they are serving different kind of traffic and scaling can vary.
Components:
1. User initiates a GET request to /expand endpoint with the shorten URL.2. The API Gateway receives the requests and forward it to the Load balancer.3. Load balancer routes the requests to one of healthy Application Servers with certain routing algorithm.4. The Application server checks the Database to see if a shorten URL exists, if so, it retrieves the corresponding full URL and return to customer. If not, it will return a 404(ResourceNotFound) back to customer.5. Application server will invoke the log click processor to report its statistic. 6. Response will be sent all
I'd like to analyze component by component and assume the failure mode one by one.