Я использую веб-сервер (apache, но я не думаю, что есть разница), который обслуживает множество запросов к мобильным устройствам (сотни в секунду). Сервер представляет собой смесь чистого веб-сервера с сервером переднего плана для сервера приложений J2EE (подключение через что-то вроде AJP).
Я заметил, что мне регулярно приходится увеличивать количество рабочих Apache, чтобы не отставать от количества запросов. И когда начинает возникать узкое место, я вижу, что большое количество (~ 90%) рабочих заняты «записью клиенту» и «закрытием соединения».
Я так понимаю, это нормально. Учитывая, что клиенты находятся на более медленном канале, он будет задерживать воркера Apache до тех пор, пока он не сможет обработать отдельный клиентский запрос. Но мне было интересно, есть ли выделенная система, ч / б или ПО, которая может буферизовать трафик как по запросу /, так и по ответу. Я слышал обо всем этом оборудовании для «ускорения трафика», но я действительно не знаю, с чего начать искать тот, который будет делать именно это.
Спасибо!
Попробуйте установить Keepalive Off
в вашей конфигурации Apache Vhost.
Иногда мобильные соединения проксируются сервером, который искусственно удерживает соединения открытыми, пока они переписывают пакеты, так что мобильный пользователь получает пакеты ACK быстрее, чем сервер фактически их подтверждал.
Это хитро, но иногда мобильные сети - зло.
Поскольку вы упомянули оборудование, вы можете захотеть взглянуть на что-то вроде BigIP от F5, которое может иметь огромное значение в таких ситуациях. Он завершит эти мобильные (и другие) клиентские подключения, спулирует контент и оптимизирует внутренние потоки. Хотя это дорогое удовольствие.
Еще одна хитрость с мобильными клиентами заключается в том, что они часто теряют пакеты из-за неидеального уровня сигнала, а не из-за перегрузки канала. Это приводит к отключению стека TCP / IP, поэтому скорость передачи данных может быть ужасной. BigIP также может помочь в подобных ситуациях, так что, возможно, стоит изучить его.
На фронте с открытым исходным кодом вы можете рассмотреть возможность использования nginx или другого прокси-сервера асинхронного ввода-вывода для защиты вашей системы и, возможно, немного буферизировать эти соединения. Вероятно, это хороший первый шаг, чтобы попробовать - вы можете включить буферизацию прокси на nginx, так что эффект будет заключаться в разгрузке подключений к nginx, а не к apache и вашим динамическим приложениям, стоящим за ним.