У нас есть низкая торговая система задержки (обработчики каналов, аналитика, закажите запись), записанный в Java. Это использует TCP и UDP экстенсивно, это не использует Infiniband или другие нестандартные сети.
Кто-либо может прокомментировать компромиссы различных Ose или конфигураций ОС для развертывания этой системы? В то время как пропускная способность очевидно важна, чтобы не отставать от современной ценовой подачи, задержка является нашим приоритетом № 1.
Солярис походит на наиболее подходящего кандидата, так как они создали Java; я должен использовать Sparc или x64 процессоры?
Я услышал хорошие вещи о RHEL и SLERT, это правильные версии Linux для использования в нашем сравнительном тестировании.
Кто-либо протестировал Windows против вышеупомянутых Ose? Или это, как предполагается, не поддерживает на высоком уровне?
Я хотел бы оставить Java по сравнению с дебатами C++ для другого потока.
Поставщики любят такие эталоны. У вас ведь есть код?
IBM, Sun/Oracle, HP будут рады запустить ваше приложение на своем оборудовании, чтобы продемонстрировать свои преимущества. Заставьте их сделать это. Если у вас есть код, заставьте продавцов запустить демонстрацию на своем оборудовании, чтобы показать, что лучше всего подходит для ваших нужд.
Это просто, безболезненно, бесплатно , и на самом деле. Окончательное решение будет простым и очевидным. И вы будете знать, как установить и настроить, чтобы максимизировать производительность.
Ненавижу предсказывать такие вещи до того, как код будет написан. Слишком многие клиенты просили H/W и OS рекомендации до того, как мы закончили определять все случаи использования. Просить такого рода предраспознание - это простое безумие.
Но у вас есть код. Вы можете создать тестовые примеры, которые реализуют ваш код. Идеально.
Одним из способов управления задержкой является использование нескольких JVM, разделяющих работу на более мелкие кучи, чтобы остановка мировой сборки мусора не занимала столько времени, когда это происходит, и влияла на меньшее количество процессов.
Другой подход - загрузить кластер JVM с достаточным объемом памяти и выделить процессы, чтобы гарантировать, что мировая сборка мусора не остановится в те часы, которые вам небезразличны задержки (если это не приложение, работающее круглосуточно и без выходных). , и перезапускать JVM в нерабочее время.
Вам также следует рассмотреть возможность реализации других JVM (например, JRocket). Конечно, если какой-либо из них подходит, полностью зависит от вашего конкретного приложения.
Если что-либо из вышеперечисленного имеет значение для вашего подхода, это повлияет на выбор ОС. Например, если вы выберете другую реализацию JVM, это может ограничить выбор ОС,
Настоятельно рекомендую заглянуть в операционную систему, с которой у вас уже есть опыт работы. Solaris - странное чудовище, если вы знаете только Linux, например
Также я настоятельно рекомендую использовать платформу, фактически поддерживаемую от Sun, так как это значительно облегчит получение профессиональной помощи, когда вы РЕАЛЬНО, РЕАЛЬНО нуждаетесь в ней.
http://java.sun.com/javase/6/webnotes/install/system-configurations.html
Наверное, я бы беспокоился о сборе мусора, вызывающем задержки задолго до операционной системы; вы вообще рассматривали возможность его настройки?
Если бы я хотел потратить время на пробную версию разных операционных систем, я бы попробовал Solaris 10 и NetBSD, и, возможно, вариант Linux для хорошей оценки.
Я бы поэкспериментировал с 32-vs-64 битными архитектурами; 64 бита дадут больше адресного пространства кучи... но займет больше времени для обращения к каждому биту памяти.
Я предполагаю, что вы профилировали ваше приложение и знаете, где находятся узкие места; по комментарию о GC, вы это сделали. В этом случае ваше приложение не должно быть привязано к процессору, а архитектура чипа не должна быть основной задачей.
.Я не думаю, что управляемые среды кода и обработка в реальном времени идут вместе очень хорошо. Если вас действительно волнует латентность, удалите слой, наложенный управляемым кодом. Это не аргумент Java против C++, а аргумент Java/C#/... против C/C++/FORTRAN/... и я считаю, что это правильная дискуссия о дизайне.
И да, я имею в виду FORTRAN, мы запускаем ряд систем близких к реальному времени с основой FORTRAN.
.Для торговой среды, в дополнение к низким задержкам, вы, вероятно, беспокоитесь о последовательности, а также латентности, поэтому сосредоточиться на снижении влияния пауз GC как можно больше, может дать вам больше преимуществ, чем различные варианты операционных систем.
Однако, если вы планируете использовать вашу торговую систему в среде, где каждая микросекунда имеет значение, вам действительно придется жить с отсутствием последовательности, которую вы получите от текущего поколения ВМ - ни одна из них (кроме реального времени) не гарантирует низкие микросекундные паузы GC. Конечно, на этом уровне вы столкнетесь с теми же проблемами, что и при работе операционной системы (преемственность процесса, обработка прерываний, сбои в работе страницы и т.д.). В этом случае вам поможет один из вариантов Linux в реальном времени
.Я бы не исключил из этого Windows только потому, что это Windows. За последние несколько лет я убедился в том, что Windows версии Sun JVM обычно были наиболее зрелыми по производительности в отличие от Linux или Soaris x86 на том же самом аппаратном обеспечении. JVM для Solaris SPARC тоже может быть хорошей, но я думаю, что с Windows на x86 вы получите больше мощности за меньшие деньги
.