Исходный код вики Механизмы

Редактировал(а) Alexandr Fokin 2023/12/16 14:12

Скрыть последних авторов
Alexandr Fokin 2.12 1 |(% style="width:196px" %)Транзакции|(% style="width:1299px" %)(((
Alexandr Fokin 1.2 2 Orleans транзакции
Alexandr Fokin 1.1 3 [[https:~~/~~/learn.microsoft.com/ru-ru/dotnet/orleans/grains/transactions>>https://learn.microsoft.com/ru-ru/dotnet/orleans/grains/transactions]]
Alexandr Fokin 1.2 4
5 Update Microsoft Orleans Brings Distributed Transactions to Cloud
Alexandr Fokin 1.1 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
Alexandr Fokin 6.1 8 Поддерживается [[ACID>>doc:Разработка.Базы данных.Концепции.ACID.WebHome]], [[Уровни изоляции>>doc:Разработка.Базы данных.SQL.Механизмы.Транзакции и блокировки.Уровни изоляции | Isolation levels.WebHome]] Serializable isolation.
Alexandr Fokin 2.8 9
Alexandr Fokin 2.26 10 [[Распределенные системы. Консистентность>>doc:Архитектура и модели.Группа\. Распределенные системы.Распределенные системы\. Консистентность.WebHome]]
11
Alexandr Fokin 2.25 12 [[TransactionalStateRecord. Примерная структура>>doc:.TransactionalStateRecord\. Примерная структура.WebHome]]
13
14 [[Транзакция и хранилище>>doc:.Транзакция и хранилище.WebHome]]
15
Alexandr Fokin 2.8 16 ----
17
Alexandr Fokin 2.12 18 При этом данные, задействованные в транзакции, могут располагаться в различных БД (в том числе разных типов),
Alexandr Fokin 2.16 19 основные требования - возможность атомарно читать и перезаписывать значение по ключу.
Alexandr Fokin 2.14 20
Alexandr Fokin 2.12 21 Из минусов - в БД будут находится не только данные модели, но и метаданные для обслуживания механизма транзакций.
Alexandr Fokin 2.14 22 При этом эти метаданные также постоянно будут считываться и записываться, что немного замедлит единичные операции доступа.
Alexandr Fokin 2.12 23
24 ----
25
Alexandr Fokin 2.8 26 |(% style="width:229px" %){{code language="C#"}}ITransactionalState<TData>{{/code}}|(% style="width:1053px" %)Компонент для взаимодействия с транзакционными данными.
27 Позволяет выполнять логику для чтения и изменения.
28 |(% style="width:229px" %)Хранилище|(% style="width:1053px" %)(((
Alexandr Fokin 2.22 29 (((
Alexandr Fokin 2.8 30 * {{code language="C#"}}ITransactionalStateStorage<TData>
Alexandr Fokin 2.9 31 ITransactionalStateStorageFactory{{/code}}
Alexandr Fokin 2.10 32 * В случае использования в качестве хранилища {{code language="C#"}}IGrainStorage{{/code}},
Alexandr Fokin 2.13 33 в качестве сохраняемого типа данных будет использоваться {{code language="C#"}}IGrainState<TransactionalStateRecord<TData>>{{/code}}.
Alexandr Fokin 2.8 34
Alexandr Fokin 2.22 35 ----
36
Alexandr Fokin 2.8 37
Alexandr Fokin 1.2 38 )))
Alexandr Fokin 2.22 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]]
Alexandr Fokin 2.8 43 )))
Alexandr Fokin 2.22 44 )))
45 )))
Alexandr Fokin 2.12 46 |(% style="width:196px" %)События|(% style="width:1299px" %)(((
Alexandr Fokin 2.11 47 [[События и потоки>>doc:Разработка.NET.Библиотеки.События и потоки.WebHome]]
48
Alexandr Fokin 2.5 49 [Question]: Orleans Observables vs Streams #7042
50 [[https:~~/~~/github.com/dotnet/orleans/issues/7042>>https://github.com/dotnet/orleans/issues/7042]]
Alexandr Fokin 2.2 51
52 |(% style="width:163px" %)Observables|(% style="width:1118px" %)(((
53 * Подписчик удерживается активным, даже если новые события не поступают.
54 )))
55 |(% style="width:163px" %)Streams|(% style="width:1118px" %)(((
56 * Подписчик может деактивироваться, если новых сообщений не поступает.
57 При этом при поступлении он будет активирован.
58 )))
Alexandr Fokin 2.5 59 |(% style="width:163px" %) |(% style="width:1118px" %)
Alexandr Fokin 2.2 60 )))
Alexandr Fokin 2.12 61 |(% style="width:196px" %)Таймеры и напоминания.
62 Timers and Reminders.|(% style="width:1299px" %)(((
Alexandr Fokin 2.4 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]]
Alexandr Fokin 1.2 65
Alexandr Fokin 2.5 66 |(% style="width:101px" %)Timer|(% style="width:1180px" %)(((
67 * Timer живет до деактивации Grain.
68 Никуда не сохранятся.
69 * Не использует планировщик Grain для выполнения.
Alexandr Fokin 2.21 70 Не увеличивает время жизни Grain (не отменят деактивацию).
Alexandr Fokin 2.5 71 )))
72 |(% style="width:101px" %)Reminder|(% style="width:1180px" %)(((
Alexandr Fokin 2.4 73 * Reminder хранится во внешнем постоянном хранилище.
Alexandr Fokin 2.5 74 * Активирует Grain, если он не запущен в момент выполнения.
75 * Выполняется в планировщике Grain.
Alexandr Fokin 2.4 76 )))
Alexandr Fokin 2.5 77 )))
Alexandr Fokin 2.12 78 |(% style="width:196px" %)Постоянное хранение.
79 Persist storage.|(% style="width:1299px" %)(((
Alexandr Fokin 2.4 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
Alexandr Fokin 2.7 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
Alexandr Fokin 2.4 96 |Хранилища|Есть готовые провайдеры хранилища.
97 Можно реализовать собственный провайдер для любого подходящего БД.
98 Основной контракт - чтения и запись по ключу Grain
99 |Типизация хранилища|(((
100 Есть несколько подходов к типизации.
101
102 * Универсальное решение - когда данные всех Grain хранятся в одной общей таблицы. Таблица содержит столбцы для всех базовых типов ключей, данные в бинарном формате (некоторые реализации хранилищ поддерживают Json).
103 Данные подход не удобен для выполнения аналитических запросов в самой БД.
Alexandr Fokin 2.6 104 * Реализация отдельных хранилищ, каждое из которых содержит логику сопоставления с конкретной таблицей с конкретными столбцами (приминительно к SQL).
Alexandr Fokin 2.4 105 )))
106
Alexandr Fokin 1.1 107
Alexandr Fokin 2.4 108 )))
Alexandr Fokin 2.19 109 |(% style="width:196px" %)Параметры сериализации|(% style="width:1299px" %)(((
110 Serialization configuration in Orleans
Alexandr Fokin 2.18 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]]
Alexandr Fokin 2.4 112
Alexandr Fokin 2.19 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]]
Alexandr Fokin 2.23 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]]
Alexandr Fokin 2.19 118 )))
Alexandr Fokin 2.24 119 |(% style="width:196px" %)Grain. Активация|(% style="width:1299px" %){{code language="С#"}}Orleans.Runtime.Placement.IPlacementDirector{{/code}}
Alexandr Fokin 2.19 120
Alexandr Fokin 2.8 121 ----
122
123 Один Grain может содержать несколько объектов IPersistState и ITransactionalState.