Я тестирую конечную точку приложения flask и измеряю производительность на одном компьютере. Эта конкретная конечная точка имеет декоратор с именем decrypt_request
. Реализация этого декоратора выглядит следующим образом:
1. Read X-Session-Key header (encrypted by public key)
2. Import RSA key
3. Create a cryptor and decrypt the session key (RSA)
4. Read data from the request body (which is encrypted by the above session key)
5. Decrypt the request body using the session key (AES)
Конечная точка выглядит примерно так:
@app.route('/test', methods=['POST'])
@decrypt_request
def view_function():
# do something here
После выполнения какого-либо нагрузочного теста я обнаружил, что средний RPS составляет около 50 ( что, безусловно, не хорошо, но аппаратные ресурсы пока ограничены). Одна вещь, которую я сделал, была отключить декоратор, и я обнаружил огромное увеличение RPS (приземляется около ~ 500 RPS). Наконец, я только что закомментировал операции ключа publi c от декоратора, то есть: я ожидаю чистый ключ сеанса в заголовке и просто выполняю операцию AES. Опять RPS приземляется так же около 500 RPS. Выявлено, что ключевые операции publi c работают очень медленно. Библиотека Pycryptodome
, которую я использую, сообщает:
PyCryptodome не является оболочкой для отдельной библиотеки C, такой как OpenSSL. В максимально возможной степени алгоритмы реализованы в чистом виде Python. Только части, которые чрезвычайно важны для производительности (например, блочные шифры), реализованы в виде C расширений.
И я предполагаю, что это является реальной причиной очень медленных операций. Есть ли способ сделать эти операции быстрыми?