Как сделать HTTP-запросы в Rails, пока все еще обслуживание многих запросов в минуту?
-
21-12-2019 - |
Вопрос
Я пытаюсь масштабировать сервер приложений для обработки более 20 000 запросов в минуту.
Когда я стресс-тестируйте запросы, большинство запросов легко обрабатывают 20 000 об / мин или более.
Но, запросы, которые необходимо сделать внешний HTTP-запрос (например, вход в Facebook), принесите сервер до ползания (3000 об / мин).
Я концептуально понимаю ограничения моей нынешней среды - 3 сбалансированных нагрузки серверов с 4 рабочими с единорогом на сервер могут только обрабатывать 12 запросов одновременно, даже если все они ждут на http-запроса.
Каковы мои варианты масштабирования это лучше? Я хотел бы обработать еще много соединений одновременно.
Возможные решения, насколько я понимаю:
-
Brute Force: используйте больше рабочих единорога (т. Е. Больше оперативных операций) и больше серверов.
-
Выдвиньте все операции блокировки в фоновые / рабочие процессы, чтобы освободить веб-процессы. Клиенты должны периодически опросить, чтобы найти, когда их запрос завершен.
-
Переместите в Puma вместо единорога (и, вероятно, рубин из МРТ), чтобы я мог использовать нити вместо процессов - которые могут (??) улучшить использование памяти на соединение, и поэтому разрешить количество работники будут увеличены.
Принципиально, что я ищу: есть ли лучший способ увеличить количество заблокированных / очередных запросов, который может обрабатывать один работник, чтобы я мог увеличить количество подключений на сервер?
Например, я слышал обсуждение использования тонкой с EventMachine. Откроется ли это возможности для работника рельсов, которые могут поставить веб-запрос, он в настоящее время работает (потому что один ждет на внешнем сервере), а затем подбирает другой запрос во время ожидания? Если это так, это стоит достойная проспект, чтобы преследовать производительность по сравнению с единорогом и PUMA? (Сильно зависит от действий времени выполнения приложения?)
Решение
Unicorn - это однопотоковое, многопроцессное синхронное приложение.Это не хорошее совпадение для такого рода обработки.
Звучит как ваше приложение, связано с включением.Это утверждает, что для ориентированного на события демон для обработки ваших запросов.
Я бы порекомендовал попробовать eventMachine и EM-HTTP-запрос и em-http-сервер .