Должен ли я создать отдельный сервер загрузки файлов помимо основного сервера graphql?
Я создаю мобильное приложение с React Native, которое будет сильно зависеть от загрузки файлов в виде изображений и видео. В настоящее время мой сервер GraphQL обрабатывает все взаимодействия с базой данных, и теперь я хочу добавить функциональность для загрузки изображений (сейчас только изображения профиля, позже видео). Эти файлы будут храниться в хранилище облачных объектов.
Было бы довольно просто использовать apollo-upload-client в мобильном приложении и graphql-upload.с моим сервером Apollo для загрузки файлов. Но я не уверен, следует ли мне создавать отдельный сервер, который обрабатывает только взаимодействие с файлами, так что моему основному серверу нужно только обрабатывать задания БД. Загрузка файла также добавит огромной нагрузки на основной сервер GraphQL, который должен быть очень быстрым и отзывчивым, поскольку от него зависит большая часть приложения.
Мне было бы интересно услышать другие мнения и советы по этой теме и стоит ли создавать отдельный сервер для взаимодействия с файлами.
Или даже изучите разные языки, такие как Elixir или Python, для повышения производительности, потому что нам также потребуется обрабатывать и сжимать видео и изображения, чтобы уменьшить их размер.
1 ответ
ИМО, если ваш конечный пункт назначения - облачное хранилище, вам будет лучше (и вы будете платить меньше), если вы загрузите напрямую в облако. Я обычно рекомендую трехэтапный процесс:
- мутация для создания подписанного URL загрузки (или подписанной формы загрузки)
- Клиент загружает напрямую в облако (временное местоположение с TTL)
- мутация для обработки формы, содержащей метаданные загрузки (обработка и перемещение в окончательное место)
Это особенно интересно, когда вы начинаете обрабатывать несколько загрузок и выясняете, как обрабатывать их асинхронно, пока пользователь заполняет остальную часть формы.