Должен ли я использовать исключительно nginx или использовать его как прокси для Tomcat (связанный с производительностью)?

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

Сейчас я пытаюсь решить, стоит ли мне разрабатывать на nginx, использовать PHP для доставки динамического контента или использовать nginx в качестве прокси для Tomcat и использовать сервлеты для доставки динамического контента.

У меня большой опыт работы с Java, JSP и сервлетами, так что это плюс с самого начала. Кроме того, поскольку это скомпилированный язык, он будет работать быстрее, чем PHP (здесь подразумевается, что Java примерно в 37 раз быстрее, чем PHP), и будет создавать веб-страницы быстрее.

У меня нет опыта работы с PHP, но у меня сложилось впечатление, что его легко подобрать. Это медленнее, чем Java, но, поскольку клиент будет взаимодействовать только с nginx, я думаю, что обслуживание динамически созданных веб-страниц для клиента будет происходить быстрее.

Учитывая эти вещи, я хотел бы знать:

  1. Верны ли мои предположения?
  2. Где возникает узкое место: создание страниц или их передача клиенту?
  3. Даст ли мне прокси-сервер Tomcat с nginx какой-либо выигрыш в производительности nginx, если я собираюсь использовать Tomcat для генерации динамического контента (имея в виду, что мой сайт будет тяжелым в этом аспекте)?

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

2 ответа

Решение

Верны ли мои предположения?

Не совсем, настройка nginx перед Tomcat будет почти такой же, как и установка nginx с PHP, работающим с CGI, использующим php-fpm по умолчанию для nginx.

Вы бы использовали отличные возможности статического контента nginx, просто пересылая и возвращая динамический контент с вашего Tomcat.

Где возникает узкое место: создание страниц или их передача клиенту?

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

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

Да.

Кроме того, поскольку это скомпилированный язык, он будет работать быстрее, чем PHP (здесь подразумевается, что Java примерно в 37 раз быстрее, чем PHP)

Не верь всему, что читаешь в интернете;)

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

Не в объеме скомпилированного кода, но достаточно близко.

Когда дело доходит до выбора между Java и PHP, вы должны помнить следующее:

  • Они оба отличные языки
  • На этих языках было создано множество отличных высокопроизводительных веб-приложений.
  • У них обоих есть отличные сообщества разработчиков

На вопрос, какой из них будет работать лучше, невозможно ответить, если вы не создадите одно и то же приложение на обоих языках, а затем развернете и протестируете их оба. Это, конечно, слишком дорого и отнимает много времени для 99,9999% команд.

Когда вы сталкиваетесь с выбором такого типа, вот несколько вопросов, которые вы можете задать вместо того, "какой язык работает лучше":

  • Какой язык и структура делают мою команду разработчиков наиболее продуктивной?
  • Какой тип приложения является наиболее простым для моей группы развертывания для мониторинга, развертывания и обслуживания?

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

НТН!

Другие вопросы по тегам