Статьи

Остерегайтесь G-Wan Snakeoil

За последние несколько недель я довольно много слышал о «сервере приложений G-WAN». Первоначально это был вопрос Serverfault, который заставил меня задуматься «WTF» ( http://serverfault.com/questions/445835/virtual-host-on-g-wan )

Я взглянул на их сайт и подумал: «Это довольно безумные претензии». Они также являются дерьмом, которое вы, как правило, видите, когда предполагаемая аудитория — это тот, кто абсолютно не имеет ни малейшего понятия о масштабируемости или готовности к производству. Вы знаете, менеджеры.

 — Весьма хорошо подытожено в этом комментарии:   GWAN не предназначен для того, чтобы быть надежным веб-сервером, он предназначен для исключительно высокой производительности в надуманных и фантастических тестах, поэтому PHB потребуют от ИТ-команды использовать его и покупать поддержку …Chris S ♦ 19 часов назад

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

Многие страницы на сайте относятся к тестированию серверов. Я действительно не заинтересован в этом, не здесь, во всяком случае. Вы поймете, почему через некоторое время.

Двигаясь дальше, я решил, что мне нужно хотя бы * загрузить * сервер и покопаться.  

Итак, я скачал файл tar.bz2, содержащий сервер (Bzip2? Полагаю, им было бы интересно, чтобы он * выглядел * как можно меньше).

Это то, что я распаковал. 

http://pastebin.com/E2t0vbwi

Я немного напуган, если честно.

Одна из вещей, которые я * люблю * в Apache — это возможность загружать исходный код и разбираться со старым добрым носом. Мне редко * нужно *, но приятно иметь такую ​​возможность. Самая большая проблема, с которой я сталкиваюсь с приложениями с закрытым исходным кодом, заключается в том, что это невозможно. Мы просто должны верить, что они не оставили там никаких эксплойтов о буфере с большой задницей, или что код также не содержит ssh-демона, или нет бэкдора, который бы отправлял все мои нажатия клавиш в $ unfriendly_nation. 

Это кажется невозможным из-за этого gwan: исполняемый 64-разрядный LSB ELF, x86-64, версия 1 (GNU / Linux), статически связанный, удаленный

Итак, вернемся к этому дереву каталогов .. 

Там есть таинственный каталог « 0.0.0.0_8080 », содержащий * еще * материал. Похоже, это какая-то конфигурация виртуального хоста. 

Интересный способ сделать это, но это немного эзотерично. 

Внутри этого каталога есть еще более странный каталог « # 0.0.0.0 », который звучит совершенно избыточно, потому что следующий уровень уже не определил IP-адрес? 

— Очевидно, каталог 2-го уровня предназначен для определения виртуальных хостов на слушателе. Что ж, это * почти * имеет смысл, но почему бы просто не использовать файл конфигурации, такой как Apache, Nginx, Lighty или любой другой проклятый сервер, Ever. 

Ну что ж, это странно. 

Внутри этого есть ./ csp , ./ www , ./ обработчики и ./ logs .

— Из их README.txt:

/csp ........ G-WAN C/C++ and Objective-C/C++ examples
/www ........ G-WAN web server's 'root' directory
/handlers ... G-WAN web server's handler sample
/logs ....... G-WAN web server's access/error log files

ХОРОШО. Так в чем же разница между csp и обработчиком? 

Ну, внутри csp есть файл с именем hello.c, который выглядит как * очень * простой пример hello world. Честно говоря, я немного устал от примеров Hello World, так что давайте посмотрим, смогу ли я создать собственную структуру каталогов и создать страницу FizzBuzz? Таким образом, у меня будет некоторое представление о том, какова эта идея, и смогу ли я когда-нибудь ее использовать.

«Обработчики» — странный. Я получаю, что .csp содержит файлы, такие как hello.c, которые кажутся наиболее близкими к контроллерам MVC. Может быть. 

Хендлеры волнуются, на самом деле. файл main_hello.c__ содержит некоторый вид обработчика HTTP, назначая функции c процессам, необходимым для создания запроса HTTP. Почему я забочусь о создании HTTP-запроса? Меня это волнует? Нужно ли мне * написать * специальный обработчик, чтобы просто передать его в fizzbuzz.c?

Конечно, есть вся документация, которая подскажет мне, что делать. Однако есть коммерческая поддержка, которая начинается с 149 единиц общей валюты (их страница показывает швейцарские франки, но я не могу изменить это).

Так что «Любитель» платит 149 GCU. Кажется крутым, большинство других хобби-программ бесплатно. 

Консультанты платят 1499 GCU. 

Предприятия платят в 10 раз больше. 

Если вам нужна поддержка 24×7, вы должны заплатить 149 999,00 GCU. 

Да поможет тебе Бог, если ты тоже хочешь пометить это белым цветом, так как за это тратятся дополнительные 199 999,00 GCU. Вот это да.  

За дополнительные 7999 GCU вы можете заключить соглашение об условном депонировании кода, что означает, что вы получите зашифрованную версию их исходного кода, и если они обанкротятся, они, надеюсь, дадут вам ключ.

Я думаю, что было бы гораздо лучше использовать деньги, чтобы заплатить за условное депонирование кода, а затем использовать 250 000 копий, которые вы сохранили на экземплярах Amazon GPU, чтобы взломать ключ. Но там мы идем. Вы, вероятно, обнаружите, что они использовали Ultra Super Duper Mega шифрование, которое было также написано дома.   

Вернемся к теме. Ну, почти.

Я только что нашел это довольно смелое заявление, спрятанное в их FAQ (http://gwan.com/faq#license):

«У G-WAN никогда не было нарушений безопасности с первого дня в июне 2009 года (другие серверы не могут поддерживать такое же требование)».

Я подозреваю, что есть одна причина для них, чтобы сделать это заявление. Никто не использует это.

В качестве альтернативы, возможно, они существуют, но никто их не нашел, потому что мы не можем посмотреть на исходный код и найти их.

G-WAN был создан для переноса приложений для настольных компьютеров в Интернет, поскольку не было ни одного сервера веб-приложений, способного выполнить эту работу.

Eugh. 

Есть два способа сделать настольные приложения более доступными.  

1) Перепишите эту чертову штуку, не портируйте ее.

2) Используйте что-то вроде Citrix XenApp, чтобы опубликовать это.  

