Каково будет поведение подписок и уведомлений в сценарии балансировки нагрузки Orion?

На основании этого ответа о том, как масштабировать Orion Context Broker с балансировкой нагрузки /questions/33887921/kak-masshtabirovat-orion-ge/33887924#33887924 каким должно быть поведение подписок, а также уведомлений?

Сервер ведьм, откуда он взялся? Каков рабочий процесс?

Может ли это привести к нарушению или клонированию подписок?

1 ответ

Решение

Рассмотрим разные случаи в зависимости от использования кэша подписки. Давайте рассмотрим два узла Orion (A и B) без потери общности, оба совместно используют один и тот же экземпляр MongoDB.

Использование кеша подписки (т.е. -noCache не установлено)

Запрос на создание подписки отправляется некоторым узлам (предположим, что это узел A). Узел A сохранит подписку в общей базе данных и в локальном (то есть узле A) кеше подписки. Обратите внимание, что узел B не узнает о новой подписке до следующего обновления кэша подписки, что означает. Это столько же, сколько интервал секунд равен -subCacheIval параметр.

Давайте теперь рассмотрим обновление (для объекта / атрибута, который соответствует условиям подписки для запуска уведомления). Определение того, какому узлу балансировщик нагрузки отправляет обновление и в какой момент оно поступает (относительно времени запроса на создание подписки), может произойти в одном из следующих случаев:

  • Обновление поступает на узел B, до следующего обновления подписки (т.е. столько, сколько -subCacheIval секунд). Учитывая, что узел B ничего не знает о подписке, уведомление не отправляется.

  • Обновление поступает на узел B, после следующего обновления подписки (т.е. столько, сколько -subCacheIval секунд). Узел B знает о новой подписке как о последовательности обновления, поэтому уведомление отправляется.

  • Обновление поступает на узел A, независимо от того, до или после следующего обновления подписки. Узел А был тем, кто создавал подписку, поэтому его кэш обновлен с самого начала. Таким образом, уведомление отправлено.

Coloral: ожидание -subCacheIval после создания подписки убедитесь, что подписка распространена на все узлы CB, таким образом, уведомление будет отправлено всегда. Тем не менее, обратите внимание, что установка слишком мала -subCacheIval значение может иметь негативные последствия. Компромисс анализируется в разделе документации по производительности Orion.

Наконец, что касается регулирования, обратите внимание на следующее замечание в примечаниях по реализации Orion:

Кроме того, Орион осуществляет регулирование на местном уровне. В конфигурациях с несколькими CB принимайте во внимание, что мера последнего уведомления является локальной для каждого узла Orion. Хотя каждый узел периодически синхронизируется с БД для получения потенциально новых значений (подробнее об этом здесь), может случиться так, что конкретный узел имеет старое значение, поэтому регулирование не является точным на 100%.

Таким образом, если вам нужно точное регулирование, лучше реализовать его в конечной точке приема уведомителя, чем использовать ту, которая предоставляется Orion.

Не использовать кеш подписки (т.е. -noCache установлено)

В этом случае оценка подписки всегда выполняется по запросу в БД. Таким образом, независимо от того, какой узел (A или B) создал подписку, так как она хранится в БД. Таким образом, независимо от того, обрабатывает ли обновление A или B, так как он будет проверять в БД соответствие подписок, и в этом случае всегда отправляется уведомление.

Однако обратите внимание, что этот режим (без использования кэша подписки) может иметь серьезные недостатки производительности (особенно в случае использования подписок на основе шаблонов), поэтому он не рекомендуется.

Я не совсем уверен, но проблема регулирования, описанная для другого сценария, вероятно, не происходит в этом случае.

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