Перейти к содержимому
4 / 15

Как спроектировать сервис коротких ссылок?

Задача читается просто, но проверяет три вещи: генерацию ключа, соотношение чтения к записи и кэш. Ключ лучше получать из монотонного счётчика в base62, а не из хеша длинного URL: счётчик даёт короткий ключ без коллизий, хеш требует проверки на дубликаты и обрезки. Нагрузка асимметрична — чтений примерно в сто раз больше записей, поэтому редирект обслуживает кэш, а база нужна только при промахе. Главный компромисс — 301 или 302: 301 кэшируется браузером и разгружает сервис, но убивает аналитику переходов и делает ссылку неотзываемой, поэтому по умолчанию берут 302. Узкое место — не запись, а горячие ссылки и размер таблицы: первое лечится кэшем, второе шардированием по короткому ключу.

Как спроектировать сервис коротких ссылок? | JScriptiser