Django Оптимизация загрузки AWS S3

Я работаю над проектом django + DRF, в котором есть приложение для загрузки и скачивания медиа файлов с AWS S3 (приложение является чем-то вроде прокси, используемое для того, чтобы не иметь доступа к фронтенду для загрузки изображений непосредственно с AWS S3). Я заметил, что мои запросы на скачивание работают не очень быстро (500мс +/- 100мс), и в производстве это, вероятно, будет проблемой, поэтому мой вопрос заключается в следующем: "Is there a way to make these requests faster or separate download logic to some async microservice or multiprocess task? What is the best practice?"

Сервис, который загружает изображения для меня в текущем состоянии проекта (для контекста):


# media_app/services/download/image.py
class ImageDownloadService(FileDownloadServiceBase):
    model = Image


# media_app/services/download/base.py
class FileDownloadServiceBase:
    model = ...

    def __init__(self, instance: str) -> None:
        self.instance = instance

    def _get_file(self, presigned_url):
        response = requests.get(url=presigned_url, stream=True)
        return response

    def download(self) -> Tuple[file_data, status_code]:
        s3 = boto3.resource(
            service_name='s3',
            aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
            aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
            region_name=settings.AWS_S3_REGION_NAME,
        )
        url = s3.meta.client.generate_presigned_url(
            ClientMethod="get_object", ExpiresIn=3600,
            Params={
                "Bucket": settings.AWS_STORAGE_BUCKET_NAME,
                "Key": f'media/public/{self.instance.file_name}',
            },
        )
        response = self._get_file(url)
        return response.content, response.status_code
Вернуться на верх