Лучшая ОС для развертывания Java-приложения с малой задержкой?

У нас есть торговая система с низкой задержкой (обработчики фидов, аналитика, ввод ордеров), написанная на Java. Он широко использует TCP и UDP, не использует Infiniband или другие нестандартные сети.

Может ли кто-нибудь прокомментировать компромиссы между различными ОС или конфигурациями ОС для развертывания этой системы? Хотя пропускная способность, очевидно, важна для того, чтобы идти в ногу с современными потоками цен, задержка является нашим приоритетом №1.

Solaris кажется естественным кандидатом, так как они создали Java; следует ли использовать процессоры Sparc или x64?

Я слышал хорошие отзывы о RHEL и SLERT, это правильные версии Linux для использования в наших тестах.

Кто-нибудь тестировал Windows на вышеуказанных ОС? Или предполагается не успевать?

Я хотел бы оставить дискуссию о Java и C++ для другой темы.


person Ted Graham    schedule 23.12.2009    source источник
comment
О, да ладно, нам всем не помешала бы очередная война между Java и C++.   -  person Patrick    schedule 23.12.2009
comment
Solaris кажется естественным кандидатом с тех пор, как они создали Java. Серьезно? Это настолько ненаучное заявление, насколько это возможно.   -  person matt b    schedule 23.12.2009
comment
Я могу дать вам один совет: 32-битная ОС будет ограничивать размер кучи вашей JVM. 32-битные операционные системы *nix имеют более высокий лимит, чем win32; window резервирует определенные области памяти, что не позволяет JVM получить непрерывный блок памяти (точный предел варьируется, но он находится в пределах 1,1-1,5 ГБ). Если я правильно помню, ограничение для *nix составляет 2 ГБ. 64-разрядные операционные системы не имеют этого ограничения, но ваше оборудование должно его поддерживать.   -  person RMorrisey    schedule 23.12.2009
comment
Не было бы хорошей идеей задать этот вопрос ДО написания заявления?   -  person    schedule 23.12.2009
comment
Обратите внимание, что вам следует учитывать, если у вас есть жесткие требования ко времени отклика. Если да, вам нужна операционная система реального времени и версия Java для реального времени.   -  person Thorbjørn Ravn Andersen    schedule 17.04.2011


Ответы (8)


Продавцы любят такие эталоны. У тебя есть код, верно?

IBM, Sun/Oracle, HP — всем понравится запускать ваше приложение на своем оборудовании, чтобы продемонстрировать свои преимущества.

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

Это легко, безболезненно, бесплатно и основано на фактах. Окончательное решение будет легким и очевидным. И вы будете знать, как установить и настроить, чтобы максимизировать производительность.


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

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

person S.Lott    schedule 23.12.2009
comment
Сколько вам нужно потратить на оборудование, чтобы получить такую ​​​​демонстрацию? В настоящее время у нас развернуто около 40 серверов, и я думаю, что мы, вероятно, слишком малы, чтобы заниматься лабораторией производительности поставщика. - person Ted Graham; 23.12.2009
comment
@ Тед Грэм. Нуль. Если они хотят продать вам оборудование, они должны продемонстрировать, что оно работает. Они любят это делать. Начните спрашивать у своих продавцов демонстрации. - person S.Lott; 23.12.2009
comment
Этот ответ прекрасен! Аппаратные компании хотели бы показать свое оборудование в лучшем виде. Просто сделайте себе одолжение: точно укажите, что вы измеряете, ДО того, как вы дадите им тестовый код. В частности, вам, вероятно, нужна устойчивая пропускная способность (количество транзакций за более длительный период, например, более одного часа), а не самая быстрая отдельная транзакция. - person Chip Uni; 23.12.2009
comment
@Chip: на самом деле они не хотят сосредотачиваться на пропускной способности: OP заявил, что главная проблема - задержка. Так что я бы сосредоточился на самых длинных транзакциях. Но точно не пропускная способность. - person CPerkins; 23.12.2009
comment
Я пытаюсь связаться с IBM и Sun, чтобы начать такое сравнение. На странице реального времени IBM указан адрес электронной почты их команды RT, но он не возвращается. На странице глобальных финансовых услуг Sun нет возможности связаться с ними, а их представитель в чате понятия не имеет. Я оставил пару сообщений, посмотрим, перезвонит ли мне знающий человек. - person Ted Graham; 23.12.2009
comment
@Ted Graham: У вас 40 серверов? И нет торговых представителей? Как вы получили эти 40 серверов? - person S.Lott; 23.12.2009
comment
@Ted Graham: На каком поставщике вы остановились в конце концов? - person Kynth; 19.08.2010
comment
@ S.Lott Я не понимаю, что вы имеете в виду, позволяя Oracle запускать приложение? У меня есть веб-сайт на основе Java, и я ищу сервер. - person Jack; 03.02.2015

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

  • сборщик мусора G1 в последних версиях Suns Hotspot VM улучшен, чтобы мир не останавливался. , аналогично JRockit VM.
  • Тем не менее, для гарантии реальной производительности Azul Systems версия компилятора Hotspot на их устройстве Java обеспечивает минимальные гарантированные паузы. - также он масштабируется до огромных размеров - 100 ГБ стека и 100 ядер.
  • Я бы отказался от Java Realtime — хотя вы получите гарантии ответа, вы пожертвуете пропускной способностью, чтобы получить эти гарантии.

