Транзакции

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>>.

 

События

События и потоки

[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).

 

Параметры сериализации
Grain. АктивацияOrleans.Runtime.Placement.IPlacementDirector

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

Теги: