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

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

Последние авторы
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.