Использование субъектов Service Fabric с постоянством Entity Framework - PullRequest
0 голосов
/ 19 октября 2018

Я просто ищу несколько советов о том, как перейти к названию этого вопроса.

В настоящее время у меня есть основное приложение asp.net, которое поддерживается структурой сущностей с использованием шаблона DDD, который мы используем.Глядя на миграцию на архитектуру микросервисов с сервисной фабрикой.

Я знаю, что акторы могут быть сохранены на диске и в памяти, но есть ли у кого-нибудь опыт работы с актерами, сохраняемыми во внешнем хранилище, таком как MSSQL?

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

Единственная причина, по которой нам нужна база данных (а не субъект с сохранением состояния как таковой), заключается в том, что SSRS ссылается на базу данных для предоставления отчетов.

Таким образом, вопрос на самом деле

  • Может ли обслуживать актера фабрики?Будет ли обеспечена база данных?если да, то есть ли пример кода?
  • Это подходящее архитектурное решение, или есть другое решение, которое лучше подходит?

Любая помощь, руководство или предложенияболее чем оценено.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Вы не нашли примеров об этом подходе, потому что основная идея действующих лиц в Service Fabric - использовать функции управления состоянием платформы, чтобы справиться с этим для вас.

Фреймворк гибок в написании вашего собственного провайдера, но будет сложнее, чем в другой актерской фреймворке, такой как Akka.Net или Орлеан, которая не построена поверх платформы, такой как SF.

SF Actors имеет ДНК от Orleans, фреймворк, на котором был портирован SF Actor.

Orleans не предоставляет платформу данных и требует провайдеров хранения для обработки персистентности для хранилища SQLВы можете создать пользовательский поставщик и зарегистрировать его во время выполнения, и все готово.У них уже есть один для хранилища таблиц Azure.

Если у вас все еще есть планы по сохранению состояния в БД, вы можете выбрать одно из этих решений или создать собственного провайдера в соответствии с рекомендациями Loek и основывать его наидеи взяты из одной из других платформ.

Что касается основной проблемы, вам не нужно фактически использовать управление состоянием актора для решения проблемы параллелизма, вы можете просто использовать его аспекты изоляции и связи дляпредотвращать одновременные операции с одним элементом (каждый элемент является актером), и все операции с данными элемента должны обрабатываться самим субъектом.

Но поскольку вы используете внешнее постоянство, ничто не мешает другим субъектам,услуги или внешние системы изменения состояния субъекта, и технически оно снова открыто для параллелизма.Может не быть проблемой, если вы можете гарантировать, что только субъект может изменить его, например, хранилище Azure, вы можете арендовать большой двоичный объект, и только владелец аренды может изменить его.

Это одна из причин, по которойСостояние субъекта должно быть инкапсулировано и управляться субъектом, иначе сложность управления им будет вытекать за пределы субъекта.

0 голосов
/ 24 октября 2018

Вы можете использовать SQL в качестве резервного хранилища, написав пользовательскую реализацию IActorStateManager (не рекомендуется, очень сложно), но вы также можете получить доступ к базе данных из Actor.Вы можете использовать EFx (ядро) так же, как и в любом другом .NET (ядро) проекте.

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

Я рекомендую вам решать проблемы параллелизма в вашей базе данных, используя шаблон проектирования повторных попыток .(например, используя пакет типа Polly ), блокировка и управление версиями строк .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...