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.