recoder: (Default)
recoder ([personal profile] recoder) wrote2012-04-02 01:38 am
Entry tags:

С++ Web Services

Возникла идея в рабочей системе вообще отказаться от интерпретируемых языков. Статику отдавать через Apache, клиента сделать на статическом JavaScript, а динамику отдавать через FastCGI из своего C++ приложения в XML/JSON.

В теории идея выглядит вполне работоспособной. Однако мысль о том, что придётся переизобретать маленькую роту велосипедов, которые в Rails/Django вылизывались годами, меня очень смущает. Гугление уже существующих решений (и их обсуждений типа - раз два три четыре) дало такие примеры:

CppCMS: похоже, довольно полная библиотека для написания приложения. Всё как у взрослых: кое-какие routes, контроллеры, темплейты+views+шкуры и всё прочее. Немного смущает что, как и другие фреймворки, у них свои строки, массивы и прочие базовые классы. Но в целом - кажется приемлемо.

Wt: любопытная widget-ориентированная библиотека для написания веб-систем. Оригинальная, но уж очень самобытная. А к самобытным системам ни Dojo не прикрутишь, ни программистов потом не найдёшь. Плавали - знаем.

TreeFrog: похоже на попытку аккуратного портирования Rails на плюсы, но результат непонятный: проект молодой, документация почти несуществующая.

ffead: занятная штука, судя по всему написанная сумасшедшим Java-программистом, который почему-то начал писать на C++. Посмотреть конечно прикольно, но не брать же это в production.

CPP SERV: уже другие безумные Javaнцы переписывали на C++ - на этот раз servlets. Однако года три назад вылечились и бросили это дело.

Есть ещё кучка библиотек помельче для разработки мини-сервисов: Klone, PoCo, NanoGear, REST CGI. Но с ними опять придётся выстраивать собственно архитектуру с самого начала. А не хочется.

Выходит, особенного изобилия веб-приложений на C++ не наблюдается. И начинают закрадываться сомнения - может быть, миллионы мух не могут ошибаться, тысячи программистов уже пробежали этот марафон по граблям и разбрелись кто куда?

Вот, сижу теперь, думаю... Записываться в экстремалы с такой системой или плюнуть и откопать PHP?

coding

[identity profile] larubin.livejournal.com 2012-04-02 05:54 am (UTC)(link)
Имхо идея правильная.

Я вот только не понял, зачем тебе мегафреймворки для отдачи данных в ххмль/джсон?

[identity profile] vanxant.livejournal.com 2012-04-02 07:00 am (UTC)(link)
Так а задача какая?
Просто проверить параметры, взять данные из базы селектом и завернуть в json/html? Ну так в этом случае 80%-90% времени будет работать база, да и алгоритмы декорирования в том же пыхапе до блеска отлажены.
Или у вас там какая-то сложная математика, которую считать долго, и нужны какие-то хитрые алгоритмы? Ну и всё равно, джедаи в этом случае советуют считать на плюсах и складывать данные в базу в memory-таблицу. А отдавать апачу всё равно предназначенным для этого инструментом.

[identity profile] Андрей (from livejournal.com) 2012-04-02 07:54 am (UTC)(link)
Посмотрите на CAS от Rambler http://cas.havoc.ru/ на нем, вроде как, их почта работает (сам не смотрел, c++ - не мое =) )

[identity profile] netspyder.livejournal.com 2012-04-02 08:07 am (UTC)(link)
> Статику отдавать через Apache
если проект не маленький, можно посмотреть на связку NGinx+Apache/PHP или вообще NGinx+PHP-FPM.
я для интереса поднял связку NGinx+Apache+PHP-FPM, так он летает куда шустрее, чем на Apache+FastCGI, на котором живут остальные сайты.
а с последней - вынес статику (картинки статей) на паре вордпрессов в субдомен на NGinx, тоже весьма неплохо.

[identity profile] avnik.livejournal.com 2012-04-02 08:10 am (UTC)(link)
Апачь в описаной схеме лишний совсем.

[identity profile] netspyder.livejournal.com 2012-04-02 08:18 am (UTC)(link)
пардон, "поднял связку NGinx+Apache+PHP-FPM" читать "поднял связку NGinx+PHP-FPM" =)

[identity profile] avnik.livejournal.com 2012-04-02 08:37 am (UTC)(link)
Переходим к второму этапу ;)
Есть джанго/райлс/пирамида/whatever, нахрен нужен этот пхп вообще?

[identity profile] netspyder.livejournal.com 2012-04-02 08:50 am (UTC)(link)
ох и натрахался я с джанго, *простите за мой французский*))
с этими яйцами и прочими прелестями. 100500 раз объяснял этой скотине, этому жЫвотному, куда класть свои яйца. несколько раз он их пытался откладывать в разные места совершенно без каких-либо очевидных причин, а сколько велосипедов на эту тему, ухх. но починить таки удалось, каким-то телепатическим способом. =)
Ruby тоже веселая штука, милион версий, не дай Боже поставишь что-то поновее со старым - все, велосипед не едет. но тоже удалось полечить, указал в файле версии, которые подгружать. телепатия рулит))

