Исходный код вики Механизмы
Редактировал(а) 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. |