2016-01-04 8 views
2

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

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

  • 3 Узлов/Машинами
  • общий ресурс (счетчик) между ними.
  • КОЛЛЕКТИВНАЯ статистика ресурсов читаемая из всех узлов

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

Вопросы

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

ответ

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

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

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

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

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

+0

Спасибо за ваш ответ easuter, ваши ответы на но я хочу кое-что уточнить. Мне нужен глобальный счетчик, и в то же время система должна быть отказоустойчивой. Поэтому, если я создаю актера, называемого counterActor. Разве я бы разворачивал его во всех узлах для высокой доступности, только если узел с этим актером опустился? если да, то как я могу гарантировать, что только один контркорректор обрабатывает сообщение за раз? – MikeM

+0

@MikeM Это зависит от того, является ли он глобальным счетчиком для всех узлов? Если это так, тогда вам понадобится один источник для распределения значений. Если вы попытаетесь разделить несколько актеров на совершенно последовательные ценности, вам нужно будет каким-то образом скоординировать этот процесс, который не будет простым и будет подвержен сценариям «разделить мозг». [Вот хорошая статья] (https://aphyr.com/posts/313-strong-consistency-models) о попытке работать с согласованностью в распределенных системах. – easuter

+0

@MikeM В проекте, над которым я работаю, я отказался от последовательных идентификаторов в пользу GUID по причинам, упомянутым в моем предыдущем комментарии. В моей базе данных у меня есть столбец для поиска этих GUID, но используйте последовательные целые числа для первичных/внешних ключей, так как это будет намного быстрее и удобнее для индексирования для РСУБД. Если вы * абсолютно * требуете целочисленных целых чисел, насколько мне известно, вам нужно будет сделать один глобальный актер. Наконец, вы также можете получить дополнительную информацию, если вы попросите ввести больше информации в [чат пользователя Gitter Akka.NET] (https://gitter.im/akkadotnet/akka.net), где болтаются более опытные люди и разработчики :) – easuter

Смежные вопросы