Какой язык программирования подходит для разработки критически важных веб-приложений? - PullRequest
5 голосов
/ 05 января 2010

Согласно этой странице , кажется, что Perl, PHP, Python в 50 раз медленнее, чем C / C ++ / Java.

Таким образом, я думаю, что Perl, PHP, Python не могли обрабатывать критически важные приложения (например,> 100 миллионов пользователей,> XX миллионов запросов каждую секунду). Но существуют исключения, например. facebook (говорят, что facebook написан исключительно на PHP), wikipeida . Более того, я слышал, что Google широко использует Python.

Так почему? Чем быстрее аппаратное обеспечение заполняет большой разрыв в скорости между C / C ++ / Java и Perl / PHP / Python?

спасибо.

Ответы [ 9 ]

7 голосов
/ 05 января 2010

Вычислительный код - наименьшая из моих проблем в большинстве веб-приложений с интенсивным использованием.

Горловины бутылок в типичном веб-приложении высокой доступности (не в этом порядке, но, скорее всего):

  1. База данных (IO и CPU)
  2. Файл IO
  3. Пропускная способность сети
  4. Память на сервере приложений
  5. Ваш код Java / C ++ / PHP / Python

Ваши основные задачи по обеспечению масштабируемости вашего приложения:

  1. Сокращение доступа к базе данных (кеширование, с учетом кластеризации, интеллектуального запроса)
  2. Распространение приложения (кластеризация)
  3. Устранить бесполезные блокировки синхронизации между потоками (см. Commons-pool 1.3)
  4. Создание правильных индексов БД, модели данных и репликации для поддержки многих пользователей
  5. Уменьшите размер ваших ответов, используя инкрементные обновления (AJAX)

Только после того, как все вышеперечисленное реализовано, оптимизируйте ваш код

Пожалуйста, не стесняйтесь добавлять больше в список, если я что-то пропустил

5 голосов
/ 05 января 2010

Страница, на которую вы ссылаетесь, говорит только половину правды. Конечно, родные языки быстрее, чем динамические, но это очень важно для приложений с высокими требованиями к вычислительной мощности. Для большинства веб-приложений это не так важно. Веб-запрос обычно обслуживается быстро. Более важно иметь эффективную структуру, которая правильно управляет ресурсами и запускает новые потоки для быстрого обслуживания запросов. Также временные характеристики не являются единственным критическим аспектом. Надежные и безошибочные приложения, вероятно, лучше достигаются с помощью динамических языков.

И нет, более быстрое оборудование не является решением. На самом деле Google славится использованием кластера недорогих машин.

3 голосов
/ 05 января 2010

(например,> 100 миллионов пользователей,> XX миллионов запросов каждую секунду)

Чтобы достичь такого рода производительности, вы должны ДОЛЖНЫ спроектировать и внедрить веб-сайт / приложение в виде масштабируемой многоуровневой системы с репликацией по всем (возможно) всем уровням. На этом этапе тот факт, что один язык программирования быстрее / медленнее другого, вероятно, влияет только на количество машин, которые вам нужны в вашей ферме процессоров. Дизайн архитектуры системы гораздо важнее.

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

в php нет JIT-компилятора, который компилирует код в машинный код

Другая важная причина - динамическая типизация PHP. Динамически типизированный язык всегда будет медленнее ..

нажмите ниже и прочитайте больше

Что делает PHP медленнее, чем Java или C #?

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

C - это самый быстрый язык. Это так быстро, что мы пишем на других языках. Никто серьезно не пишет веб-сайты на C. Почему? Его очень легко испортить в C способами, которые очень трудно обнаружить, и он почти ничего не поможет вам. Короче говоря, он ест программистов и генерирует ошибки.

Создание надежного и быстрого приложения - это не выбор самого быстрого языка, а A) удобство обслуживания и B) масштабируемость.

Ремонтопригодность означает, что в ней не так много ошибок. Это означает, что вы можете быстро добавлять новые функции и изменять существующие. Вам нужен язык, который выполняет за вас как можно больше работы и не мешает вам. Вот почему такие вещи, как Perl, Python, PHP и Ruby, так популярны. Все они были написаны с учетом удобства программиста, а не просто производительности или аккуратности. C был написан для сырой производительности. Ява была написана для концептуальной аккуратности.

Масштабируемость означает, что вы можете перейти от 10 пользователей к 10000 пользователей, не переписывая все это. Раньше это означало, что вы написали самый трудный код, которым вы можете управлять, но код с высокой степенью оптимизации обычно трудно поддерживать. Обычно это означает делать что-то на пользу компьютера, а не человека и бизнеса. Это жертвует ремонтопригодностью, и вы должны сообщить своему боссу, что добавление новой функции займет 3 месяца.

Масштабируемость в наши дни в основном достигается за счет использования оборудования и распараллеливания. Сколько процессов, процессоров и машин вы можете обрабатывать? Если вы можете достичь этого, вы можете просто запустить еще один дешевый облачный компьютер по мере необходимости. Конечно, вы захотите оптимизировать некоторые из них, но в этом масштабе вы получите гораздо больше от реализации лучшего алгоритма, чем ужесточение кода.

Например, я взял медленное PHP-приложение, которое изо всех сил пыталось обрабатывать 50 пользователей одновременно, переключилось с Apache с mod_php на lighttpd с балансировкой нагрузки, удаленными FastCGI процессами, позволяющими распараллеливание с минимумом изменения кода. Некоторое базовое профилирование показало, что PHP-фреймворк, который они использовали для создания прототипов, был очень медленным, поэтому он был удален. Профилирование также предложило несколько индексов для ускорения запросов к базе данных. Конечным результатом была система, которая могла обрабатывать тысячи пользователей, и при необходимости можно было бы добавить больше возможностей, оставив при этом большую часть кода, реализующего бизнес-логику, без изменений. Прошло несколько недель, и я не очень хорошо знаю PHP.

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

Вы обнаружите, что большая часть сети написана на PHP, Perl и Python, потому что их легко писать, с небольшими острыми частями, написанными в таких вещах, как C, Java и экзотика, таких как Scala (например, Twitter). Wikia , например, является модифицированным Mediawiki, который написан на PHP, но он эффективен (среди прочих причин), выполняя героическое количество кеширования .

0 голосов
/ 22 марта 2010

Я согласен с Люком. Это действительно важная архитектура, а не язык программирования.

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

Для php есть много вещей, которые вы можете сделать, чтобы повысить производительность. Например

  • Php Accelerator
  • Кэширование запросов
  • Оптимизировать запросы
  • Использование профилировщика для поиска более медленных деталей и оптимизации

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

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

Для обслуживания веб-страницы вам необходимо:

  1. Получить и разобрать запрос.
  2. Решите, что вы хотите сделать с запросом.
  3. Чтение / запись постоянных данных (база данных, кэш, файловая система)
  4. Вывод данных HTML.

«Скорость» языка на стороне сервера относится только к шагам два и четыре. Учитывая, что большинство сценариев стремятся сделать шаг 2 как можно более коротким, и что большинство веб-языков (включая PHP) максимально оптимизируют шаг 4 на любом серьезном веб-сайте, большая часть времени обработки запросов будет потрачена на шаге 3.

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

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

Google использует Python для GAE, а Windows Azure предоставляет PHP. Архитектура LAMP отлично подходит для масштабируемости приложений.

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

Надеюсь, это поможет

...