Вопросы о Java для веб-разработки от разработчика PHP - PullRequest
5 голосов
/ 23 декабря 2011

У меня есть несколько лет опыта разработки веб-приложений на PHP и я также много работал с Java (однако никогда не занимался разработкой веб-приложений).Я заканчиваю большой проект, над которым я работал в течение последних шести месяцев, встроенный в PHP / CodeIgniter и размещенный с CloudControl (обеспечивает автоматическую подготовку сервера и масштабируемость).

Проект прошел хорошо, иPHP удовлетворял мои потребности - но сейчас я нахожусь на начальной стадии разработки веб-приложения, которое будет ориентировано на корпоративных пользователей, и я рассматриваю возможность использования Java (возможно, «Grails») в сочетании с AWS Elastic Beanstalk.

Мой первый вопрос: многопоточность, как часто это используется при разработке веб-приложений для Java?С моим PHP-приложением мой сервер, возможно, должен был сделать API-вызов к Facebook в ответ на запрос пользователя (например, опубликовать сообщение на стене пользователя).Чтобы мой PHP-процесс не ожидал завершения вызова API, прежде чем вернуться к пользователю, я использовал серверы очереди заданий Gearman с работниками, чтобы перенести работу с основного сервера приложений на фонового работника.

Будет Javaразработчик просто раскручивает поток, просто чтобы обработать вызов API и вернуть основной процесс пользователю?Это самая большая сила разработки Java над PHP?Спасибо!

1 Ответ

2 голосов
/ 23 декабря 2011

Будет ли Java-разработчик просто раскрутить поток, просто чтобы обработать вызов API и вернуть основной процесс пользователю?

Это зависит.

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


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

Возможно, есть и другие альтернативы, но их может быть гораздо больше.


Мой совет - начать с простого решения.Просто вызовите API в потоке запросов и настройте свой веб-сервер на использование разумного количества потоков запросов.

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

...