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