Реализовать сервис сокращения ссылок. Данный сервис должен реализовывать 3 запроса:
- API Создание короткой ссылки
- Endpoint редиректа на оригинальную ссылку
- API статистики кликов
Проект необходимо реализовать на Ruby On Rails. База - на выбор
Решение должно отвечать следующим требованиям
- Быстро работать при больших нагрузках (предполагаем быстрый рост сервиса)
- Имеет структуру API, описаную в задании
- Хорошее покрытие тестами
- Созадем Rails приложение
- Для улучшения быстродействия используем Redis & Sidekiq
- Предполагаем, что наиболее загруженный endpoint - это
GET /urls/:short_url
- закрываем его под кешем
docker-compose up -d
- Запросы на создание и просмотр статистики должны быть закрыты от публичного доступа. Сейчас добавил API JWT
- Как правило, сокращатель является полезным инструментом для маркетинга, возможно в будущем понадобится удобный интерфейс просмотра статистики
- Даже если сервис будет использоваться внутри компании, рекомендуется настроить защиту от атак. Можно использовать как внешние инструменты (нап. cloudflare), так и настроить тротлинг на уровне Rails (напр. gem rack_attack)
- В задании не было сказано про ограничения, но стоит подумать об этом. Напрмиер, настроить время жизни ссылок. Старые ссылки можно удалять, тем самым освобождая места в базе данных (экономим ресурсы и улучшаем быстродействие)
- Также, зная предназначение сервиса, можно добавить органичения на сами ссылки. Например, не сокращать ссылки, которые уже являются короткими (clck.ru, bitly. etc).
- Сократить сам endpoint GET /urls/:short_url. Это можно сделать на строне nginx.
Короткие ссылки должны быть ввида
short_host/code
. Сразу после увеличения кол-ва просмотров можно не возвращать URL, а перенаправлять клиента - Сменить хранение статистики с Postgres на ClickHouse. Он хорошо работает с большими данными и множеством аналитический запросов.