Приложения с маленькими задержками на java. Часть 1.

Перевод статьи: оригинал

Вопрос 1. Что мы понимаем под терминами приложение реального времени, задержка и пропускная способность?

Ответ 1. Приложения реального времени (Real-time application, RTA) – это приложения, через которые данные проходят сразу по поступлении в течении заданного промежутка времени. Эти промежутки называются SLA — Service Level Agreements. К примеру, при реализации Straight-Through Processing (STP) у вас будет поток данных о торгах в реальном времени между главным офисом и брокерами на бирже.

Системы реального времени делятся на две категории: 1) жесткого (hard) реального времени 2) твердого (firm) реального времени 3) мягкого (soft) реального времени. В системе жесткого реального времени действие, выполненное вне временного интервала, означает провал — негативные последствия. Другими словами, надо все время выдерживать временной норматив. Недопустимо говорить, что мы в 90% случаев мы обеспечиваем время ответа 100 мсек. Только в некоторых случаях к системам предъявляют такие требования: медицинские приложения (к примеру, кардиостимулятор), системы обороны, системы управления ядерными процессами, авионика и пр.

В системах твердого реального времени допустимы выпадения за временнЫе пределы, но это ухудшает качество обслуживания (QoS, quality of service). После дедлайна ценность/полезность обработанных данных нулевая.

В системах мягкого реального времени действие, выполненное слишком рано или поздно, все равно имеет положительный эффект. Если оно выполнено досрочно, оно будет иметь бОльшую ценность в смысле customer experience, укладываясь в SLA. В качестве системы мягкого реального времени может быть реализовано приложение для торгов с высокой пропускной способностью и низкой задержкой без жестких требований к времени отклика. Ничего катастрофического не произойдет, если время отклика выпадет из норматива в 5% случаев. Большинство приложений попадает в эту категорию: финансовые приложения, обработка событий, телеком и пр.

Вопрос 2. Может ли JVM быть использована для запуска приложений реального времени в том смысле, что она будет гарантировать определенное время реакции?
Ответ 2. Для стандартных JVM ответ нет. Однако есть специальные JVM, которые поддерживают расширения Real-Time Specification for Java (RTSJ). Они могут обеспечить работу в режиме жесткого реального времени. Стандартные JVM достигают только режима мягкого реального времени и связано это с автоматической сборкой мусора и паузами для работы сборщика. Виртуальные машины с поддержкой RTSJ предоставляют подкласс RTT (Real-Time-Thread) под названием NoHeapRealtimeThread (NHRT). Объекты этого класса защищены от прерываний на паузы сборщика. NHRT не используют кучу (heap). NHRTs используют scoped memory и immortal memory для более предсказуемого выделения памяти.

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

Задержка (latency) – это время, необходимое для выполнения какого-то действия или вычисления результата. Единицей размерности является секунда, но на практике задержка составляет тысячные и даже миллионные доли секунды. Системы торгов нацелены на обеспечение задержек в интервале от 100 наносекунд до 100 миллисекунд.

Пропускная способность (throughput) – это количество выполненных действий или полученных результатов за единицу времени. Обычно измеряется количеством за секунду, к примеру, количество запросов в секунду.

Вопрос 4. В чем разница между терминами задержка и временем реакции системы?
Ответ 4. Задержка это интервал времени между моментом отправки запрос на сервер и моментом получения на стороне клиента первого байта ответа.

Время реакции системы — это интервал времени между моментом оправки запроса на сервер и моментом, когда клиент полностью получил ответ. Веб браузер должен загрузить множество данных вроде дерева DOM, картинок, CSS и JS.

Иными словами, время реакции системы всегда больше или равно задержке.

Время реакции системы = задержка + время обработки (к примеру, рендеринг в браузере).

Задержка складывается из нескольких компонентов, таких как: сетевая задержка (следование сообщений по каналам связи) и задержка, связанная с обработкой сообщения/события в приложении.

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

Вопрос 5. Задержка более 20 миллисекунд считается для приложения высокочастотных торгов (High Frequency Trading) маленькой или большой?
Ответ 5. Значения больше 20 миллисекунд считаются в HFT большими (т.е. система считается медленной). HFT торги задействуют алгоритмы продажи, покупки и проверки соответствия огромных объемов данных. Это приложения с ультранизкими задержками, ранее они писались на чистом С, в наши дни всё больше используется java.

Вопрос 6. На какую пропускную способность нацеливать HFT приложение?
Ответ 6. От 50 до 200 тысяч транзакций в секунду. Вам придется использовать несколько серверов для обработки запросов. Архитектура должна быть масштабируемой для удовлетворения растущих потребностей. Подробности в этой статье: статья на английском

Продолжение: Часть 2

You can leave a response, or trackback from your own site.

Leave a Reply