Как интегрировать LMAX в реальное финансовое приложение - PullRequest
3 голосов
/ 22 февраля 2012

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

  1. У меня есть 3 производителя, в основном поток FIX, который десериализует запросы.Другая нить, которая постоянно изменяет цену ордера по мере движения рынка.Также у нас есть еще один поток, который отвечает за десериализацию запросов, отправляемых из приложения с графическим интерфейсом.Все три потока в настоящее время записывают в очередь блокировки (следовательно, мы видим много споров в очереди)
  2. Разрушитель говорит о принципе единого записывающего устройства и из того, что я прочитал, этот подход масштабируется лучше всего.Можно ли каким-то образом заставить эти три потока подчиняться принципу единственного средства записи?
  3. Также в типичном приложении запрос / ответ, особенно в нашем случае, мы имеем конфликт в кэше памяти, так как нам нужно заблокироватькеш, когда мы обновляем кеш ответом, в то время как запрос может происходить для того же порядка.Как мы справляемся с этим через посредник, то есть как связать ответ на конкретный запрос?Могу ли я снять блокировку кеша, если да, то как?

Любые предложения / указатели будут высоко оценены.В настоящее время мы используем Java 1.6

1 Ответ

1 голос
/ 30 июля 2012

Я новичок в distruptor и пытаюсь понять как можно больше примеров использования.Я пытался ответить на ваши вопросы.

  1. Да, Disruptor может использоваться для последовательности вызовов от нескольких производителей.Я понимаю, что все 3 потока пытаются обновить состояние общего объекта.И единственный потребитель, который предпринимает необходимые действия над общим объектом.Внутренне вы можете иметь вызовы делегата из одного потребителя в соответствующий однопоточный обработчик, основанный на ответственности.

  2. Disruptor делает именно это.Он упорядочивает вызовы так, что к состоянию одновременно может обращаться только поток.Если есть определенный порядок, в котором должны вызываться обработчики событий, установите барьер памяти.В последней версии Disruptor имеется DSL, который позволяет легко настроить порядок.

  3. Кэш может быть абстрагирован и доступен через Disruptor.В то же время только Reader или Writer могли бы получить доступ к кешу, поскольку все обращения к кешу являются последовательными.

...