[identity profile] avnik.livejournal.com 2012-04-02 08:56 am (UTC)(link)
И куда же оно у вас яйки складывало позвольте спросить?
Билдаут же обычно деревянный, кладет куда попросишь.

[identity profile] netspyder.livejournal.com 2012-04-02 09:10 am (UTC)(link)
и в /root и в /tmp и куда-то там еще. вы не поверите сколько раз вопрос о яйцах попадается в гугле)
PYTHON_EGG_CACHE
python-eggs
вот по этим словам можете поискать.
Edited 2012-04-02 09:12 (UTC)

[identity profile] avnik.livejournal.com 2012-04-02 09:13 am (UTC)(link)
не верю.

PS Впрочем допускаю, что делающий make install от рута идиот, потому что не осилил инструкцию даже до середины.

[identity profile] netspyder.livejournal.com 2012-04-02 09:19 am (UTC)(link)
делал не от рута. хотя это достаточно странно, весь софт на FreeBSD от рута ставится))

[identity profile] avnik.livejournal.com 2012-04-02 09:16 am (UTC)(link)
Погуглил. Мда, что блин люди не делают, чтоюы не пользоваться билдаутом.

[identity profile] netspyder.livejournal.com 2012-04-02 09:20 am (UTC)(link)
не силен в питоне, не знаю, что такое билдаут, пардон)
просто клиент попросил поставить такой велосипед, пришлось ставить))

[identity profile] avnik.livejournal.com 2012-04-02 09:38 am (UTC)(link)
Ну для питонизмов есть два традиционных способа:
1 -- virtualenv (типа чрута, но исключительно для интерпретатора -- влияет на его пути поиска, и яйцеустановку), бонус -- изоляция от "системных" питонопакетов
2 -- buildout -- строит песочницу с наполнением по формальному описанию, чем-то издалека похоже на bsd порты. Полной изоляции не делает, но может быть засунуто в virtualenv. Зато гарантирует возспроизводимость (особенно если ты прикопал за угол все скачаное в процессе).

Туториал по билдауту от автором джанги
http://jacobian.org/writing/django-apps-with-buildout/http://jacobian.org/writing/django-apps-with-buildout/
(впрочем телега тоже устарела, но как отправная точка сгодится)

http://buildout.org -- родная документация, которой хер знает сколько лет, внутри исходников она поактуальнее.

Если есть вопросы, могу ответить.

[identity profile] netspyder.livejournal.com 2012-04-02 10:00 am (UTC)(link)
спасибо, пока не нужно, но прикопаю ссылки на всякий случай)
bluedrag: (Default)

[personal profile] bluedrag 2012-04-02 11:11 am (UTC)(link)
Посмотри на OKWS, на котором написан OKCupid: http://www.okcupid.com/about/technology

[identity profile] mpak666.livejournal.com 2012-04-02 11:25 am (UTC)(link)
А зачем такие сложности в будущем при отладке, поддержке и развитии потом этого С++ веб-продукта?

Если стоит Apache то почему бы не посмотреть на mod_perl скорость просто идеально вшитая внутрь Apache кишков, отлаживать легче, хотя надо быть и аккуратнее с "мусором", но всё же разработка быстрее будет в разы, имхо.

А не хочется связываться с perl, полно интрументов например в ruby и ниже rails уровня, как sinatra или прям на голый rack садиться.

[identity profile] kpeo-y3k.livejournal.com 2012-06-11 03:36 pm (UTC)(link)
с самого старта фреймворка работаю с CppCMS - из всего перечисленного сейчас кажется самым перспективным. единственная проблема - ненулевое вхождение в тему.

как JSON-RPC вполне рабочий фреймворк, для этого есть отдельный вид асинхронного приложения "cppcms::rpc::json_rpc_server" (http://cppcms.com/wikipp/en/page/cppcms_1x_json_rpc)

сейчас как раз пишу для него фронтенд для более простой и быстрой разработки собственных приложений (типа Kotti в Pyramid Python-проекта Pylons), надеюсь уже скоро открою для тестирования :)

[identity profile] omas.livejournal.com 2012-10-18 02:43 pm (UTC)(link)
Выросла ли идея во что-нибудь? Или так идеей и осталась?

[identity profile] omas.livejournal.com 2012-10-24 03:59 pm (UTC)(link)
У меня сейчас в голове похожая идея про комплекс прикладных Web приложений на C++.
Целей несколько:
- Производительность, снижение требований к инфраструктуре
- Качество, C++ позволяет лучше структурировать код, чем остальные языки Web разработки, за исключением Java C#
- Кросс-платформенность, чем не может похвастаться C#
- Наличие огромного массива С++ приложений, который можно переиспользовать.

[identity profile] omas.livejournal.com 2012-10-27 01:49 am (UTC)(link)
Возможно оно так и есть. С другой стороны требования к инфраструктуре в последнее время просто заоблачные.
Тестовые фреймворки в зависимости от того, к какому месту их подключать: либо не зависят от языка реализации, либо для С++ их тоже достаточно.
А вот практически полное отсутствие готовых библиотек для разработки Web на С++, действительно, настораживает.