Этот проект предоставляет прокси-сервис gRPC для загрузки превью видео YouTube с поддержкой кэширования. По первому запросу он получает превью с YouTube и сохраняет ее в Redis. При повторных запросах одного и того же видео он отображает кэшированную превью, сокращая время отклика и сокращая количество повторных загрузок.
Включен CLI интрумент, позволяющий пользователям получать превью, предоставляя идентификаторы видео YouTube.
- gRPC Прокси Сервис: Скачивает видео с Youtube через систему gRPC.
- Кэширование: Кэширование в Redis для повторного использования.
- CLI Клиент: CLI инструмент для загрузки превью по идентификатору видео с поддержкой асинхронной загрузки.
- Go 1.18 или выше
- Redis сервер (хост по умолчанию:
localhost:6379
)
-
Склонируйте репозиторий:
git clone https://github.com/Pat0sya/Golang-Proxy-Youtube.git cd Golang-Proxy-Server
-
Установите зависимости:
go mod tidy
-
Set up Redis: Удостоверьтесь что Redis установлен и работает на хосте
localhost:6379
. Этот проект использует Redis в качестве временного хранилищa.
Запустите gRPC сервер для обработки запросов:
go run src/server/main.go
Сервер начнет ждать запросов от клиента на хосте localhost:50051
.
CLI инструмент позволит пользователям запрашивать скачивание превью по их ID.
go run src/client/main.go [--output-dir=<path>] [--async] <video_id_1> <video_id_2> ...
<video_id>
: Одно или больше ID видео, которые будут скачены.--output-dir
: (Опционально) Указание директории, куда будут скачены превью видео.--async
: (Опционально) Флаг для скачивания видео асинхронно.
-
Скачивание одного превью:
go run src/client/main.go --output-dir=thumbnails dQw4w9WgXcQ
-
Скачивание нескольких превью асинхронно:
go run src/client/main.go --output-dir=thumbnails --async dQw4w9WgXcQ RDFxPcwn1Z5uw
Если запрошенное превью уже существует в кеше Redis, клиент получит ее из Redis вместо того, чтобы загружать ее снова, что снижает нагрузку на сервер и повышает скорость.
Чтобы остановить сервер, используйте Ctrl+C
в терминале, где работает сервер.
По умолчанию сервис работает на хостах:
- Redis:
localhost:6379
- gRPC Server:
localhost:50051
Для модификации, можете изменить internal/client/client.go
или src/server/main.go
.
Этот проект легко развернуть с помощью Docker. Используя Docker Compose, вы можете быстро настроить сервер gRPC вместе с экземпляром Redis для кэширования. Чтобы начать, выполните следующие действия.
- Docker и Docker Compose установлены на вашей локальной машине.
-
Склонируйте репозиторий:
git clone https://github.com/Pat0sya/Golang-Proxy-Youtube.git cd Golang-Proxy-Server
-
Старт сервиса:
Запустите следующую команду в корневом каталоге проекта, чтобы собрать и запустить сервис:
docker-compose up --build
- Эта команда создает образ Docker для сервера gRPC и настраивает контейнер Redis.
- Сервер gRPC будет прослушивать локальный хост:
50051
, а Redis будет доступен на локальном хосте:6379
.
-
Остановка сервиса:
Для остановки контейнера, используйте:
docker-compose down