Общим вариантом использования AWS S3 и CloudFront является предоставление личного контента. Обычным решением является использование подписанных URL CloudFront для доступа к приватным файлам, хранящимся с помощью S3.
Однако генерация этих URL-адресов сопряжена с затратами: вычисление RSA-подписи любого заданного URL-адреса с использованием закрытого ключа. Для Python (или boto
, AWS Python SDK) для этой задачи используется библиотека rsa
(https://pypi.python.org/pypi/rsa). На моем последнем MBB 2014 года требуется около 25 мс на вычисление с 2048-битным ключом.
Эта стоимость потенциально влияет на масштабируемость приложения, использующего этот подход для авторизации доступа к частному контенту через CloudFront. Представьте, что несколько клиентов запрашивают доступ к нескольким файлам часто при 25 ~ 30 мс /req.
Мне кажется, что очень мало можно улучшить для самого вычисления подписи, хотя упомянутая выше библиотека rsa
была обновлена почти 1,5 года назад. Интересно, есть ли другие методы или проекты, которые могут оптимизировать производительность этого процесса для достижения более высокой масштабируемости. Или нам просто нужно бросить больше оборудования и попытаться решить его грубостью?
Одна оптимизация может заключаться в том, чтобы конечная точка API принимала несколько подписок на каждый запрос и возвращала подписанные URL-адреса навалом, а не обрабатывала их отдельно в отдельных запросах, но общее время, необходимое для вычисления всех этих подписей, все еще существует.