❱ reduc.io ❰
URL shortener service
http://reduc.io/wuXaq
Tech stack
Alternative solutions
We could use following short code gen also:
substr(base62(md5(url)), 6) = 62 ^ 6 //unique short urls
Commands
Run
Run docker-compose, it will start api, redis and will expose api port to host.
Sample usage
# 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}
Create executable
Test
Gatling Simulation
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
Coverage with Report
sbt clean coverage test coverageReportImprovements
- 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
Rediscalls using Retry or similar one - Add Throttling using akka-http-contrib
- Add Metrics support using akka-http-metrics
z i λ a s a l.