2013-09-18 3 views
0

Я работаю над системой, которая использует кластер Akka. Дилемма, с которой я столкнулся, - это то, как обновлять данные о точках входа. У меня есть следующая структура:Обновление данных точек входа кластера akka

[Load Balancer] -> [Точка входа] (спрей питание) -> [Рабочие]

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

Что было бы лучшим подходом к решению этой проблемы? Я думал о просто переключении этого контейнера электронной почты/идентификаторов на изменчивый, но тогда возникает вопрос, будет ли система блокировать эти данные при обработке событий и как это влияет на производительность.

Любые рекомендации были бы замечательными!

Обновление: - распространение нового пользователя будет осуществляться с помощью регулярного запроса на разбрызгивание. С внешней стороны, разрешенной для таких системных запросов, запрос будет сделан с ключами безопасности и идентификатором пользователя, который будет добавлен в список , - имеется несколько узлов, каждая из которых имеет точку входа с точки зрения распыления - скорость не имеет значения до тех пор, пока она пару секунд - заказ не имеет значения.

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

Надеюсь, что это прояснится лучше.

+1

Я думаю, вам нужно немного расширить, как ваша система будет работать. Возникает вопрос о том, как распространять (обновлять) список авторизации? Какой компонент контролирует обновление и на каком узле кластера он работает? Каковы гарантии, необходимые для обновления (поскольку это активная операция), то есть, насколько быстро должно распространяться обновление в списке авторизации, вам нужен строгий порядок, в котором пользователю всегда разрешен доступ, когда доступ был или это нормально, если разрешение будет доступно только после обновления? – jrudolph

+0

Я обновил свой вопрос, пожалуйста, взгляните еще раз. –

ответ

0

Хорошо, вот первый проект.

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

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

Вы можете создать singleton actor в своем кластере akka, который будет отвечать за чтение и обновление списка доступа из постоянного хранилища.

Затем с помощью distributed akka pub/sub extension можно создать распределенное сообщение автобуса, где:

  • всех распыляющие конечные точки и одноплодный актер, а также подписаться на канал «обновление доступа», например. Таким образом, все участники могут сохранить свой список доступа «синхронизированным».

  • , когда конечный пункт распыления получил запрос на добавление или удаление пользователя/доступа, он подталкивает уведомление по каналу «доступ к обновлению». Каждая оконечная точка спрея может обновлять свой список доступа, поэтому singleton обновляет постоянный список в хранилище.

Что вы думаете?

+0

Звучит неплохо, пока я не попробую :) Другой вопрос, это звучит как план, но как насчет хранения такого списка. Он должен быть var, влияет ли это на производительность, если это var? Другими словами, если он только что прочитан, будет также блокировка в системе или он будет работать нормально, пока не будет блокировка записи? –

+0

См. Это о var performace для состояния http://stackoverflow.com/questions/18808159/alternatives-to-using-var-for-state-with-actors. Вы не должны беспокоиться о блокировке, а о распространении доступа к обновлению. –

+0

Кажется, он работает до сих пор. Спасибо за предложение. –