Лучшая ОС для развертывания приложения с низкой задержкой Java?
У нас есть торговая система с низкой задержкой (обработчики фидов, аналитика, запись заказа), написанная на Java. Он широко использует TCP и UDP, не использует Infiniband или другие нестандартные сети.
Можно ли комментировать компромиссы между различными ОС или конфигурациями ОС для развертывания этой системы? Хотя пропускная способность, очевидно, важна, чтобы идти в ногу с современными ценами, латентность является нашим приоритетом №1.
Solaris кажется естественным кандидатом, поскольку они создали Java; следует ли использовать процессоры Sparc или x64?
Я слышал хорошие вещи о RHEL и SLERT, это правильные версии Linux для использования в нашем бенчмаркинге.
Кто-нибудь тестировал Windows против вышеуказанных ОС? Или предполагается, что он не отстает?
Я хотел бы оставить обсуждение Java vs С++ для другого потока.
Ответы
Ответ 1
Продавцы любят этот бенчмарк. У вас есть код, не так ли?
IBM, Sun/Oracle, HP будут любить запускать ваше приложение на своем оборудовании, чтобы продемонстрировать свои преимущества.
Заставьте их сделать это. Если у вас есть код, попросите поставщиков провести демонстрацию на своем оборудовании, чтобы показать, что лучше всего подходит для ваших нужд.
Это легко, безболезненно, бесплатно и фактическое. Окончательное решение будет простым и очевидным. И вы будете знать, как устанавливать и настраивать, чтобы максимизировать производительность.
То, что я ненавижу, - это предсказать это, прежде чем писать код. Слишком много клиентов попросили рекомендации по H/W и ОС, прежде чем мы закончили определять все варианты использования. Просить такого рода предвидение - это просто безумие.
Но у вас есть код. Вы можете создавать тестовые примеры, которые используют ваш код. Это прекрасно.
Ответ 2
Для торговой среды в дополнение к низкой задержке вы, вероятно, обеспокоены непротиворечивостью и латентностью, поэтому сосредоточение внимания на снижении воздействия пауз GC как можно больше может дать вам больше преимуществ, чем различные варианты OS.
- сборщик мусора G1 в последних версиях Suns Hotspot VM улучшает остановку, когда мир останавливается много, аналогично JRockit VM
- Для реальных гарантий производительности, версия Azul Systems компилятора Hotspot на их Java Appliance обеспечивает самые низкие гарантированные паузы - также он масштабируется до массивного размера - 100 с суммой ГБ и 100 с ядрами.
- Я бы отказался от Java Realtime - хотя вы получите гарантии ответа, вы пожертвуете пропускной способностью, чтобы получить эти гарантии.
Однако, если вы планируете использовать свою торговую систему в среде, в которой подсчитывается каждая микросекунда, вам действительно придется жить с отсутствием согласованности, которую вы получите от текущего поколения VM - ни один из них (кроме в реальном времени) гарантирует низкие микросекундные GC-паузы. Разумеется, на этом уровне вы столкнетесь с теми же проблемами из активности ОС (предварительная упреждающая система, обработка прерываний, ошибки страниц и т.д.). В этом случае один из вариантов Linux в реальном времени поможет вам.
Ответ 3
Я бы не исключал Windows из этого только потому, что это Windows. Мой опыт в последние несколько лет состоял в том, что версии Windows Sun JVM, как правило, были наиболее зрелыми в сравнении с Linux или Soaris x86 на одном и том же оборудовании. JVM для Solaris SPARC тоже может быть хорош, но я думаю, что с Windows на x86 вы получите больше энергии за меньшие деньги.
Ответ 4
Я бы, наверное, беспокоился о сборе мусора, вызывающем латентность задолго до операционной системы; вы вообще изучили настройку?
Если бы я был готов потратить время на испытания различных ОС, я бы попробовал Solaris 10 и NetBSD и, вероятно, вариант Linux для хорошей оценки.
Я бы экспериментировал с 32-vs-64-разрядными архитектурами; 64 бит даст вам большее адресное пространство кучи... но займет больше времени, чтобы адресовать каждый бит памяти.
Я предполагаю, что вы профилировали свое приложение и знаете, где узкие места; по комментарию о GC, вы это сделали. В этом случае ваше приложение не должно быть привязано к процессору, а чип-архитектура не должна быть главной проблемой.
Ответ 5
Я бы настоятельно рекомендовал вам изучить операционную систему, с которой у вас уже есть опыт. Solaris - странный зверь, если вы знаете только Linux, например.
Также я бы настоятельно рекомендовал использовать платформу, фактически поддерживаемую Sun, так как это значительно облегчит профессиональную помощь, когда вы ДЕЙСТВИТЕЛЬНО, ДЕЙСТВИТЕЛЬНО нуждаетесь в ней.
http://java.sun.com/javase/6/webnotes/install/system-configurations.html
Ответ 6
Я не думаю, что управляемые среды кода и обработка в реальном времени идут очень хорошо. Если вы действительно заботитесь о задержке, удалите слой, наложенный управляемым кодом. Это не аргумент Java vs С++, а аргумент Java/С#/... vs C/С++/FORTRAN/..., и я считаю, что это правильное обсуждение дизайна.
И да, я имею в виду FORTRAN, мы запускаем ряд систем в реальном времени с базой FORTRAN.
Ответ 7
Один из способов управления задержкой состоит в том, чтобы несколько JVM разделили работу на меньшие кучи, чтобы остановить сборку мусора в мире не так много времени, когда это происходит, и влияет на меньшие процессы.
Другой подход заключается в том, чтобы загрузить кластер JVM с достаточной памятью и выделить процессы, чтобы гарантировать, что не будет остановки мировой сборки мусора в течение часов, которые вам небезразличны (если это не 24/7 приложение) и перезапустите JVM в нерабочее время.
Вы также должны взглянуть на другие реализации JVM (например, JRocket). Конечно, если какой-либо из них подходит, то полностью зависит от вашего конкретного приложения.
Если какое-либо из вышеперечисленных вопросов относится к вашему подходу, это повлияет на выбор ОС. Например, если вы идете с другой реализацией JVM, которая может ограничить выбор ОС, и если вы идете с кластеризацией или иным образом запускаете несколько JVM для приложения, для этого может потребоваться несколько лучших базовых инструментов ОС для эффективного управления, что еще больше влияет на выбор ОС.
Ответ 8
Выбор операционной системы или конфигурации полностью избыточен с учетом доступности более быстрых сетевых материалов.
Посмотрите на 10GigE с помощью сетевых адаптеров ToE или более быстрое решение InfiniBand 4X QDR (40Gbs), но IPoIB, представляющее стандартный интерфейс Ethernet и маршрутизации.