Сколько долгоживущих одновременных сеансов TCP является разумным?

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

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

Конечно, я мог бы отставать от балансировщика нагрузки или покупать более качественные серверы с большим количеством ядер, однако на практике и в качестве стандартного в отрасли количество одновременных долгоживущих сеансов TCP считается «хорошим» числом на таком сервере, как этот Я описываю? Как я могу сказать, что количество одновременных соединений, которые я получил, "достаточно хорошо"?

Всего 1 ответ


К сожалению, нет магического числа, чтобы ответить на ваш вопрос, но у меня есть некоторые соображения, чтобы вы могли найти свой номер:

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

Имейте в виду, что даже при наличии одновременных подключений, многоядерных процессоров и т. Д. Ответ будет поступать из одной и той же сети и получить бутылочную горлышко. Поэтому я советую вам выполнить нагрузочную и нагрузочную проверку своей архитектуры, чтобы найти приемлемый предел задержки.


TL; DR: нет волшебного ответа, вам нужно выполнить нагрузку и стресс-тест, чтобы найти его.


Есть идеи?

10000