Балансировщик нагрузки кластера для приложения Oracle aq

У меня есть приложение, которое использует Oracle AQ для обработки информации. Сообщения создаются на основе записей в базе данных. Приложение загружает сообщения для обработки и планирует их в памяти на будущее. Приложение кластеризовано, и из-за этого у меня возникли три проблемы:

  1. Допустим, в сообщении есть переменная (значения не постоянны). Исходя из этого, если существует узел, обрабатывающий сообщения с указанной переменной, только этот узел должен обрабатывать сообщения с одинаковым значением переменной.
  2. При запуске узла кластера все записи (сообщения), которые готовы к обработке, должны быть загружены, но записи, которые уже загружены для обработки и еще не обработаны (запланированы), не должны загружаться.
  3. Если один узел кластера умирает и у него есть записи, запланированные для обработки, другой узел должен взять на себя всю работу (в настоящее время узлы не имеют возможности узнать, что другие узлы запланировали).

Кажется, что распределенный кеш, такой как Hazelcast, может быть не очень хорошей идеей, потому что важна производительность и много сообщений (особенно для второй проблемы).

Мои вопросы:

а) Я не смог найти никакого готового решения для своих проблем, кажется, мне нужен собственный балансировщик нагрузки?
б) Если да, как балансировщик нагрузки должен знать об узлах, использовать ли для связи другую очередь Oracle AQ или что-то вроде Hazelcast?

1 ответ

Не совсем уверен, что получил ваш вопрос, но постараюсь ответить.

1) О какой переменной вы говорите, внутри значения? Возможно, вы захотите изучить ValueExtractor ( http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html) и сходство данных ( http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html), чтобы убедиться, что одни и те же "переменные" остаются в том же узле.

2) Извините, но я не понимаю этого требования. Возможно, вы просто не хотите "перезагружать" значения уже в памяти? Это было бы поведением по умолчанию.

3) Начиная с 3.8, в Hazelcast есть DurableExecutorService ( http://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html), который позаботится об отказоустойчивости для тебя. 3.8 был выпущен как ранний доступ.

Дайте мне знать, если что-то было неправильно истолковано, или у вас есть дополнительные вопросы.

Другие вопросы по тегам