Рекомендуемый язык для написания веб-сервиса - PullRequest
1 голос
/ 24 января 2010

Я разработчик с открытым исходным кодом, и мне нужно написать хорошо масштабируемый веб-сервис. По ряду причин (в основном плохая поддержка параллелизма) я использую Ruby on Rails для внешнего интерфейса своего приложения, но не для внутреннего (читайте: http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=212903282). Моему веб-сервису потребуется вызвать нескольких партнеров API-интерфейсы для каждого запроса, поэтому для обеспечения высокой пропускной способности необходимо умело использовать многопоточность.

Какой язык / стек рекомендует сообщество для написания такого веб-сервиса? Я давно не писал на Java (и, кажется, это действительно старая школа: D). Мне нужно быстро создать прототип этого сервиса.

Ответы [ 6 ]

4 голосов
/ 24 января 2010

Какой язык / стек рекомендует сообщество для написания такого веб-сервиса? Я давно не писал на Java (и, кажется, это действительно старая школа: D). Мне нужно быстро создать прототип этого сервиса.

Тогда я бы определенно рекомендовал использовать Java и JAX-WS API, который, как и другие API Java EE 5, основан на аннотациях для облегчения разработки. Другими словами, вы аннотируете класс Java и вуаля, все готово и вы можете развернуть его как веб-сервис. Это действительно идеально подходит для создания прототипов (даже если бы я позже переключился на контрактный подход). Для реализации этого API вы можете использовать эталонную реализацию ( JAX-WS RI ), которая включена в Java 6 (начиная с Java 6u4) и также используется в Metro, стеке веб-служб GlassFish (Metro = JAX-WS RI + WSIT). Другой (очень хороший) стек, который также реализует JAX-WS, - это Apache CXF .

Если вам нужны цифры о производительности JAX-WS RI, взгляните на этот тест , он даст вам представление о его возможностях (и / или аппаратном обеспечении, которое вам понадобится) ).

Чтобы получить представление о том, как выглядит этот API, взгляните на Представление JAX-WS 2.0 с платформой Java SE 6, часть 1 и Представление JAX-WS 2.0 с Платформа Java SE 6, часть 2 (хотя сложность может быть не очень характерной для реальной жизни).

Обновление: Я упомянул JAX-WS RI, Metro, Apache CXF, и я бы понял, если вы скажете мне, что это сбивает с толку. Проблема в том, что если вы заглянете в Google для JAX-WS, вы встретите все эти термины / аббревиатуры. Поэтому я постарался дать минимальную информацию, чтобы уточнить, что это такое. Если вам нужны какие-либо разъяснения или более подробная информация, просто дайте мне знать.

2 голосов
/ 24 января 2010

Малоизвестным, но хорошим вариантом является C ++. Существует ряд платформ, начиная от высокоуровневых абстракций AJAX (Wt: http://webtoolkit.eu/) до простых библиотек CGI (например, http://cgi.sourceforge.net/).). Производительность очень хорошая, в противном случае разработка идет быстро, но требуется перекомпиляция время может помешать вашей разработке. Еще одна проблема, которую следует рассмотреть, - это меньшее количество легкодоступных библиотек и API webdev, но я нашел все, что мне нужно (например, SOCI, LibXML ++ и Boost.ASIO).

C # и Java также являются высокопроизводительными вариантами, но разработка в них может быть медленнее, чем в C ++, в значительной степени в зависимости от того, с чем вы работаете. С другой стороны, вы получаете множество библиотек и поддержки.

Хотя большинство языков сценариев (особенно Python и Ruby) не имеют надлежащей поддержки многопоточности из-за их использования глобальных блокировок интерпретатора, на самом деле это не проблема для веб-служб. Проблему можно обойти, запустив отдельный процесс для каждого пользователя. Это требует несколько больших требований к памяти, но в целом работает хорошо и, безусловно, безопаснее.

Большая проблема с Python и Ruby заключается в том, что они выполняют код очень медленно. Чтобы усугубить проблему, Rails является очень медленной средой по сравнению с другими библиотеками Ruby. Я успешно создал высоконагруженные веб-сервисы с Ruby (используя веб-фреймворк Ramaze). Ручная оптимизация на уровне исходного кода необходима для достижения приемлемых уровней производительности, но для того, что я работал над этим, было достаточно, и мы могли бы продолжать использовать Ruby.

1 голос
/ 24 января 2010

Если вы решите пойти по пути Java, я рекомендую использовать jax-ws (реализация метро, ​​уже включенная по умолчанию в Java 6) по двум причинам:

  • Это просто и более интуитивно понятно, чем альтернативы.
  • Это быстрее, и вы упомянули, что производительность важна. См. здесь очень свежую статью о производительности.
0 голосов
/ 24 января 2010

В этом нет ничего плохого в порождении процессов Ruby. Пока вы разрабатываете их как независимых (друг от друга и от базы данных), ваша масштабируемость будет в порядке. Вы можете добиться более высокой производительности на том же оборудовании с другими языками и средами, но внедрение нового языка в проекте с открытым исходным кодом - это большая проблема. Это существенно снизит количество доступных разработчиков.

0 голосов
/ 24 января 2010

Это зависит от остальных ваших требований.

Например, если вы хотите использовать .NET, вы можете использовать F # для своего бэкэнда. Если вы используете

Эксперт F #

автор покажет, как использовать F # на веб-страницах.

Если вы хотите использовать что-то вроде Java, посмотрите на Scala в качестве опции.

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

Вы можете настроить многопоточность для работы с языками ООП, но она не будет столь эффективной, поскольку тест и заданный способ блокировки могут быть не такими эффективными, как хотелось бы.

0 голосов
/ 24 января 2010

Для быстрого создания прототипа:

  • Python (скриптовые ласки, такие как Ruby, которые могут помочь вам быстро учиться)
  • или JSP, так как вы изучили Java раньше.
...