Методы повышения скорости транзакций

Lighttpd, nginx и другие используют ряд методов для обеспечения максимальной производительности приложений, таких как AIO, sendfile, MMIO, кэширование и epoll, а также структуры данных без блокировки.

Мой коллега и я написали небольшой сервер приложений, который использует многие из этих методов, а также может обслуживать статические файлы. Поэтому мы протестировали его с помощью Apache Bench и сравнили наши с lighttpd и nginx и, по крайней мере, сравнялись по производительности со статическим содержимым для файлов размером от 100 байт до 1 КБ.

Однако, когда мы сравниваем скорость транзакций для тех же статических файлов с G-WAN, G-WAN намного впереди.

Я знаю, что этот вопрос может быть немного субъективным, но какие приемы, помимо очевидных, которые я упомянул, мог бы использовать Пьер Готье в GWAN, что позволило бы ему достичь таких поразительных результатов?


person hookenz    schedule 16.09.2012    source источник


Ответы (2)


Следя за сервером G-WAN в течение многих лет, я прочитал (много) докладов, посвященных этому вопросу, на старом форуме G-WAN.

Насколько я помню, неоднократно обращались к программе:

  1. архитектура (конкретные сравнения проводились с nginx, lighty и cherokee)
  2. реализация (как было выполнено общее ветвление, разбор запроса и построение ответа)
  3. бережливый общий путь (путь, по которому идут все типы запросов: динамические, статические, обработчики)

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

Со временем, поскольку G-WAN, кажется, объединяет все больше и больше функций (поддержка сценариев C#, обратный прокси-сервер и балансировщик нагрузки ожидаются в следующей версии), кажется, что эти 3 пункта выше становятся все более и более важными.

Вероятно, поэтому каждая новая версия G-WAN стремится быть быстрее предыдущей: чем больше работы вы выполняете, тем больше лишнего жира необходимо устранить, потому что его стоимость становится выше. И, как и в случае с гоночным автомобилем или самолетом, это постепенный процесс, один требует большего от другого.

Если вы ищете «секрет» скорости G-WAN, то я думаю, что это ключевой момент. Но если вам нужны подробности, вам следует поговорить напрямую с автором G-WAN.

person Karl    schedule 19.09.2012
comment
Дизайн — самое очевидное. Однако последующее тестирование показывает, что загрузка моего процессора составляет около 30%. Узким местом кажется сетевая карта или ядро. GWAN по-прежнему превосходит то, что у нас есть. Существуют ли какие-то специальные приемы инициализации, связанные с передачей пакетов через сетевую карту? - person hookenz; 24.09.2012
comment
Если бы узким местом было ядро, то G-WAN не мог бы быть быстрее других. Загрузка ЦП G-WAN ниже, потому что его код user-mode (намного) быстрее. Сервлет hello.c не касается диска, поэтому ядро ​​не задействуется для загрузки файла — и здесь также G-WAN быстрее, чем модуль nginx (который, в отличие от сервлетов G-WAN, НЕ загружается динамически, поэтому у него должно быть преимущество). Более быстрый, компактный код и лучшая архитектура программы. Это все, что касается G-WAN. - person Gil; 30.10.2012

Ознакомьтесь с хронологией G-WAN. Обновление от 8 августа 2011 г. может дать вам представление о том, что он использует.

Хронология G-WAN

Пьер упомянул, что G-WAN использует свое хранилище ключей и значений без ожидания для основных функций G-WAN. Что дает ему большую скорость, поскольку блокировки не используются.

Он также использует технику, вдохновленную Лоренцем Водяным колесом, для обработки нитей. Я не уверен, как это работает, но он сказал, что это позволяет G-WAN работать быстрее во всех возможных случаях.

person Richard Heath    schedule 25.09.2012
comment
Правильно, хранилище KV используется для списков, таких как виртуальные хосты и многоязычные сервлеты, в то время как водяное колесо Лоренца — это то, как архитектура организована для работы с рабочими потоками. Дело в том, что Waterwheel динамически настраивается под нагрузку, чтобы обеспечить максимально возможную реакцию, несмотря на изменяющиеся условия нагрузки. - person Gil; 30.10.2012
comment
За исключением того, что для обслуживания статических страниц не нужно касаться хранилища ключей/значений. Если только он не использует его как кеш. Кроме того, я сомневаюсь, что он быстрее, чем mdb. На самом деле, если вы посмотрите, что такое водяное колесо Лоренца, это, по сути, означает случайное. Я предполагаю, что он придумывает какой-то жаргон, который звучит хорошо, но на самом деле это не то, что он делает. - person hookenz; 11.12.2012
comment
Можете ли вы доказать, что mdb быстрее, чем магазин G-WAN KV? Водяное колесо Лоренца не случайно. Еще одна концепция — чувствительность к начальному состоянию. Это может быть применено к ядрам в качестве начального условия. Совершенно иначе алгоритм будет работать при использовании 1,2,4... ядер. Я предполагаю, что мы просто не знаем, как он на самом деле это делает, поэтому это выглядит бессмысленно. - person Richard Heath; 11.12.2012