Shor10 (or short10?) Basically, a url shortener

Actions

(User side)

Shorten a url:

  • User writes a url in the url field
  • User clicks on 'Shorten url'
  • A short url is generated and displayed to the user

Access a short url

  • User inputs his short url in his browser
  • User gets redirected to the long url that got shorten in this short url

Actions

(Backend)

Shorten a url

  • Input: long url
  • The long url is hashed using md5
  • The hexdigest is retrieved and converted to base10
  • The base 10 is converted to base62
  • The result is truncated to a short url (7 characters)
  • Check if this url is already stored (cache then dynamodb), and links to the correct long url
  • Handles collisions if needed
  • If not, stores the link between short/long
  • Output: short url

Access a shorturl

  • Input the short url
  • Tries to find the url in the db (Cache then dynamodb)
  • Ouput the long url

Architecture

Base

Note that redis could have been replaced by DAX

Scaling

'Simplified' overview of the current architecture

Improvements

What could be changed?

  • Secondary index on dynamodb
  • Url sanitizing (removing `https`... blocks)
  • Currently dynamodb is not set up to scale automatically but could easily be (for simplicity and costs limitation)
  • More cloud watch alarms could be set up for auto scaling policies, and not on cluster CPU but instances CPU or others
  • Using elastic cache, or DAX

The way to production

  • Having a more secure architecture (Not have public IPs on instances, bastion host for ssh or VPN...)
  • Avoiding single point of failure on ELB
  • Stress tests, study the cost of the solution
  • Fully automated deployment
  • Terraform: create test/prod environments
  • Terraform the fact of adding ELB records to the main hosted zone
  • How many reads compared to writes? Maybe scaling read functionality in another service is better.

Questions time!

Url shortener

By Adrien Duffy-coissard

Url shortener

  • 67