Что мне нужно, чтобы компенсировать снижение производительности, вызванное использованием среды Spring?

Я использую Spring с Hibernate для создания корпоративного приложения.

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

Что мне нужно знать, так это набор факторов, которые мне нужно учитывать, чтобы принять решение о минимальных характеристиках (скорость обработки + ОЗУ и т. д.), Которые мне нужны для одного хост-сервера приложения, работающего под RedHat Linux 3+ и предназначенного для запуска только это приложение, которое даст оценку эффективности, скажем, 8 из 10 при увеличении базы пользователей одновременного доступа на 100 в месяц.

Кластеризация не используется.

0
0
253
7

Ответы 7

Я серьезно сомневаюсь, что использование Spring существенно повлияет на вашу производительность.

Какие именно аспекты Spring могут вызвать проблемы с производительностью?

Здесь так много переменных, что единственный ответ - «пососать и посмотреть», но с научной точки зрения.

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

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

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

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

С J2EE следует остерегаться двух вещей - большинство JVM имеют размеры кучи по умолчанию с последнего десятилетия, убедитесь, что ваша JVM имеет достаточно кучи и стека (по крайней мере, 1 Гб каждый!), - требуется время для всей JIT-компиляции, объект кеширование, загрузка модуля и т. д., чтобы успокоиться - проверьте свою систему как минимум в течение часа, прежде чем начинать тестирование.

В качестве инструментария я не вижу, чтобы Spring сам по себе влиял на производительность после инициализации, но я думаю, что Hibernate будет. Насколько велик этот эффект, зависит от множества деталей, таких как схема БД, и насколько реляционная компоновка отличается от уровня объектно-ориентированного проектирования и, конечно, от того, как организован доступ к БД и как часто происходит доступ к БД и т. д. Поэтому я сомневаюсь, что есть это практическое правило. Просто попробуйте разработать важные прототипы с использованием альтернативных серверов приложений или попробуйте собственную небольшую версию JDBC без использования ORM.

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

JeeBee 15.01.2009 13:33

Какое снижение производительности? В отношении чего? Вы измеряли производительность перед использованием фреймворка?

Если среда Spring вызывает неприемлемые проблемы с производительностью, очевидным решением будет не использовать ее.

Я никогда не слышал, чтобы Spring каким-либо образом снижал производительность во время выполнения. Поскольку он использует в основном POJO, я был бы удивлен, если бы с ним что-то не так. Может быть, кроме разбора большого количества XML при запуске, но это решается с помощью аннотаций.

Просто сначала напишите свое приложение, а затем настройте его соответствующим образом.

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

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

Единственный способ узнать это - профилировать свое приложение, видеть, на что тратится время, анализировать, чтобы определить основную причину, исправить ее, промыть и повторить. Это наука. Все остальное - догадки.

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

Spring обычно используется для создания долгоживущих объектов вскоре после запуска приложения. Фактически нет затрат на производительность в течение всего срока службы.

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