Низкая задержка является функцией многих вещей, две наиболее важные из которых:
- сетевая задержка - то есть время, затрачиваемое в сети на передачу / прием сообщений.
- задержка обработки - то есть время, затраченное вашим приложением на обработку сообщения / события.
Итак, если вы говорите, что пишете систему согласования заказов, сетевая задержка будет отражать, как скоро в вашей сети вы сможете получить запрос на сопоставление заказов. А задержка обработки будет представлять время, затраченное вашим приложением на сопоставление Ордера с существующими открытыми ордерами.
Многоадресная передача, UDP, надежная многоадресная передача, обход ядра (поддерживается Java 7, Informatica Ultra Messaging и многими другими) в сетях Infiniband - это некоторые распространенные технологии, используемые всеми компаниями в этой области.
Кроме того, существуют платформы программирования с низкой задержкой, такие как disruptor (http://code.google.com/p/disruptor/)), которые реализуют шаблоны проектирования для работы с приложениями с низкой задержкой. Что может убить вас, так это необходимость записи в БД или файлы журналов как часть вашего основного рабочего процесса. придется придумывать уникальные решения, отвечающие требованиям проблемы, которую вы пытаетесь решить.
В таких языках, как Java, реализация вашего приложения таким образом, что оно создает (почти) нулевой мусор, становится чрезвычайно важной для задержки. Как говорит Адамски, знание модели памяти Java чрезвычайно важно. Понимать различные реализации JVM и их ограничения. Типичные шаблоны проектирования Java для создания небольших объектов - это первое, что вы выбросите из окна - никогда нельзя починить сборщик мусора Java настолько, чтобы добиться низкой задержки - единственное, что можно исправить, - это мусор.
Удачи!