Улучшение производительности веб-сервера - PullRequest
1 голос
/ 09 февраля 2011

Мне недавно задали этот вопрос в интервью.Это был открытый вопрос о дизайне веб-сервера.Вот суть вопроса.

"Очереди нередко становятся узким местом для приложений, таких как веб-серверы. Какие изменения вы внесете в классы обработки потоков, пул потоков и очереди для улучшения любого узкого места?"

Я указалтакие меры, как 1. Управление пулом потоков 2. Использование буферов и пакетов в очередях.

Но интервьюер не был полностью удовлетворен.Какие все меры дизайна я должен был упомянуть?Очевидно, это открытый вопрос, поэтому ответ не должен зависеть от базовой технологии, такой как Spring, J2EE и т. Д.

Если есть хорошее руководство по проектированию сервера, поделитесь им.

Ответы [ 4 ]

1 голос
/ 09 февраля 2011

Случайные ответы:

  1. Фактически измерьте производительность всей системы, чтобы выявить узкие места, прежде чем случайно вносить изменения в код.FTW!

  2. Используйте порты завершения ввода-вывода (Windows), «epoll» или «kevent» (Linux).

  3. Рассмотрим различные очереди с приоритетами.Для запросов, которые, как известно, имеют быстрое время ответа, поместите их в одну очередь.Для запросов, требующих более длинных и более дорогих ответов (например, длинные транзакции базы данных), поместите эти запросы в другую очередь.Попробуйте уделить больше внимания очереди с быстрыми запросами.(Подумайте: экспресс-заказ в продуктовом магазине для тех, у кого не более 12 предметов).

1 голос
/ 09 февраля 2011

Я не могу удержаться от публикации этого сообщения:

http://www.engineerguy.com/videos/video-lines.htm

Основная проблема с очередью состоит в том, что она блокирует официантов глубже в очереди.Таким образом, проект должен либо быть настолько быстрым, что очереди никогда не заполняются, либо должен учитывать заполнение очередей.Также обратите внимание на недавние сообщения о буферной загрузке, которые опубликовал Джим Геттис:

http://gettys.wordpress.com/category/bufferbloat/

Там, где буферизация IP-пакетов в современных маршрутизаторах приводит к серьезным ошибкам TCP (и это очень косвенно влияет на очередитеория внутри веб-серверов).

0 голосов
/ 13 октября 2012

Я бы увеличил количество очередей и потоков, чтобы снизить задержку. (и всегда иметь один поток в очереди)

0 голосов
/ 09 февраля 2011

Существует шаблон проектирования под названием Socket-Wheel, который используется на современных веб-серверах для обработки очередей.

...