Java-приложение для 5000 пользователей - PullRequest
9 голосов
/ 13 марта 2012

Впервые (надеюсь, не последний) в моей жизни я буду разрабатывать приложение, которое будет обрабатывать большое количество пользователей (около 5000) и управлять большим количеством данных.Я разработал приложение, которое управляет большим количеством данных (около 100 ~ ГБ данных, что не так много по вашим стандартам), но количество пользователей было довольно низким (около 50).

Вот списокинструментов / фреймворков, я думаю, я буду использовать:

  • Vaadin UI framework
  • Hibernate
  • PostgreSQL
  • Apache Tomcat
  • Memcached (для обработки сеансов)

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

Так что вы думаете о моем выборе и о чем мне следует опасаться?

Приветствия

Ответы [ 6 ]

9 голосов
/ 13 марта 2012

Ответ, как и во всех вопросах, связанных с производительностью / масштабированием: это зависит.

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

Чтобы ваше приложение масштабировалось / работало, я бы рассмотрел следующее:

  • Сохраняйте объем памяти каждого сеанса на низком уровне. Например, кеширование в HttpSession может работать, когда у вас 50, но не очень хорошая идея, когда у вас 5000 сеансов.
  • Делайте как можно больше работы в базе данных, чтобы уменьшить объем перемещаемых данных (например, при просмотре таблиц с большим количеством строк убедитесь, что у вас есть подкачка, которая выполняется в базе данных (скорее чем вернуть 10000 строк в Tomcat, а затем выбрать первые 10 ...)
  • Старайтесь минимизировать состояние, которое должно храниться внутри HttpSession, это упрощает кластеризацию.

Вероятно, самые важные рекомендации:

  • Используйте инструменты нагрузочного тестирования, чтобы смоделировать вашу пиковую нагрузку и не только и провести тестирование. JMeter - инструмент, который я использую для тестирования производительности / нагрузки.

При нагрузочном тестировании убедитесь, что:

  • То, что вы на самом деле используете 5000 пользователей (для создания 5000 HttpSession с) и используете широкий спектр данных (чтобы всегда не попадать в кэш).

РЕДАКТИРОВАТЬ:

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

5 голосов
/ 13 марта 2012

Возможно, вы захотите рассмотреть HTTP-сервер Apache перед вашими серверами Tomcat. Apache обеспечит: сжатие, статическое кеширование, балансировку нагрузки и SSL.

3 голосов
/ 13 марта 2012

Любая причина не использовать Spring ? Это действительно стало стандартом де-факто в корпоративных Java-приложениях.

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

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

1 голос
/ 13 марта 2012

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

Я настоятельно рекомендую этот пост в блоге, поскольку он выражает его более кратко, чем я могу:

ORM - это анти-pattern

Но простите, если я процитирую немного из этого блога об ORM и антишаблонах:

Причина, по которой я называю ORM антишаблоном, заключается в том, что он соответствуетДва критерия, которые автор AntiPatterns использовал, чтобы отличить анти-паттерны от простых вредных привычек, а именно:

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

Другие ваши технологии кажутся подходящими.Лично я больше склоняюсь к Jetty, чем Tomcat.Есть причина, по которой Google встраивает ее во многие свои проекты (например, GWT и PlayN);это моложе кодовая база, и я думаю, что она стала развиваться более активно, когда Eclipse взяла ее на себя.Просто мое скромное мнение.

[ОБНОВЛЕНИЕ] Еще одна ссылка, очень долго читаемая, но при принятии архитектурных решений чтение хорошо.

Объектно-реляционное картирование: Вьетнам компьютерной науки

0 голосов
/ 13 марта 2012

В зависимости от вашей спецификации и будущих целей, я бы, возможно, оставил обычную версию tomcat и выбрал бы Apache TomEE или мои личные предпочтения jBoss. Насколько я понимаю, EJB не очень хорошо поддерживаются в обычной версии tomcat, и это, вероятно, что-то приятное, когда вы хотите создать пару сервисов, какой-то кластерный синглтон-сервис и другие вещи. Но это, конечно же, мой личный преф, и если ваша спецификация не позволит использовать более продвинутый EE-сервер, вам следует придерживаться хитрого кота.

0 голосов
/ 13 марта 2012

Я рекомендую Glassfish для сервера приложений, потому что Apache Tomcat может обслуживать простой контент.А Glassfish имеет полную реализацию спецификации Java EE.

...