Строго серверная обработка (без взаимодействия с веб-браузером): Java или PHP лучше для этого сценария? - PullRequest
4 голосов
/ 15 июня 2011

Вот ситуация:

В настоящее время у меня есть веб-приложение, которое использует PHP для обслуживания HTML / CSS / JS и которое взаимодействует с БД MySQL. Полностью ванильный и обычный. PHP представляет собой смесь логики представления (генерация HTML и т. Д.) И бизнес-логики (приложение широко использует Ajax для отправки запросов данных или для указания серверу вносить изменения во что-либо).

В рамках редизайна этой системы я удаляю всю логику представления из PHP. Вместо этого я буду использовать Ext JS 4 (оконный инструментарий / приложение на основе javascript), подключенный к шлюзу веб-сокетов (замена COMET / AJAX, обеспечивающая двунаправленную связь) на сервере. Давайте на минуту помашем волшебную палочку и забудем о том, как Ext JS 4 доставляется в браузер и как он взаимодействует со шлюзом веб-сокетов.

Нам остается шлюз веб-сокетов (написанный на Java и постоянно выполняющий прослушивание определенного порта для подключений к веб-сокетам) и некоторое взаимодействие бизнес-логики / БД, в настоящее время написанное на PHP.

На данный момент, я вижу один из двух вариантов:

  1. Сохраняйте взаимодействие бизнес-логики / БД в PHP и выполняйте его, вызывая либо PHP из командной строки, либо заставляя PHP / Apache прослушивать другой порт только для связи от шлюза веб-сокетов.

  2. Напишите новое приложение Java или C ++, которое будет постоянным и будет прослушивать определенный порт для обмена данными через шлюз веб-сокетов. Интеграция бизнес-логики / БД переписана на языке Java или C ++ и является частью этого приложения.

Будет ли переписывание на Java или C ++ давать лучшую производительность, чем повторный вызов PHP? (Код PHP написан довольно четко: объектно-ориентирован с использованием таких пакетов, как CodeIgniter и Doctrine).

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

В случае, если это может повлиять на ваше мышление / обратную связь, вы должны знать, что шлюз веб-сокетов (Kaazing) поддерживает JMS, Stomp, AMQP, XMPP или что-то нестандартное, что вы создаете сами.

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

Спасибо!

Ответы [ 3 ]

2 голосов
/ 15 июня 2011

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

Сделайте это простым способом (PHPесли я правильно понял) сначала.Затем запустите реалистичный стресс-тест.Поскольку вы делаете вызовы PHP, просто создайте реалистичную последовательность (войдите, измените это, сделайте это, выйдите из системы) и запустите столько, сколько вы считаете реалистичным.100?10000?Это зависит от того, насколько напряженным вы ожидаете, что эта вещь будет и все еще преформуется.

Этот шаг на легче , чем кажется.Не думайте, что это «базовая среда тестирования», подумайте о 20-строчном скрипте Python, который запускает столько потоков, сколько вы хотите, выполняя несколько строк, которые будут держать ваше приложение занятым.Если это займет у вас более 40 минут, остановитесь и упростите.Час, который вы потратите, будет того стоить.

Если ЦП достигнет 100, или у вас закончились какие-то ресурсы, возможно, пришло время переписать, или вы, вероятно, догадаетесь, что занимает больше всего инапишите это на C. Если вы используете C / C ++ и вам это не на 100% удобно, избегайте серьезной переписки, так как это опасный язык с множеством возможностей для появления ошибок.Возможно, даже вызовите скомпилированный код из PHP, который у вас есть , если это подходит вашему приложению .

Я однажды написал код на C, генерирующий HTML на стороне сервера.Это не совсем подходящий инструмент для работы.PHP может быть хакерским, но он делает работу быстро.Я бы избегал оптимизации, если / пока она на самом деле не нужна .

Удачи, не забудьте рассказать нам, как это происходит!

Редактировать: Если вы выберете решение на разных языках, не забудьте почистить его после!Стандартизируйте то, что вы делаете быстро и то, что вы делаете в PHP, делайте это в обычном формате, возможно, напишите короткий readme.Опять же, эти пятнадцать минут сэкономят вам или следующему человеку несколько дней и много волосков.

2 голосов
/ 15 июня 2011

Запись на скомпилированном языке (Java или C ++, в ваших примерах) почти наверняка даст лучшую производительность, чем интерпретируемый язык, такой как PHP.Выигрыш в производительности почти наверняка не перевесит хлопоты переписывания всего кода.

1 голос
/ 29 июня 2011
  • Если ваша бизнес-логика требует больших затрат на обработку, Java или C ++ обеспечат вам гораздо лучшую производительность.

    Если вы просто извлекаете некоторые результаты из БД, не ожидайте каких-либобольшой прирост производительности.

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

  • Мое мнение таково, что PHP слишком медленный дляОбработка ОГРОМНЫХ наборов данных, если у вас есть много сотен тысяч объектов для анализа пород C ++, и преимущества Java от оптимизатора производительности HotSpot JIT.

    Эффект HotSpot очень специфичен для сокращения чисел в Java.Вы действительно можете видеть, что JRE нажимает на акселератор, сглаживая обнаруженные узкие места.В некоторых редких случаях Java, оптимизированная для HotSpot JIT, может быть даже быстрее, чем C.

    В некоторых также очень редких случаях вудуизм производительности HotSpot может замедлить ваш код!

  • У вас естьВы когда-нибудь задумывались о том, чтобы превратить приложение PHP в более быстрое приложение на Java или C ++?

    Может быть, все, что вам нужно - это компилятор HipHop php2cpp: https://github.com/facebook/hiphop-php/wiki/

    Quercus - это среда выполнения php4java, которая может помочь вам в миграциидешевле на Java.http://quercus.caucho.com/

  • Весьма интересной была беседа Джошуа Блоха о "Беспокойстве в исполнении" в прошлом году.http://www.wiki.jvmlangsummit.com/images/1/1d/PerformanceAnxiety2010.pdf

    http://parleys.com/#st=5&id=2103 (32 мин. Видео)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...