То, что делает Java EE масштабируемым, это то, что делает что угодно масштабируемым: разделение задач. По мере увеличения вашей обработки или ввода-вывода вы можете добавить новое оборудование и перераспределить нагрузку полупрозрачно (в основном прозрачно для приложения, очевидно, меньше для обезьян конфигурации), потому что отдельные, изолированные проблемы не знают или не заботятся, если они ' на одном физическом оборудовании или на разных процессорах в кластере.
Вы можете создавать масштабируемые приложения на любом языке или платформе исполнения. (Да, даже COBOL на древних мэйнфреймах System 370.) То, что фреймворки приложений, такие как Java EE (и другие, естественно, Java EE вряд ли уникальны в этом отношении!), Дает вам способность легко (относительно говоря) сделайте это, выполнив большую часть тяжелой работы за вас.
Когда мое веб-приложение использует, скажем, EJB для выполнения некоторой бизнес-логики, этот EJB может находиться на одном и том же ядре ЦП, на другом ядре в том же ЦПУ, на другом ЦП целиком или, в крайнем случае, возможно, даже по всей планете. Я не знаю, и, по большей части, при условии, что производительность есть, мне все равно. Точно так же, когда я отправляю сообщение на шину сообщений для обработки, я не знаю и мне все равно, куда отправляется это сообщение, какой компонент выполняет обработку и где происходит эта обработка, опять же, пока производительность падает в пределах моего необходимо. Это все для конфигурации обезьян, чтобы работать. Технология позволяет это делать, и имеются инструменты для оценки того, какие компоненты должны быть использованы для достижения приемлемой производительности при увеличении размера системы.
Теперь, когда я пытаюсь все это прокрутить вручную, я сразу начинаю с проблем. Если я заранее не задумываюсь обо всех прокси-серверах, планировании и распространении и тому подобном, когда мое приложение выходит за пределы обработки одной машины, у меня теперь есть серьезные переписывания, когда я перемещаю часть приложения в другую коробку. И затем каждый раз, когда мои способности растут, я должен делать это снова и снова.
Если я заранее подумываю обо всем этом, я пишу много шаблонного кода для каждого приложения, которое вносит незначительные изменения в одни и те же вещи. Я могу кодировать вещи масштабируемым образом, но я хочу делать это каждый. проклятый. время. Я пишу приложение?
Итак, то, что Java EE (и другие фреймворки) привносит в таблицу, представляет собой заранее составленный шаблон для общих требований создания масштабируемых приложений. Конечно, запись моих приложений в них не гарантирует их масштабируемости, но фреймворки значительно упрощают написание указанных масштабируемых приложений.