G-WAN: сервер приложений на чистом C

G-WAN — бесплатный (но не open source) скоростной web сервер и сервер приложений. Особенность в том, что сервлеты пишутся на ANSI C, сервер их компилирует и выполняет.

Чтобы запустить, на 64 битном Debian/Ubuntu необходимы пакеты совместимости с 32х битными исполняемыми файлами:

sudo apt-get -y install ia32-libs libc6-dev-i386
sudo apt-get -y install libc6-dev


Для работы G-WAN также понадобятся заголовочные файлы библиотеки C:

sudo apt-get install libc6-dev


Скачиваем архив, распаковываем, запускаем:

wget http://gwan.com/archives/gwan_linux.tar.bz2 
tar -xjf gwan_linux.tar.bz2
cd gwan
sudo ./gwan


В G-WAN 2.9.4 были проблемы с совместимостью с файловой системой XFS (выпадал с сообщением no listener), так что на одной машине пришлось смонтировать диск 10 Мб в памяти и скопировать G-WAN туда:

mount -t tmpfs -o size=10M tmpfs /mnt


В директории gwan мы видим структуру директорий вида:

127.0.0.1_8080 > #127.0.0.1 > csp
                              handlers
                              _logs
                              www


Первая директория — IP на котором работает сервис (можно сменить, например, 0.0.0.0), вложенные директории — ip адрес хоста (начинается с #) или виртуальные хосты, начинающиеся с $), например:

/ gwan / 192.168.0.1_80 / #192.168.0.1 (корневой хост)
                        / $mtaalamu.ru (виртуальный хост)


В директории csp храняться примеры приложений на C, например, вот такая форма контактов:

xx.xx.xx.xx:8080/csp?contact



Или генерация графиков:

xx.xx.xx.xx:8080/csp?charts



Особое место G-WAN может занять для отдачи статического контента, т.к. делает это даже быстрее Cherokee. Навскидку, производительность оценивалась на виртуальной машине Xen с Debian 6 x86, 128 мб. памяти и одним ядром от Intel Core i7 CPU 930 2.80Ггц. Для тестов использовал Apache Benchmark (ab) из пакета apache2-utils.

G-WAN 2.9.4 с Keep-Alive и включенными логами:

ab -k -c 200 -t 60 -n 10000000 http://127.0.0.1:8080/index.html


Requests per second: 19219.23 [#/sec] (mean)

G-WAN 2.9.4 с Keep-Alive и выключенными логами:

ab -k -c 200 -t 60 -n 10000000 http://127.0.0.1:8080/index.html


Requests per second: 19408.07 [#/sec] (mean)

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

lighttpd 1.4.28 (Keep-Alive включен по-умолчанию, логи выключены, число рабочих процессов увеличено до 4 server.max-worker=4):

ab -k -c 200 -t 60 -n 10000000 http://127.0.0.1/index.html


Requests per second: 11127.82 [#/sec] (mean)

Cherokee 1.0.8 (Keep-Alive включен по-умолчанию, логи выключены):

ab -k -c 200 -t 60 -n 10000000 http://127.0.0.1/index.html


Requests per second: 15625.93 [#/sec] (mean)

Так что G-WAN впереди. Сама концепция мне очень близка. Зачем тратить ресурсы на PHP, потом его кешировать, городить компиляторы и прочее, если можно написать сразу на C?

Еще бенчмарк:

nbonvin.wordpress.com/2011/03/24/serving-small-static-files-which-server-to-use/

Введение:

gwan.ch/archives/gwan_linux.pdf

Комментарии (10)

RSS свернуть / развернуть
+
+1
Сервлеты на C — круть, конечно. Куды там нашей Java. Но на C эффективно писать еще уметь надо, таких спецов мало. Ну, а PHP на этом фоне и вовсе выглядит детской игрушкой. Каковой, в принципе, и является .
avatar

yababay

  • 05 сентября 2011, 22:23
+
0
Да уж, быстрые решения приводят потом к головной боли в виде тормозного php даже через fastcgi, проблем с безопасностью. Кстати, даже тесты после сборки php допускают наличие некоторого количества ошибок, кочующих из версии в версию

В итоге вернемся к тому от чего старались уйти — к C.
avatar

Sergei_T

  • 05 сентября 2011, 22:37
+
0
Что кстати уже было в виде CGI скриптов
avatar

Sergei_T

  • 05 сентября 2011, 22:39
+
0
Посмотрел сравнение серверов. Чё-то Apache-то вообще, мягко говоря, курит в сторонке…
avatar

yababay

  • 05 сентября 2011, 22:50
+
0
Кстати, согласно лицензионному соглашению Microsoft запрещено выкладывать бенчмарки
avatar

Sergei_T

  • 05 сентября 2011, 22:52
+
0
А что означает «сервер приложений»? Я вот никак не вкурю= ) То ли это обычный веб-сервер, или веб сервер со всякими CGI/FastCGI, mod_php и пр.?
avatar

durman

  • 06 сентября 2011, 17:09
+
0
сервер приложений — условно это если ты выполняешь приложения на стороне сервера, есть такая встроенная возможность. Например, cherokee — web сервер, потому что исполнение кода там делается через доп навороты — вроде fastcgi + php
avatar

Sergei_T

  • 06 сентября 2011, 17:19
+
0
В Java сервер приложений отличается от обыкновенной раздачи веб-страниц сложной интерактивностью и направленностью на решение какой-то задачи (gmail.com, например). При разработке таких веб-приложений используются сложные фреймворки (тот же GWT), которые позволяют максимально сосредоточиться на бизнес-логике, а не на том, почему страничка криво выглядит в Internet Explorer'e. При этом активно используются всевозможные реализации RPC. Признаком сервера приложений является и то, что каждое приложение является чем-то замкнутым, законченным и особым образом упаковывается по окончании разработки (war-архив). Этот архив выкладывается на сервер, там распаковывается и вписывается в общий контекст. Примеры серверов приложений — JBoss, GlassFish, с некоторой натяжкой — Tomcat.

Веб-сервер, просто поддерживающий cgi, php и даже сервлеты еще нельзя назвать сервером приложений.
avatar

yababay

  • 06 сентября 2011, 18:40
+
0
Думаю G-WAN с натяжкой можно
avatar

Sergei_T

  • 06 сентября 2011, 18:42
+
0
благодарю за хороший ответ, камрад! А то вздумалось мне думать, что любой сервер с cgi есть сервер приложений.
Словечко-то нынче модное
avatar

durman

  • 06 сентября 2011, 20:06

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.