Microsoft Azure, привязки реле и максимальный параллелизм
Я установил ретранслятор ServiceBus с Microsoft Azure. Я подключаюсь к этому с помощью HTTP-сервера, обрабатывающего входящие запросы GET и POST, попадающие в Relay.
Теперь это работает просто отлично. Моя проблема, однако, заключается в том, что максимальный параллелизм, который я могу получить, составляет 2 одновременных запроса, т.е. мой бэкэнд будет когда-либо получать только 2 запроса одновременно, если есть больше запросов, они будут остановлены до тех пор, пока предыдущие запросы не будут обработаны и завершены. Я пытался увеличить параллелизм с поведением службы, но это, кажется, игнорируется, но снижение параллелизма до 1, похоже, работает с настройками. Так что я предполагаю, что это какое-то ограничение, накладываемое действительным реле!? Но может ли это быть на самом деле? Только 2? В моем сценарии это делает реле непригодным для использования, поскольку запросы должны выполнять длительную обработку (2 секунды), которая не может быть отложена и требует немедленного ответа. Поэтому я не могу просто сохранить запрос и обработать его как очередь.
Как я могу масштабировать это? Добавить больше реле и подключить к ним все?
1 ответ
Вам нужно будет установить ServicePointManager.DefaultConnectionLimit
к соответствующему значению, чтобы позволить больше одновременных соединений. Попробуйте сделать это как можно раньше в коде приложения:
ServicePointManager.DefaultConnectionLimit = int.MaxValue;
Это позволит вашему приложению открывать неограниченное (на практике) количество одновременных HTTP-соединений.
Ограничение по умолчанию связано с тем, как изначально был разработан протокол HTTP.
Следующая цитата из раздела 8.1.4 RFC HTTP/1.1:
Однопользовательскому клиенту НЕ СЛЕДУЕТ поддерживать более двух подключений к любому серверу или прокси-серверу [...] Эти рекомендации предназначены для сокращения времени ответа HTTP и предотвращения перегрузки.
Следовательно, совместимый клиент обычно должен убедиться, что он никогда не имеет более двух открытых подключений к одному серверу.
Однако это изменилось, и вы можете изменить это поведение. Следующая цитата взята из раздела 6.4 RFC 7230, который является обновлением протокола HTTP/1.1:
Предыдущие версии HTTP давали определенное количество соединений в качестве предела, но это оказалось непрактичным для многих приложений. В результате эта спецификация не требует определенного максимального количества соединений, но вместо этого поощряет клиентов быть консервативными при открытии нескольких соединений.