Однако, если вы планируете использовать свою торговую систему в среде, где каждая микросекунда на счету, вам действительно придется жить с отсутствием согласованности, которую вы получите от текущего поколения виртуальных машин - ни одна из них (кроме реального времени) не гарантирует Низкие микросекундные паузы GC. Конечно, на этом уровне вы столкнетесь с теми же проблемами, связанными с активностью ОС (упреждение процессов, обработка прерываний, ошибки страниц и т. д.). В этом случае вам поможет один из вариантов Linux в реальном времени.

person Robert Christie    schedule 23.12.2009
comment
Меня меньше беспокоят паузы GC, чем то, что вы классифицируете как активность ОС. Я считаю, что устройства Azul не обеспечивают задержку менее миллисекунды. - person Ted Graham; 23.12.2009
comment
В ПОРЯДКЕ. Ни одна виртуальная машина на рынке не обеспечивает задержку менее мс — сборщик G1 позволяет вам указать целевую максимальную паузу в мс, но примеры всегда идут в диапазоне мс. Когда вы дойдете до того, что активность ОС вызывает у вас проблемы, вы получите действительно большой скачок производительности от RDMA на основе infiniband. Порядка 10 мкс, а не около 70 мкс для 10GigE для передачи. - person Robert Christie; 23.12.2009
comment
Я согласен, что ни одна виртуальная машина не обеспечивает гарантии задержки менее миллисекунды для GC, но я считаю, что Azul не обеспечивает задержку менее миллисекунды для обработки событий, когда GC не задействован. Я получил это от blogs.azulsystems.com/cliff/webtech/page/2 (см. запись от 28 октября 2008 г.) - person Ted Graham; 24.12.2009
comment
@cb160: Что вы знаете о том, как сделать infiniband RDMA из java? - person Ted Graham; 24.12.2009
comment
@Ted Одной из особенностей JDK7 является протокол Socket Direct, который обеспечивает RDMA через infiniband. См. java.sun.com/docs/books/tutorial/sdp. /сокеты/index.html - person Robert Christie; 24.12.2009

Я бы не стал исключать из этого Windows только потому, что это Windows. По моему опыту за последние несколько лет, версии Sun JVM для Windows обычно были наиболее зрелыми с точки зрения производительности, в отличие от Linux или Soaris x86 на том же оборудовании. JVM для Solaris SPARC тоже может быть хороша, но я думаю, что с Windows на x86 вы получите больше мощности за меньшие деньги.

person x4u    schedule 23.12.2009
comment
Наш бенчмаркинг показал, что Windows пока очень конкурентоспособна. Мы собираемся начать дальнейшее тестирование, поэтому я и задал свой вопрос. - person Ted Graham; 23.12.2009

Я настоятельно рекомендую вам изучить операционную систему, с которой у вас уже есть опыт работы. Solaris - странный зверь, если вы знаете только Linux, например.

Кроме того, я настоятельно рекомендую использовать платформу, поддерживаемую компанией Sun, так как это значительно облегчит получение профессиональной помощи, когда она вам ДЕЙСТВИТЕЛЬНО, ДЕЙСТВИТЕЛЬНО понадобится.

http://java.sun.com/javase/6/webnotes/install/system-configurations.html

person Thorbjørn Ravn Andersen    schedule 23.12.2009
comment
Большая часть нашего опыта связана с Windows; хотя мы готовы нанять администратора Solaris или Linux, если это необходимо - person Ted Graham; 23.12.2009

