Как масштабировать приложение Twisted, связанное с процессором? - PullRequest
1 голос
/ 03 апреля 2019

Я работаю над измененным веб-приложением, которое загружает файлы и шифрует их, возвращая пользователю URL-адрес + ключ.

Мне было поручено масштабировать это приложение. В момент, когда имеется более 3-4 одновременных запросов на загрузку, производительность значительно снижается.

Я не эксперт Twisted, но я предполагаю, что это связано с тем, что он работает в одном процессе Python, будучи приложением с высоким процессором и GIL?

Как я могу пойти на это?

Если бы это был другой фреймворк, такой как Flask, я бы просто поставил перед ним uwsgi и масштабировал количество процессов. Будет ли что-то подобное работать для Twisted, и если да, то какие инструменты обычно используются для этого?

1 Ответ

0 голосов
/ 03 апреля 2019

Если вы думаете, что можете бросить uwsgi перед приложением, я полагаю, это довольно близко к общему доступу.Таким образом, вы можете запускать несколько экземпляров программы и получать производительность ядра от каждого.

Есть пара действительно очевидных вариантов, как именно запустить несколько экземпляров.Вы могли бы иметь балансировщик нагрузки впереди.Вы могли бы иметь процессы совместно использовать порт прослушивания.Вероятно, есть и другие возможности.

Поскольку ваш протокол выглядит как HTTP, должен быть применим любой старый HTTP-балансировщик нагрузки.Он не обязательно должен быть основан на Twisted или Python (хотя, безусловно, это может быть).

Если вы предпочитаете использовать порт для прослушивания, Twisted имеет API для передачи файловых дескрипторов между процессами (IReactorSocket) и длязапуск новых процессов, которые наследуют дескриптор файла от родителя (IReactorProcess).

...