2012-02-22 5 views
3

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

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

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

+0

Может кто-нибудь пролить свет на это – Harry

ответ

1

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

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

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

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