Как получить обновленное состояние всего кластера Akka.net?

Я создал узел мониторинга в моем кластере akka.net, и я использую cluster.SendCurrentClusterState(Self) но не все узлы видны сразу, иногда узел покидает кластер, и в то время как в журнале говорится, что узел был удален правильно, состояние сообщает, что узел работает в течение длительного времени.

Каков наилучший / правильный способ получить обновленное состояние всего кластера akka.net?

1 ответ

Решение

Есть два важных свойства, о которых стоит помнить, когда дело доходит до состояния кластера:

  1. Нет такого понятия, как глобальное состояние кластера. Каждый узел имеет свой взгляд на то, как кластер выглядит в данный момент. Это естественный эффект наличия однорангового подхода (поэтому нет единого главного узла, который может установить произвольное состояние).
  2. Состояние кластера не обновляется сразу. Все состояния создаются для достижения возможной конвергенции, но может пройти некоторое время, прежде чем текущее состояние узла кластера будет сплетничаться с другими.

Простейшим для состояния кластера на данный момент является Cluster.Get(Context.System).State который содержит информацию об известных на данный момент членах, а также о недоступных узлах.

Другой способ заключается в cluster.Subscribe(Self, typeof(ClusterEvent.IMemberEvent), typeof(ClusterEvent.IReachabilityEvent)) (которые должны быть отписаны, когда актер умирает). Таким образом, вы можете получать уведомления об изменениях состояния кластера по мере их появления.

Относительно долгого времени, необходимого для подтверждения удаленного узла. В зависимости от того, что можно было бы назвать "длинным", это может быть признаком некоторой ошибки. В этом случае было бы замечательно, если бы вы могли установить проблему с шагами воспроизведения.

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