Я бы, вероятно, беспокоился о сборке мусора, вызывающей задержку задолго до операционной системы; ты вообще занимался тюнингом?

Если бы я был готов потратить время на опробование различных ОС, я бы попробовал Solaris 10 и NetBSD, а также, возможно, вариант Linux для хорошей оценки.

Я бы поэкспериментировал с 32-битной архитектурой против 64-битной; 64-битная версия даст вам большее адресное пространство кучи... но для адресации каждого бита памяти потребуется больше времени.

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

person Dean J    schedule 23.12.2009
comment
Винда не режет? Или в чем проблема, с которой вы столкнулись? - person Dean J; 23.12.2009
comment
Это для торговой системы, вы ВСЕГДА хотите быть быстрее. - person Ted Graham; 23.12.2009
comment
@DeanJ Я знаю, что вы написали это давным-давно, но Windows имеет очень высокую степень детализации по времени по сравнению с Linux. Лондонская фондовая биржа перешла на версию Linux в реальном времени, чтобы снизить задержку до микросекунд IIRC - person Morten Jensen; 06.10.2013
comment
Этот чувствует себя древним в этот момент. Использование Windows в качестве сервера для Java кажется на данный момент странным выбором; Linux кажется легкой задачей для x86. - person Dean J; 20.10.2013

Я не думаю, что среда управляемого кода и обработка в реальном времени очень хорошо сочетаются друг с другом. Если вы действительно заботитесь о задержке, удалите слой, наложенный управляемым кодом. Это не аргумент Java против C++, а аргумент Java/C#/... против C/C++/FORTRAN/..., и я считаю, что это допустимое обсуждение дизайна.

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

person cdkMoose    schedule 23.12.2009
comment
Фортран сммортран. Вы можете скомпилировать Java на кремний cscott.net/Publications/design.ps и вырезать середину человек. - person Pete Kirkham; 23.12.2009
comment
JVM имеют некоторые преимущества в производительности (например, самопрофилирование во время выполнения), которые были бы потеряны при компиляции Java в исполняемый файл или построении его на чипе. - person Ted Graham; 23.12.2009
comment
Компиляция в кремний аннулирует исходную предпосылку ОП о том, на какой ОС работать. Если он скомпилирован, вопрос ОС не заботится об исходном языке. - person cdkMoose; 23.12.2009
comment
Конечно, если задержка является вашей главной заботой, Java не является очевидным выбором, но эта лошадь уже вышла из сарая, и все еще есть законные причины выбрать Java и максимально снизить задержку. возможно, а не отвергать Java как вариант вообще. - person Yishai; 23.12.2009
comment
Я не хотел исключать Java как вариант, просто сказал, что выбор Java/управляемого кода более важен, чем выбор ОС для вопроса о задержке. ОП указал, что задержка была его приоритетом №1. - person cdkMoose; 23.12.2009
comment
-1 за то, что вы не объяснили, почему вы так считаете или как вы собираетесь заменить части системы, которые вы удаляете, например. ГК. - person J D; 15.10.2010
comment
Действительно, -1, потому что мой ответ недостаточно полный? Как бы то ни было, я считаю, что в приложении со значительными требованиями к задержке мне не нужна среда выполнения с недетерминированным управлением памятью. Я не удаляю GC из среды управляемого кода, я предлагаю, чтобы ОП оценил использование среды управляемого кода по сравнению с его собственным управлением памятью на скомпилированном языке. Это должно быть раннее обсуждение дизайна. - person cdkMoose; 15.10.2010

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

Другой подход состоит в том, чтобы загрузить кластер JVM с достаточным объемом памяти и выделить процессы, чтобы гарантировать, что сборка мусора в мире не будет остановлена ​​в те часы, когда вы заботитесь о задержке (если это не приложение, работающее круглосуточно и без выходных), и перезапустите JVM в нерабочее время.

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

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

person Yishai    schedule 23.12.2009

Выбор операционной системы или настраиваемой системы совершенно избыточен, учитывая наличие более быстрых сетевых структур.

Посмотрите на 10GigE с сетевыми адаптерами ToE или на более быстрое решение 4X QDR (40 Гбит/с) InfiniBand, но с IPoIB. со стандартным интерфейсом Ethernet и маршрутизацией.

person Steve-o    schedule 30.11.2010