Исходный код вики Механизмы
Редактировал(а) Alexandr Fokin 2023/12/16 14:12
Последние авторы
| author | version | line-number | content |
|---|---|---|---|
| 1 | |(% style="width:196px" %)Транзакции|(% style="width:1299px" %)((( | ||
| 2 | Orleans транзакции | ||
| 3 | [[https:~~/~~/learn.microsoft.com/ru-ru/dotnet/orleans/grains/transactions>>https://learn.microsoft.com/ru-ru/dotnet/orleans/grains/transactions]] | ||
| 4 | |||
| 5 | Update Microsoft Orleans Brings Distributed Transactions to Cloud | ||
| 6 | [[https:~~/~~/www.inapps.net/update-microsoft-orleans-brings-distributed-transactions-to-cloud/>>https://www.inapps.net/update-microsoft-orleans-brings-distributed-transactions-to-cloud/]] | ||
| 7 | |||
| 8 | Поддерживается [[ACID>>doc:Разработка.Базы данных.Концепции.ACID.WebHome]], [[Уровни изоляции>>doc:Разработка.Базы данных.SQL.Механизмы.Транзакции и блокировки.Уровни изоляции | Isolation levels.WebHome]] Serializable isolation. | ||
| 9 | |||
| 10 | [[Распределенные системы. Консистентность>>doc:Архитектура и модели.Группа\. Распределенные системы.Распределенные системы\. Консистентность.WebHome]] | ||
| 11 | |||
| 12 | [[TransactionalStateRecord. Примерная структура>>doc:.TransactionalStateRecord\. Примерная структура.WebHome]] | ||
| 13 | |||
| 14 | [[Транзакция и хранилище>>doc:.Транзакция и хранилище.WebHome]] | ||
| 15 | |||
| 16 | ---- | ||
| 17 | |||
| 18 | При этом данные, задействованные в транзакции, могут располагаться в различных БД (в том числе разных типов), | ||
| 19 | основные требования - возможность атомарно читать и перезаписывать значение по ключу. | ||
| 20 | |||
| 21 | Из минусов - в БД будут находится не только данные модели, но и метаданные для обслуживания механизма транзакций. | ||
| 22 | При этом эти метаданные также постоянно будут считываться и записываться, что немного замедлит единичные операции доступа. | ||
| 23 | |||
| 24 | ---- | ||
| 25 | |||
| 26 | |(% style="width:229px" %){{code language="C#"}}ITransactionalState<TData>{{/code}}|(% style="width:1053px" %)Компонент для взаимодействия с транзакционными данными. | ||
| 27 | Позволяет выполнять логику для чтения и изменения. | ||
| 28 | |(% style="width:229px" %)Хранилище|(% style="width:1053px" %)((( | ||
| 29 | ((( | ||
| 30 | * {{code language="C#"}}ITransactionalStateStorage<TData> | ||
| 31 | ITransactionalStateStorageFactory{{/code}} | ||
| 32 | * В случае использования в качестве хранилища {{code language="C#"}}IGrainStorage{{/code}}, | ||
| 33 | в качестве сохраняемого типа данных будет использоваться {{code language="C#"}}IGrainState<TransactionalStateRecord<TData>>{{/code}}. | ||
| 34 | |||
| 35 | ---- | ||
| 36 | |||
| 37 | |||
| 38 | ))) | ||
| 39 | |||
| 40 | ((( | ||
| 41 | AzureTableTransactionalStateStorage.cs | ||
| 42 | [[https:~~/~~/github.com/dotnet/orleans/blob/main/src/Azure/Orleans.Transactions.AzureStorage/TransactionalState/AzureTableTransactionalStateStorage.cs>>https://github.com/dotnet/orleans/blob/main/src/Azure/Orleans.Transactions.AzureStorage/TransactionalState/AzureTableTransactionalStateStorage.cs]] | ||
| 43 | ))) | ||
| 44 | ))) | ||
| 45 | ))) | ||
| 46 | |(% style="width:196px" %)События|(% style="width:1299px" %)((( | ||
| 47 | [[События и потоки>>doc:Разработка.NET.Библиотеки.События и потоки.WebHome]] | ||
| 48 | |||
| 49 | [Question]: Orleans Observables vs Streams #7042 | ||
| 50 | [[https:~~/~~/github.com/dotnet/orleans/issues/7042>>https://github.com/dotnet/orleans/issues/7042]] | ||
| 51 | |||
| 52 | |(% style="width:163px" %)Observables|(% style="width:1118px" %)((( | ||
| 53 | * Подписчик удерживается активным, даже если новые события не поступают. | ||
| 54 | ))) | ||
| 55 | |(% style="width:163px" %)Streams|(% style="width:1118px" %)((( | ||
| 56 | * Подписчик может деактивироваться, если новых сообщений не поступает. | ||
| 57 | При этом при поступлении он будет активирован. | ||
| 58 | ))) | ||
| 59 | |(% style="width:163px" %) |(% style="width:1118px" %) | ||
| 60 | ))) | ||
| 61 | |(% style="width:196px" %)Таймеры и напоминания. | ||
| 62 | Timers and Reminders.|(% style="width:1299px" %)((( | ||
| 63 | Timers and reminders | ||
| 64 | [[https:~~/~~/learn.microsoft.com/da-dk/dotnet/orleans/grains/timers-and-reminders>>https://learn.microsoft.com/da-dk/dotnet/orleans/grains/timers-and-reminders]] | ||
| 65 | |||
| 66 | |(% style="width:101px" %)Timer|(% style="width:1180px" %)((( | ||
| 67 | * Timer живет до деактивации Grain. | ||
| 68 | Никуда не сохранятся. | ||
| 69 | * Не использует планировщик Grain для выполнения. | ||
| 70 | Не увеличивает время жизни Grain (не отменят деактивацию). | ||
| 71 | ))) | ||
| 72 | |(% style="width:101px" %)Reminder|(% style="width:1180px" %)((( | ||
| 73 | * Reminder хранится во внешнем постоянном хранилище. | ||
| 74 | * Активирует Grain, если он не запущен в момент выполнения. | ||
| 75 | * Выполняется в планировщике Grain. | ||
| 76 | ))) | ||
| 77 | ))) | ||
| 78 | |(% style="width:196px" %)Постоянное хранение. | ||
| 79 | Persist storage.|(% style="width:1299px" %)((( | ||
| 80 | Persistence | ||
| 81 | [[https:~~/~~/orleans.azurewebsites.net/docs/grains/grain_persistence/index.html#getting-started>>https://orleans.azurewebsites.net/docs/grains/grain_persistence/index.html#getting-started]] | ||
| 82 | |||
| 83 | Grain persistence | ||
| 84 | [[https:~~/~~/learn.microsoft.com/da-dk/dotnet/orleans/grains/grain-persistence/?pivots=orleans-7-0>>https://learn.microsoft.com/da-dk/dotnet/orleans/grains/grain-persistence/?pivots=orleans-7-0]] | ||
| 85 | |||
| 86 | ADO.NET Database Configuration | ||
| 87 | [[https:~~/~~/orleans.azurewebsites.net/docs/host/configuration_guide/adonet_configuration.html>>https://orleans.azurewebsites.net/docs/host/configuration_guide/adonet_configuration.html]] | ||
| 88 | |||
| 89 | ---- | ||
| 90 | |||
| 91 | (% style="width:1231px" %) | ||
| 92 | |(% style="width:227px" %){{code language="C#"}}IGrainStorage{{/code}}|(% style="width:1001px" %)Интерфейс хранилища данных. | ||
| 93 | По умолчанию универсальный (для любого сочетания Grain TData), но внутри можно реализовать ограничение (в рантайме) на допустимые типы. | ||
| 94 | |(% style="width:227px" %){{code language="C#"}}IPersistentState<TData>{{/code}}|(% style="width:1001px" %)Тип, используемый для обозначения поля, работающего через механизм хранения Orleans. | ||
| 95 | |||
| 96 | |Хранилища|Есть готовые провайдеры хранилища. | ||
| 97 | Можно реализовать собственный провайдер для любого подходящего БД. | ||
| 98 | Основной контракт - чтения и запись по ключу Grain | ||
| 99 | |Типизация хранилища|((( | ||
| 100 | Есть несколько подходов к типизации. | ||
| 101 | |||
| 102 | * Универсальное решение - когда данные всех Grain хранятся в одной общей таблицы. Таблица содержит столбцы для всех базовых типов ключей, данные в бинарном формате (некоторые реализации хранилищ поддерживают Json). | ||
| 103 | Данные подход не удобен для выполнения аналитических запросов в самой БД. | ||
| 104 | * Реализация отдельных хранилищ, каждое из которых содержит логику сопоставления с конкретной таблицей с конкретными столбцами (приминительно к SQL). | ||
| 105 | ))) | ||
| 106 | |||
| 107 | |||
| 108 | ))) | ||
| 109 | |(% style="width:196px" %)Параметры сериализации|(% style="width:1299px" %)((( | ||
| 110 | Serialization configuration in Orleans | ||
| 111 | [[https:~~/~~/learn.microsoft.com/da-dk/dotnet/orleans/host/configuration-guide/serialization-configuration?pivots=orleans-7-0>>https://learn.microsoft.com/da-dk/dotnet/orleans/host/configuration-guide/serialization-configuration?pivots=orleans-7-0]] | ||
| 112 | |||
| 113 | Microsoft.Orleans.Serialization.NewtonsoftJson | ||
| 114 | [[https:~~/~~/www.nuget.org/packages/Microsoft.Orleans.Serialization.NewtonsoftJson/7.0.0>>https://www.nuget.org/packages/Microsoft.Orleans.Serialization.NewtonsoftJson/7.0.0]] | ||
| 115 | |||
| 116 | OrleansJsonSerializer | ||
| 117 | [[https:~~/~~/github.com/dotnet/orleans/blob/main/src/Orleans.Core/Serialization/OrleansJsonSerializer.cs>>https://github.com/dotnet/orleans/blob/main/src/Orleans.Core/Serialization/OrleansJsonSerializer.cs]] | ||
| 118 | ))) | ||
| 119 | |(% style="width:196px" %)Grain. Активация|(% style="width:1299px" %){{code language="С#"}}Orleans.Runtime.Placement.IPlacementDirector{{/code}} | ||
| 120 | |||
| 121 | ---- | ||
| 122 | |||
| 123 | Один Grain может содержать несколько объектов IPersistState и ITransactionalState. |