2009-02-21 5 views
15

Я слышал из разных источников, что Java EE очень масштабируема, но для меня кажется, что вы никогда не сможете масштабировать приложение Java EE до уровня поисковой системы Google или любого другого крупного сайта.Почему Java EE масштабируемо?

Я хотел бы услышать технические причины, по которым он настолько масштабируемый.

+0

Мне бы хотелось увидеть эти «различные источники», утверждая, что они масштабируемы. :) – cletus

+0

Веб-сайт Sun: «С простотой, мобильностью, масштабируемостью и унаследованной интеграцией платформа J2EE является платформой для корпоративных решений». http://java.sun.com/j2ee/overview.html – Uri

+0

Ну, Sun вряд ли является беспристрастным адвокатом. :) – cletus

ответ

23

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

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

Я не уверен, что вы могли бы определить Google как «большой сайт». Это было бы похоже на то, чтобы упомянуть Интернет в локальной сети вашего офиса. Java EE не предназначалась для масштабирования на глобальном уровне, поэтому сайты, такие как Amazon и Google, используют свои собственные технологии (например, с использованием MapReduce).

Существует много статей, в которых обсуждается эффективность масштабируемости Java EE. Например, this

+0

Приведенная бумага также доступна бесплатно с http://www.cin.ufpe.br/~redis/middleware/brebner-j2se03.pdf – asmaier

+2

Из статьи: мы обнаружили, что технология J2EE очень масштабируема ... ** до тех пор, как база данных имеет достаточные ресурсы, чтобы помешать ей стать узким местом **. – asmaier

3

Можно рассматривать масштабируемую архитектуру с точки зрения того, что обеспечивает базовая инфраструктура (например, Java EE). Но это только начало.

Проектирование для масштабируемой инфраструктуры - это архитектурное искусство. Это похоже на искусство проекции ... как он будет себя вести, когда он взорвется до боли. Базовые вопросы:

  • Куда я обычно пользуюсь общедоступными материалами, чтобы, когда так много людей просят об этом, мне не нужно так много времени (кеш)?
  • Где я могу хранить вещи каждого человека так, что, когда есть так много людей, которые нуждаются в материале, мне не составит труда справиться с ними.
  • Как я помню, что сделал здесь человек в последний раз, когда они пришли сюда, так как они не могут вернуться к тому же самому узлу, который они посетили в последний раз.
  • Как долго мне придется ждать (блокировать) длительную процедуру, если так много людей запрашивают ее?

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

Java EE, как основа, достаточно масштабируема, как и большинство современных корпоративных инфраструктур, ориентированных на микропроцессор. Но я видел удивительные (не в хорошем смысле) вещи, созданные даже из лучших из них.

Для множества ссылок, пожалуйста, поиск Google для «Проектирования для Масштабируемости»

1

The «масштабируемость» вещь говорит о «что вы будете делать, когда приложение не помещается в одном компьютере больше?».

Масштабируемые приложения могут распространяться на большее количество компьютеров, чем на один.

Обратите внимание, что большие серверы могут иметь ОЧЕНЬ большие приложения с большим количеством памяти и большим количеством процессоров - см. http://www.sun.com/servers/highend/m9000/ или http://www-03.ibm.com/systems/i/hardware/595/index.html - но это обычно дороже, чем наличие большого количества небольших серверов с распространяемым над ними приложением.

+0

На самом деле, мэйнфреймы дешевле, чем кластеры ПК-серверов, в большинстве случаев при прямом вычислении затрат на переработку. –

+0

Зависит. Какой сценарий вы имеете в виду? –

6

Что делает Java EE масштабируемым, что делает что-либо масштабируемое: разделение проблем. По мере увеличения вашей обработки или ввода-вывода вы можете добавить новое оборудование и перераспределить нагрузку полупрозрачно (в основном прозрачно для приложения, что явно меньше для обезьян конфигурации), поскольку разделенные изолированные проблемы не знают и не заботятся, re на одном физическом оборудовании или на разных процессорах в кластере.

может сделать масштабируемые приложения на любом языке или платформе исполнения. (Да, даже COBOL на старых мэйнфреймах System 37.) Какие прикладные структуры, такие как Java EE (и другие, естественно - Java EE, вряд ли уникальны в этом отношении!) Дают вам возможность легко (условно говоря) делают это сделав большую часть тяжелой работы для вас.

Когда мое веб-приложение использует, скажем, EJB для выполнения какой-либо бизнес-логики, EJB может находиться на одном ядре ЦП на другом ядре в одном CPU на другом ЦП полностью или, в крайнем случае, возможно, даже по всей планете. Я не знаю и, по большей части, при условии, что здесь есть работа, мне все равно. Аналогичным образом, когда я отправляю сообщение на шине сообщений для обработки, я не знаю и не забочусь о том, куда это сообщение идет, какой компонент выполняет обработку и где происходит эта обработка, еще раз, пока производительность падает на мои необходимо. Это все, что нужно для настройки обезьян. Эта технология позволяет это и инструменты для оценки того, какие предметы должны идти, чтобы получить приемлемую производительность, поскольку система масштабируется по размеру.

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

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

Так что Java EE (и другие фреймворки) приносит в таблицу предварительно написанный шаблон для общих требований к созданию масштабируемых приложений. Написание моих приложений на них не гарантирует их масштабируемость, конечно, но фреймворки делают писать масштабируемые приложения намного проще.