Статьи

URL Shortener: подробное объяснение

Вступление

Укорочение URL — это сервис, который используется для создания коротких ссылок из очень длинных URL. Обычно короткие ссылки имеют размер одной трети или даже одной четверти исходного URL, что облегчает их ввод, представление или отправку в Твиттере. При нажатии на короткую ссылку пользователь будет автоматически перенаправлен на исходный URL. 

В Интернете доступно множество сервисов сокращения URL-адресов, таких как tiny.cc, bitly.com, cutt.ly и т. Д. Реализация сервиса сокращения URL-адресов не является сложной задачей и часто является частью собеседований по проектированию системы. В этом посте я постараюсь объяснить процесс внедрения сервиса. 

теория 

Перед внедрением всегда полезно записать, что необходимо сделать, в форме функциональных и нефункциональных требований. 

Функциональные требования: 

  • Пользователи должны иметь возможность вводить длинный URL. Наш сервис должен сохранить этот URL и создать короткую ссылку.

  • Пользователи должны иметь возможность ввести срок действия. После этой даты короткая ссылка должна быть недействительной.

  • Нажатие на короткую ссылку должно перенаправить пользователя на оригинальный длинный URL.

  • Пользователи должны создать учетную запись для использования сервиса. Сервис может иметь ограничение использования на пользователя. *

  • Пользователь может создать собственную короткую ссылку. *

  • Сервис должен иметь метрики, например, наиболее посещаемые ссылки. *

Нефункциональные требования:

  • Сервис должен быть запущен 100% времени.

  • Перенаправление не должно длиться дольше двух секунд.

* Требования необязательны.

Преобразование URL

Допустим, мы хотим иметь короткую ссылку с максимальной длиной 7. Самое важное в укороченном URL-адресе — это алгоритм преобразования. Преобразование URL может быть реализовано несколькими различными способами, и у каждого способа есть свои плюсы и минусы. 

Одним из способов создания коротких ссылок было бы хеширование исходного URL с помощью некоторой хэш-функции (например, MD5  или SHA-2 ). При использовании хеш-функции, несомненно, что разные входы приведут к разным выходам. Результат хеша длиннее семи символов, поэтому нам нужно взять первые семь символов. Но в этом случае может произойти столкновение, поскольку первые семь символов уже могут использоваться в качестве короткой ссылки. Затем мы берем следующие семь символов, пока не найдем короткую ссылку, которая не используется.

Второй способ создания короткой ссылки — использование UUID . Вероятность того, что UUID будет продублирован, не равна нулю, но он достаточно близок к нулю, чтобы быть незначительным. Поскольку UUID имеет 36 символов, это означает, что у нас та же проблема, что и выше. Мы должны взять первые семь символов и проверить, используется ли уже эта комбинация.

Третий способ — преобразование чисел из базы 10 в базу 62. База — это количество цифр или символов, которые можно использовать для представления конкретного числа. База 10 — это цифры [0-9], которые мы используем в повседневной жизни, а база 62 — [0-9] [az] [AZ]. Это означает, что, например, число в базе 10 с четырьмя цифрами будет таким же числом в базе 62, но с двумя символами.

Использование базы 62 в преобразовании URL с максимальной длиной в семь символов позволяет нам иметь 62 ^ 7 уникальных значений для коротких ссылок.

Как работает Base 62 Conversion

У нас есть число 10, которое мы хотим преобразовать в 62. Мы собираемся использовать следующий алгоритм:


Джава