AKKA.Net Кластеризация и общий ресурс

Эй, я читаю и смотрю видео на AKKA.Net, и мне нравится то, что я вижу. Я хочу попробовать AKKA.net в имеющемся у меня приложении, но мне нужна помощь, чтобы прояснить некоторые моменты

Сценарий
Я хочу создать кластер Akka.net с:

  • 3 узла/машины

  • общий ресурс (счетчик) между ними.

  • общая статистика ресурсов, доступная для чтения со всех узлов

    Всякий раз, когда узел обналичивает билет, он берет значение счетчика и увеличивает его на единицу, а затем обновляет счетчик. Никакие два билета не должны иметь одинаковое значение счетчика. Информация общей статистики должна содержать значение, если билеты обналичены, поэтому ее следует развернуть на всех узлах в кластере.

Вопросы

  1. Как я могу убедиться, что у билетов есть уникальные значения счетчика? Я привык к реализации замков, но какой будет реализация актера?
  2. если узел отключен от кластера, возникает ли событие, которое я могу перехватить, чтобы внести необходимые коррективы?

person MikeM    schedule 04.01.2016    source источник


Ответы (1)


  1. Как я могу убедиться, что у билетов есть уникальные значения счетчика?

Если вы не можете получить доступ к системе субъектов, чтобы запросить «счетчик» или идентификатор, используйте что-то вроде GUID для уникальной идентификации ресурса (Guid.NewGuid()). Если вам требуется глобальный целочисленный счетчик, вам придется реализовать актор, который отслеживает этот счетчик и выдает новые значения по запросу.

  1. если узел отключен от кластера, возникает ли событие, которое я могу перехватить, чтобы внести необходимые коррективы?

Да, вы можете прослушивать сплетни кластера и определять, когда узел был отключен, и решать, недоступен ли он больше:

http://getakka.net/docs/clustering/cluster-extension#working-with-cluster-gossip

person easuter    schedule 10.01.2016
comment
Спасибо за ваш ответ, easuter, ваши ответы по делу, но я хочу кое-что прояснить. Мне нужен глобальный счетчик и в то же время нужна отказоустойчивость системы. Итак, если я создам актера с именем counterActor. Буду ли я развертывать его на всех узлах для обеспечения высокой доступности на тот случай, если узел с этим субъектом выйдет из строя? если да, то как я могу гарантировать, что только один counterActor одновременно обрабатывает сообщение? - person MikeM; 11.01.2016
comment
@MikeM Это зависит от того, является ли это глобальным счетчиком для всех узлов? Если это так, то вам понадобится единый источник для распределения значений. Если вы попытаетесь сделать так, чтобы несколько участников распределяли совершенно последовательные значения, вам потребуется какой-то способ координировать этот процесс, который будет непростым и будет склонен к расщеплению сценариев. Вот хорошая статья о том, как работать с согласованностью в распределенных системах. - person easuter; 13.01.2016
comment
@MikeM В проекте, над которым я работаю, я отказался от последовательных идентификаторов в пользу GUID по причинам, которые я упомянул в своем предыдущем комментарии. В моей базе данных у меня есть столбец для поиска этих GUID, но я использую последовательные целые числа для первичных/внешних ключей, так как это будет намного быстрее и удобнее для СУБД. Если вам абсолютно требуются последовательные целые числа, насколько я знаю, это должен делать один глобальный актер. Наконец, вы также можете получить дополнительную информацию, если запросите дополнительную информацию в чате Gitter Akka.NET. , где тусуются более опытные люди и разработчики :) - person easuter; 13.01.2016