С точки зрения масштабируемости, Java EE предоставляет вам огромный выбор, которого у вас нет со стеком LAMP или RUBY. Все варианты выбора связаны с N-уровневыми приложениями, в то время как большинство приложений LAMP и ruby являются 2-уровневыми.
Я занимаюсь разработкой приложения и планирую разрешить людям доступ к API через сеть. Java EE позволит мне легко масштабировать средний уровень, не влияя на уровень пользовательского интерфейса. Добавляя интерфейсы в свое приложение, я могу очень легко масштабировать средний уровень. Стек LAMP не имеет этого понятия, встроен.
Так что мне нужно интерфейсы, веб-интерфейс и SOAP API. Теперь я хочу отдохнуть API. Хорошо ... Создайте этот интерфейс, чтобы он также достиг среднего уровня ... и добавьте больше компьютеров в кластер ... или мультикластер не имеет значения. Весь этот средний уровень - EJB, во многих отношениях более быстрый протокол, чем SOAP.
Теперь допустим, что я хочу добавить возможность смс-сообщения своим пользователям. Мне также нужно сделать это на основе того, что они установили, и это происходит из базы данных. В отношении масштабируемости я хочу отключить фактическую отправку текста от реализации, которую приложения хотят отправить. Это крики JMS. Я могу использовать Timer Bean, чтобы отключаться каждые X раз, выяснять, какие сообщения нужно отправлять, и помещать каждое сообщение в JMS. Теперь я могу управлять очередью и количеством обработчиков, работающих над ней и т. Д. Я вижу, сколько текстов выходит. Я даже могу поместить приемники в другую коробку, что мало повлияет на производительность других моих серверов.
В случае масштабирования я могу видеть, какой из моих EJB-компонентов больше всего поражен, и добавлять к ним больше ресурсов, одновременно удаляя ресурсы из других. Я могу сделать это с помощью очередей JMS и любой другой части стека технологий Java EE. Я не только получаю масштабируемость, но и управляю ресурсами своих серверов.
Поскольку у LAMP и Ruby еще нет JMS-очереди для асинхронной обработки или возможности легко размещать бизнес-логику на отдельном уровне, их может быть сложнее масштабировать с помощью нескольких интерфейсов. Что нужно сделать, чтобы вырвать логику и сделать ее доступной для другого интерфейса? Допустим, теперь вы предоставляете не только веб-интерфейс, но и настольный интерфейс, интерфейс IVR и интерфейс SOAP для своего веб-сайта?