Как создать функциональный Pastebin
15 марта 2023 г.Системные требования Pastebin
- Клиент должен иметь возможность загружать текстовые данные и получать уникальный URL.
- Полученный URL используется для доступа к текстовым данным
Хранение данных
Схема базы данных
* Основными объектами базы данных являются таблица Pastes, таблица Users * Связь между таблицами Users и Pastes — 1-ко-многим
Тип хранилища данных
- Содержимое вставки хранится в хранилище управляемых объектов, таком как AWS S3.
- Для хранения метаданных (URL-адреса вставки) вставки используется база данных SQL, такая как Postgres или MySQL.
Дизайн высокого уровня
- Сервер создает уникальный идентификатор вставки (ID) для каждой новой вставки.
- Сервер кодирует идентификатор вставки для удобочитаемости.
- Сервер сохраняет идентификатор вставки в хранилище метаданных, а вставку — в хранилище объектов.
- Когда клиент вводит идентификатор вставки, сервер возвращает вставку.
Написать путь
- Клиент устанавливает HTTP-соединение с сервером
- Запись в Pastebin ограничена по скорости.
- Служба генерации ключей (KGS) создает уникальный закодированный идентификатор вставки.
- Хранилище объектов возвращает предварительно подписанный URL.
- URL для вставки (http://presigned-url/paste-id) создается путем добавления созданного идентификатора вставки к суффиксу предварительно подписанного URL.
- Вставляемое содержимое передается напрямую от клиента в хранилище объектов с использованием URL-адреса для вставки, чтобы оптимизировать расходы на пропускную способность и производительность.
- Хранилище объектов сохраняет вставку, используя URL-адрес для вставки.
- Метаданные вставки, включая URL-адрес вставки, сохраняются в базе данных SQL.
- Сервер возвращает идентификатор вставки клиенту для последующего доступа.
Читать путь
- Клиент выполняет DNS-запрос для идентификации сервера.
- К сети CDN отправляется запрос, чтобы убедиться, что запрошенная вставка находится в кеше CDN.
- Клиент устанавливает HTTP-соединение с балансировщиком нагрузки или обратным прокси-сервером.
- Запросы на чтение ограничены по скорости
- Балансировщик нагрузки делегирует подключение клиента к серверу со свободной емкостью
- Сервер проверяет наличие вставки, запрашивая фильтр Блума .
- Если вставка существует, проверьте, хранится ли она на сервере кеша.
- Получить метаданные для вставки из базы данных SQL
- Получить вставляемое содержимое из хранилища объектов, используя метаданные.
Также опубликовано здесь.
Избранное изображение источник.
Ссылки
- Тодд Хофф, Bitly: Извлеченные уроки при создании распределенной системы, обрабатывающей 6 миллиардов кликов в месяц (2014 г.), highscalability.com
- GitHub Docs API Gists, docs.github .com
Оригинал