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