Orleans - Механизмы 

Page / - Изменено Alexandr Fokin в 2023/12/16 14:12 

Механизмы 
Изменено Alexandr Fokin
в 2023/12/16 14:12

Оглавление

Транзакции	Orleans транзакции
https://learn.microsoft.com/ru-ru/dotnet/orleans/grains/transactions
Update Microsoft Orleans Brings Distributed Transactions to Cloud
https://www.inapps.net/update-microsoft-orleans-brings-distributed-transactions-to-cloud/
Поддерживается ACID, Уровни изоляции Serializable isolation.
Распределенные системы. Консистентность
TransactionalStateRecord. Примерная структура
Транзакция и хранилище

При этом данные, задействованные в транзакции, могут располагаться в различных БД (в том числе разных типов),
основные требования - возможность атомарно читать и перезаписывать значение по ключу.
Из минусов - в БД будут находится не только данные модели, но и метаданные для обслуживания механизма транзакций.
При этом эти метаданные также постоянно будут считываться и записываться, что немного замедлит единичные операции доступа.

ITransactionalState<TData>	Компонент для взаимодействия с транзакционными данными.
Позволяет выполнять логику для чтения и изменения.	
Хранилище	•	ITransactionalStateStorage<TData>
ITransactionalStateStorageFactory
•	В случае использования в качестве хранилища IGrainStorage,
в качестве сохраняемого типа данных будет использоваться IGrainState<TransactionalStateRecord<TData>>.

AzureTableTransactionalStateStorage.cs
https://github.com/dotnet/orleans/blob/main/src/Azure/Orleans.Transactions.AzureStorage/TransactionalState/AzureTableTransactionalStateStorage.cs 	
	
События	События и потоки
[Question]: Orleans Observables vs Streams #7042
https://github.com/dotnet/orleans/issues/7042 
Observables	•	Подписчик удерживается активным, даже если новые события не поступают.	
Streams	•	Подписчик может деактивироваться, если новых сообщений не поступает.
При этом при поступлении он будет активирован.	

Таймеры и напоминания.
Timers and Reminders.	Timers and reminders
https://learn.microsoft.com/da-dk/dotnet/orleans/grains/timers-and-reminders
Timer	•	Timer живет до деактивации Grain.
Никуда не сохранятся.
•	Не использует планировщик Grain для выполнения.
Не увеличивает время жизни Grain (не отменят деактивацию).	
Reminder	•	Reminder хранится во внешнем постоянном хранилище.
•	Активирует Grain, если он не запущен в момент выполнения.
•	Выполняется в планировщике Grain.	
	
Постоянное хранение.
Persist storage.	Persistence
https://orleans.azurewebsites.net/docs/grains/grain_persistence/index.html#getting-started
Grain persistence
https://learn.microsoft.com/da-dk/dotnet/orleans/grains/grain-persistence/?pivots=orleans-7-0
ADO.NET Database Configuration
https://orleans.azurewebsites.net/docs/host/configuration_guide/adonet_configuration.html

IGrainStorage	Интерфейс хранилища данных.
По умолчанию универсальный (для любого сочетания Grain TData), но внутри можно реализовать ограничение (в рантайме) на допустимые типы.	
IPersistentState<TData>	Тип, используемый для обозначения поля, работающего через механизм хранения Orleans.	
Хранилища	Есть готовые провайдеры хранилища.
Можно реализовать собственный провайдер для любого подходящего БД.
Основной контракт - чтения и запись по ключу Grain	
Типизация хранилища	Есть несколько подходов к типизации.
•	Универсальное решение - когда данные всех Grain хранятся в одной общей таблицы. Таблица содержит столбцы для всех базовых типов ключей, данные в бинарном формате (некоторые реализации хранилищ поддерживают Json).
Данные подход не удобен для выполнения аналитических запросов в самой БД.
•	Реализация отдельных хранилищ, каждое из которых содержит логику сопоставления с конкретной таблицей с конкретными столбцами (приминительно к SQL).	
 	
Параметры сериализации	Serialization configuration in Orleans
https://learn.microsoft.com/da-dk/dotnet/orleans/host/configuration-guide/serialization-configuration?pivots=orleans-7-0
Microsoft.Orleans.Serialization.NewtonsoftJson
https://www.nuget.org/packages/Microsoft.Orleans.Serialization.NewtonsoftJson/7.0.0
OrleansJsonSerializer
https://github.com/dotnet/orleans/blob/main/src/Orleans.Core/Serialization/OrleansJsonSerializer.cs	
Grain. Активация	Orleans.Runtime.Placement.IPlacementDirector	

Один Grain может содержать несколько объектов IPersistState и ITransactionalState.