Я не одобряю концепцию написания сервера для «портирования» настольного приложения. В этом понятии есть что-то очень странное. 

Несмотря на небольшую площадь, G-WAN является универсальным решением, поскольку для связи с другими серверами (FastCGI, SCGI и т. Д.) Требуется время (увеличение задержки) и потеря ресурсов ЦП и ОЗУ. Помните, что наша цель здесь заключается в использовании оптимального решения с малыми задержками и ресурсосбережения. Вот почему G-WAN является:

веб сервер

Приложение. сервер

Кеш-сервер

Сервер хранилища ключей-значений

Обратный прокси-сервер и сервер эластичной балансировки нагрузки

То, что когда-либо случалось с философией UNIX  : делать что-то одно и делать это хорошо, а затем иметь несколько слабо связанных серверов, выполняющих разные задачи. Очевидно, не рассматривается здесь.  

Я предпочел бы иметь отдельный веб-сервер, отдельный сервер приложений, соединить их через прокси-сервер HTTP, затем подключиться к кешу с помощью простого текстового протокола и сервера ключ / значение через http или аналогичный механизм. 

Нет, мне не нравится идея иметь все в одной коробке. Это напрашивается на шалость.

Ох, и их примеры странные. Я нашел этот фрагмент раньше, и он заставил меня сказать: «А?»

// but we don't want to display "%20" for each space character
   {
      char *s = szName, *d = s;
      while(*s)
      {
         if(s[0] == '%' && s[1] == '2' && s[2] == '0') // escaped space?
         {
            s += 3;     // pass escaped space
            *d++ = ' '; // translate it into the real thing
            continue;   // loop
         }
         
         *d++ = *s++; // copy other characters
      }
      *d = 0; // close zero-terminated string
   }

Я не знаю о вас, но я, вероятно, просто вызову urldecode () и покончу с этим.

Ох, и это.

http://pastebin.com/zVnPKzuq

Templating. Слышал об этом? MVC? Слышал об этом? Очевидно, нет.

Правильно. Вернуться к попытке сделать приложение Fizzbuzz?

У меня была короткая попытка, и когда я перезапустил сервер, я получил это:

Никаких логов, ничего на stderr, ничего. Ровно, ребята. Я наполовину ожидал HTTP 402 — Требуется оплата;)

— Во второй раз, когда я попытался, я получил это столь же загадочное сообщение об ошибке

Signal        : 11:Address not mapped to object
Signal src    : 1:SEGV_MAPERR
errno         : 0
Thread        : 0
Code   Pointer: 000000445659 (module:./gwan, function:??, line:0)
Access Address: 000000000001
Registers     : EAX=000004113418 CS=00000033 EIP=000000445659 EFLGS=000000010246
                EBX=000004113418 SS=08201c24 ESP=000008801a00 EBP=000000000000
                ECX=0000004457e0 DS=08201c24 ESI=000000000001 FS=00000033
                EDX=000000000000 ES=08201c24 EDI=000004113418 CS=00000033
Module         :Function        :Line # PgrmCntr(EIP)  RetAddress  FramePtr(EBP)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Этот бит эпичен. «Функция ?? линия: 0 »- можно подумать, он знает, куда это шатало. 

Напомню, что когда я облажался в ruby ​​или python, переводчик говорит мне, где это не удалось. Мне это нравится, это значительно облегчает отладку огромного приложения. 

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

Я вернусь к написанию на * реальных * языках, разработанных с учетом разработки веб-приложений. 

Я просто не могу серьезно относиться к разработке приложений, если нет встроенного MVC.  

Мои выводы таковы: 

G-WAN — это поле Gentoo сервера приложений.

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

Это также странно во всех отношениях, о которых я говорил выше.  

О, и даже не подумайте об использовании его в производственной среде. Если вы * действительно * дошли до того, что не можете настроить Apache, Nginx или Lighty, то есть другие решения, но G-Wan не является одним из них.

Есть Varnish, и есть HAProxy, и есть Pound, и есть другие способы ускорить ваше приложение, но я не вижу никакой выгоды от переписывания в C и использования несколько неуклюжего API с причудливым отсутствием отладочной информации. 

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

О, и я подозреваю, что если вы запустите G-WAN на Gentoo, вы найдете одну из трех вещей.

  1. Вы бы создали сверхмассивную черную дыру.
  2. Все бы замедлилось (говоря релятивистски).
  3. Никто бы не трахнулся. 

Вероятно, последний.