один высокопроизводительный сервер с одним сервером приложений или несколькими серверами приложений?

StackOverflow https://stackoverflow.com/questions/2543578

  •  23-09-2019
  •  | 
  •  

Вопрос

Если у меня есть высокопроизводительный сервер, например, с памятью 1 Тб и процессором 8x4 ядра...

Повысится ли производительность, если я запущу несколько серверов приложений (на разных JVM), а не только один сервер приложений?

На сервере приложений я запущу несколько сервисов (EAR с компонентами, управляемыми сообщениями), которые обмениваются сообщениями друг с другом.

Кстати, у 64-битной Java больше нет ограничений по памяти?http://java.sun.com/products/hotspot/whitepaper.html#64

Это было полезно?

Решение

Повысится ли производительность, если я запущу несколько серверов приложений (на разных JVM), а не только один сервер приложений?

Есть несколько вещей, которые следует принять во внимание:

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

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

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

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

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

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

Если у вас есть JVM, которая может использовать оборудование, вам понадобится сервер приложений, который может масштабироваться соответствующим образом.Распространенным узким местом в наши дни является количество веб-запросов, которые могут быть обработаны в секунду: современный сервер должен быть способен обрабатывать 10 000 запросов в секунду (см. http://www.kegel.com/c10k.html), но не все так делают.

Итак, прежде всего определите свои самые насущные потребности (количество подключений в секунду?использование памяти?пропускная способность сети?) и используйте это для определения лучшей комбинации платформы + jvm + сервера приложений.Если у вас есть конкретные потребности, продавцы обычно будут рады помочь вам совершить продажу.

Скорее всего, вы выиграете, бегая несколько JVM с меньшими кучами вместо одной большой JVM.Для этого есть несколько причин:

  1. Меньшие кучи означают короче фигня коллекции

  2. Больше JVM означает меньшая конкуренция для внутренних ресурсов внутри JVM, таких как пулы потоков и другой синхронизированный доступ.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top