Как интегрировать LMAX в реальное финансовое приложение

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

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

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


person Harry    schedule 22.02.2012    source источник
comment
Может ли кто-нибудь пролить свет на это   -  person Harry    schedule 01.03.2012


Ответы (1)


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

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

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

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

person Krishnan    schedule 30.07.2012