URL shortener service
http://reduc.io/wuXaq
We could use following short code gen also:
substr(base62(md5(url)), 6) = 62 ^ 6 //unique short urls
Run docker-compose
, it will start api
, redis
and will expose api port to host.
docker-compose up
# Shorten
curl -i http://localhost:9001 -F "url=https://www.amazon.com/Star-Wars-Battlefront-II-Digital/dp/B072JZZ4XD"
# Call shortened url
for ((i=1;i<=100;i++)); do curl -i "http://localhost:9001/SEwuXHhBQw"; done
# Get Stats
curl -i "http://localhost:9001/stats/?url=https://www.amazon.com/Star-Wars-Battlefront-II-Digital/dp/B072JZZ4XD"
# returns: {"callCount":100}
sbt packageBin
sbt test
Simulation users count can be set in application.conf
in test resources.
# terminal 1
sbt run
# Run simulation in terminal 2
sbt gatling:test gatling:latestReport
sbt clean coverage test coverageReport
- Seperate read and write API's
- Move statistics to different data store and API
- Add DB support by having write master/replicas and have read replicas
- Move hit counts to MapReduce job and generate them from the Web Server logs
- Implement Authentication using JWT authentication protocol with OAuth2 authentication framework
- API Documentation using swagger or similar
- Add Host denyList
- Add Retry policies for
Redis
calls using Retry or similar one - Add Throttling using akka-http-contrib
- Add Metrics support using akka-http-metrics
z i Ξ» a s a l.