首页/新闻资讯/正文详情

Orleans ADO.NET 提供程序配置指南:为集群、持久化、提醒与流式传输接入关系型数据库

发布时间:2026/9/24 17:18:07 来源:云帆数科 栏目:资讯中心
Orleans ADO.NET 提供程序配置指南:为集群、持久化、提醒与流式传输接入关系型数据库
后端微服务【免费下载链接】orleansCloud Native application framework for .NET项目地址https://gitcode.com/gh_mirrors/or/orleans点击查看免费下载本文是 Orleans 官方配置文档configuring-ado-dot-net-providers.md的深度实践版系统讲解如何用 ADO.NET 提供程序让 Orleans 的集群成员管理Clustering、Grain 持久化Grain Storage、提醒Reminders、Grain 目录Grain Directory与流式传输Streaming共用一套关系型数据库。读完本文你将掌握各能力对应的 NuGet 包与配置位置、数据库脚本的安装顺序与定制原则、SQL Server / PostgreSQL / MySQL / MariaDB / Oracle 的完整配置方法、基于DbDataSource的高级连接源注入方式以及声明式配置与生产运维要点。ADO.NET 提供程序与运行时能力总览Orleans 的 ADO.NET 提供程序使用一个关系型数据库承载一种或多种运行时能力。每种能力对应独立的 NuGet 包并可在不同端Silo 或外部客户端上配置能力包配置位置集群ClusteringMicrosoft.Orleans.Clustering.AdoNetSilo 与外部客户端Grain 存储Grain storageMicrosoft.Orleans.Persistence.AdoNetSilo提醒RemindersMicrosoft.Orleans.Reminders.AdoNetSiloGrain 目录Grain directoryMicrosoft.Orleans.GrainDirectory.AdoNetSilo流式传输StreamingMicrosoft.Orleans.Streaming.AdoNetSilo 与外部客户端安装原则只安装应用实际用到的能力包同时引用对应的数据库驱动包driver package。例如只做集群 持久化就只安装 Clustering 与 Persistence 两个包并额外引用Microsoft.Data.SqlClient等驱动。从源码看这些包之间的依赖是解耦的集群能力通过 AdoNetHostingExtensions.cs 向 DI 容器注册IMembershipTableSilo 侧或IGatewayListProvider客户端侧实现Grain 存储通过 AdoNetGrainStorageSiloBuilderExtensions.cs 提供AddAdoNetGrainStorage/AddAdoNetGrainStorageAsDefault提醒服务通过 SiloBuilderReminderExtensions.cs 提供UseAdoNetReminderService。各能力按需注册互不强制。准备数据库先运行主脚本再运行能力脚本每个提供程序目录旁都存放着对应的 SQL 脚本。正确的安装顺序是先运行主脚本Main建立基础表与查询注册表再运行该能力自己的脚本。以 SQL Server 上同时启用集群与持久化为例依次执行src/AdoNet/Shared/SQLServer-Main.sqlsrc/AdoNet/Orleans.Clustering.AdoNet/SQLServer-Clustering.sqlsrc/AdoNet/Orleans.Persistence.AdoNet/SQLServer-Persistence.sql其他数据库与能力的脚本对应关系如下完整清单见 adonet-configuration.md脚本类型SQL ServerPostgreSQLMySQL/MariaDBOracleSQLite主脚本SQLServer-Main.sqlPostgreSQL-Main.sqlMySQL-Main.sqlOracle-Main.sqlSqlite-Main.sql集群SQLServer-Clustering.sqlPostgreSQL-Clustering.sqlMySQL-Clustering.sqlOracle-Clustering.sql—持久化SQLServer-Persistence.sqlPostgreSQL-Persistence.sqlMySQL-Persistence.sqlOracle-Persistence.sqlSqlite-Persistence.sql提醒SQLServer-Reminders.sqlPostgreSQL-Reminders.sqlMySQL-Reminders.sqlOracle-Reminders.sql—Grain 目录SQLServer-GrainDirectory.sqlPostgreSQL-GrainDirectory.sqlMySQL-GrainDirectory.sql——流式传输SQLServer-Streaming.sqlPostgreSQL-Streaming.sqlMySQL-Streaming.sql——并非每种能力都支持每种数据库provider 目录中是否存在对应脚本是判断该 Orleans 版本是否支持某数据库的权威依据。例如 Grain 目录与流式传输目前没有 Oracle 脚本SQLite 仅覆盖本地持久化场景Sqlite-Main.sql与Sqlite-Persistence.sql。配置前务必核实所选能力在目标数据库上有对应脚本。[!IMPORTANT] 应使用与应用部署的 Orleans 包同一版本发布的脚本。OrleansQuery脚本与查询的契约机制主脚本不只是建表。以 SQLServer-Main.sql 为例它会创建一个OrleansQuery表QueryKeyQueryText两列用于注册 Orleans 运行时会用到的全部 SQL 语句各能力脚本随后通过INSERT INTO OrleansQuery写入自己的查询定义。主脚本头部注释明确了这一契约Orleans按列名和类型读取结果按参数名和类型写入因此脚本必须保留输入/输出的名称与类型允许针对具体厂商做部署级调优只要不破坏接口契约各厂商脚本应尽量保留一致的约束名便于排查问题ETag 是不透明的版本列实现类型不限SQL Server 脚本用整数实现返回 TRUE/FALSE 的查询按“0 为真、0 为假”解释异常会触发 Orleans 重试。例如 SQLServer-Clustering.sql 创建OrleansMembershipVersionTable以DeploymentId为主键、维护Version与OrleansMembershipTable记录每个 Silo 的地址、端口、代数、状态、心跳时间等并把UpdateIAmAlivetimeKey、InsertMembershipVersionKey等查询写入OrleansQuery。运行期 provider 只通过OrleansQuery中的语句访问数据库。生产库布局与 Schema 定制脚本创建的是未限定名称unqualified的表落在数据库用户的默认 schema 下provider 查询也以未限定名引用这些对象。Orleans 没有提供选择 schema 或 filegroup 的配置项。如果生产库需要专用 schema、filegroup、分区或其他存储布局必须把定制放进数据库部署流程中自行实现并保持以下要素与 Orleans 兼容表名、列名、参数名OrleansQuery中存储的查询及其返回结果形状result shape。脚本只是起点 schema不是放之四海皆准的生产布局。定制后的脚本与查询应在应用启动路径之外完成应用与验证例如先用预发布集群验证不要把“让 Silo 在运行时自行建表”当作常规手段也不要给 Silo 授予 schema-owner 级别的权限。schema 变更应作为受控的部署步骤执行。配置 SQL ServerSQL Server 使用Microsoft.Data.SqlClient驱动与Microsoft.Data.SqlClientinvariant。以下示例来自官方示例片段 HostingExamples.csadonet_silo与adonet_client两段在同一 Silo 上同时启用集群、提醒与 Grain 存储var builder Host.CreateApplicationBuilder(args); var connectionString builder.Configuration.GetConnectionString(orleans) ?? throw new InvalidOperationException( Connection string orleans is required.); builder.UseOrleans(siloBuilder { siloBuilder.UseAdoNetClustering(options { options.Invariant Microsoft.Data.SqlClient; options.ConnectionString connectionString; }); siloBuilder.UseAdoNetReminderService(options { options.Invariant Microsoft.Data.SqlClient; options.ConnectionString connectionString; }); siloBuilder.AddAdoNetGrainStorageAsDefault(options { options.Invariant Microsoft.Data.SqlClient; options.ConnectionString connectionString; }); });外部客户端与 Silo 使用同一个集群数据库builder.UseOrleansClient(clientBuilder { clientBuilder.UseAdoNetClustering(options { options.Invariant Microsoft.Data.SqlClient; options.ConnectionString connectionString; }); });[!IMPORTANT]System.Data.SqlClient不是 SQL Server 的 Orleans invariant。必须引用Microsoft.Data.SqlClient包并使用Microsoft.Data.SqlClientinvariant。从源码看UseAdoNetClustering在 Silo 侧注册 AdoNetClusteringTable 作为IMembershipTable实现在客户端侧注册 AdoNetGatewayListProvider 作为IGatewayListProvider实现见 AdoNetHostingExtensions.cs。也就是说客户端只读网关列表不直接参与成员表写入。Invariant是必填项Orleans 用它选择数据库特有的查询与行为而不是仅靠连接字符串自动推断。各能力 Option 类如 AdoNetClusteringSiloOptions.cs都包含ConnectionString、DataSource与Invariant三个核心属性其中连接字符串与数据源属性带有[Redact]标记日志输出时会自动脱敏。配置其他数据库PostgreSQL、MySQL/MariaDB 与 OraclePostgreSQL、MySQL/MariaDB 与 Oracle 的 Orleans 配置形状与 SQL Server 完全一致只需同时替换三样东西驱动包、invariant、SQL 脚本。官方对应关系如下数据库驱动包Orleans invariantSQL ServerMicrosoft.Data.SqlClientMicrosoft.Data.SqlClientPostgreSQLNpgsqlNpgsqlMySQL/MariaDBMySql.DataMySql.Data.MySqlClientOracleOracle.ManagedDataAccess.CoreOracle.DataAccess.Client此外Orleans 还识别开源 MySQL 驱动MySqlConnectorinvariant 为MySql.Data.MySqlConnector。完整的 invariant 支持列表可以在源码 AdoNetInvariants.cs 中确认共六项Microsoft.Data.SqlClient、Npgsql、MySql.Data.MySqlClient、MySql.Data.MySqlConnector、Oracle.DataAccess.Client、System.Data.SQLite。invariant 并不仅是字符串标记。从 DbConstantsStore.cs 可以看到每个 invariant 都绑定了一组数据库常量标识符转义字符SQL Server 用[]、PostgreSQL 用、MySQL 用、是否原生支持命令取消、是否为同步 ADO.NET 实现MySQL 与 Oracle 标记为同步实现执行时会被包装到线程池任务中以及命令拦截器Oracle 使用专门的OracleCommandInterceptor用于改写 LIMIT 之类的语法差异。这正是“invariant 决定数据库特定查询与行为”的底层机制。配置 PostgreSQL 的示意builder.UseOrleans(siloBuilder { siloBuilder.UseAdoNetClustering(options { options.Invariant Npgsql; options.ConnectionString connectionString; }); });MySQL/MariaDB 只需把Invariant改为MySql.Data.MySqlClient、Oracle 改为Oracle.DataAccess.Client并分别选用对应的脚本。使用 DbDataSource 作为连接源每个 ADO.NET 提供程序的 Option 类型都接受连接字符串或DbDataSource二选一。DbDataSource适合连接字符串无法表达驱动级配置的场景例如需要定期刷新的认证令牌token。配置原则与行为约束恰好配置一个连接源。Orleans 会拒绝同时提供ConnectionString与DataSource、或两者都缺失的配置——这一点同时体现在配置验证器AdoNetGrainStorageOptionsValidator与运行时工厂 RelationalStorage.CreateInstance 中两者都会抛出“必须二选一”的异常即使使用数据源仍然必须设置Invariant因为 Orleans 要据此选择数据库特有的查询与行为将数据源注册为singleton并通过 provider 的OptionsBuilder配置重载解析命名 provider 可以解析不同的keyed 数据源keyed data source生命周期归属数据源由依赖注入容器或应用拥有并负责保持存活Orleans 只打开与释放单个连接不会释放数据源本身。从 RelationalStorage.cs 的OpenConnectionAsync可以看到两种路径的分流配置了DbDataSource时调用_dataSource.OpenConnectionAsync(...)否则通过DbConnectionFactory.CreateConnection(invariant, connectionString)手工创建连接再OpenAsync。声明式配置Declarative Configuration安装 ADO.NET 提供程序包后会自动注册AdoNet这个声明式 provider 类型。这样便可以在配置文件如appsettings.json中直接声明而无需编写代码。例如在一个应用中同时启用 AdoNet 集群、提醒与默认 Grain 存储{ Orleans: { ServiceId: orders, ClusterId: orders-production, Clustering: { ProviderType: AdoNet, Invariant: Microsoft.Data.SqlClient, ConnectionString: ... }, Reminders: { ProviderType: AdoNet, Invariant: Microsoft.Data.SqlClient, ConnectionString: ... }, GrainStorage: { Default: { ProviderType: AdoNet, Invariant: Microsoft.Data.SqlClient, ConnectionString: ... } } } }声明式配置与代码配置最终汇聚到同一套 Option 与 provider 构建器从 AdoNetClusteringProviderBuilder.cs 与 AdoNetGrainStorageProviderBuilder.cs 的源码结构看它们正是声明式配置ProviderType: AdoNet到UseAdoNetClustering/AddAdoNetGrainStorage的桥梁。[!IMPORTANT] 连接字符串属于机密信息应存放在密钥提供程序secret provider或部署环境变量中而不是提交到版本库的配置文件里。生产运维指导保持ClusterOptions.ServiceId稳定Orleans 依据它读取应用所属的行成员表、存储表按DeploymentId隔离。变更 ServiceId 会使其读取不到预期数据。连接池规模按“Silo 进程数 客户端进程数”的总量规划数据库连接池大小避免连接池耗尽。安全基线启用连接加密如 SQL Server 的EncryptTrue使用最小权限的数据库身份能使用托管身份managed identity的场景优先使用托管身份。监控指标持续监控数据库延迟、限流throttling、死锁与连接池耗尽。故障演练在负载下测试数据库故障转移与滚动部署行为。备份策略Grain 状态备份必须遵循应用的恢复目标RPO/RTO成员表membership行是瞬态数据不能替代状态备份。schema 升级从旧版本升级时检查并应用各 providerMigrations目录下的升级脚本当前仓库中可见的如 SQLServer-Clustering-3.7.0.sql、PostgreSQL-Persistence-3.6.0.sql、PostgreSQL-Reminders-3.6.0.sql 等。升级流程建议为按恢复策略备份数据 → 新库先跑主脚本 → 再跑各能力脚本 → 旧 schema 升级时依次审查并执行Migrations下的脚本 → 用同驱动、同数据库引擎版本的预发布集群验证。关于 Azure SQL 的托管身份如果连接的是 Azure SQLMicrosoft 建议使用**托管身份managed identities for Azure resources**作为认证方式——它是当前最安全的认证流程之一详见 managed-identities.md 中的官方说明。配合上文介绍的DbDataSource方案可以在数据源层完成基于托管身份/令牌的认证配置从而避免在连接字符串中存放静态凭据。延伸阅读与源码导航官方配套参考文档ADO.NET database configuration脚本与 invariant 总表官方代码示例片段HostingExamples.csadonet_silo/adonet_client/named_providers共享存储层invariant 常量、连接工厂、查询执行器、数据库常量表src/AdoNet/Shared各能力源码目录集群 src/AdoNet/Orleans.Clustering.AdoNet、持久化 src/AdoNet/Orleans.Persistence.AdoNet、提醒 src/AdoNet/Orleans.Reminders.AdoNet、Grain 目录 src/AdoNet/Orleans.GrainDirectory.AdoNet、流式传输 src/AdoNet/Orleans.Streaming.AdoNet赞分享后端微服务【免费下载链接】orleansCloud Native application framework for .NET项目地址https://gitcode.com/gh_mirrors/or/orleans点击查看免费下载相关推荐Orleans Google Cloud Firestore 提供程序配置指南集群、目录、持久化与提醒服务Orleans Google Cloud Firestore 提供程序配置指南集群、目录、持久化与提醒服务 本指南讲解如何在 Orleans 中使用 Goog后端微服务Orleans 关系数据库ADO.NETGrain 持久化实战指南SQL Server/MySQL/PostgreSQL/Oracle/SQLite 配置与原理Orleans 关系数据库ADO.NETGrain 持久化实战指南SQL Server/MySQL/PostgreSQL/Oracle/SQLite 配置后端微服务Orleans Grain 持久化深度指南IPersistentState、存储提供程序与状态演化Orleans Grain 持久化深度指南IPersistentState、存储提供程序与状态演化 Grain 持久化grain persistence是后端微服务上一篇SDWebImage 手动安装指南从源码构建 Framework、静态库与子工程集成的完整实践下一篇Agent Skills 开源仓库贡献指南从 Mintlify 文档站搭建到 AI 协作披露的完整实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

PHPStan 错误标识符 property.writeOnly 详解:如何检测并修复对 `@property-write` 只写属性的读取
PHPStan 错误标识符 property.writeOnly 详解:如何检测并修复对 `@property-write` 只写属性的读取

开发工具代码质量静态分析 【免费下载链接】phpstan PHP Static Analysis Tool - discover bugs in your code without running it! 项目地址: https://gitcode.com/gh_mirrors/ph/phpstan 点击查看 免费下载 PHPStan 的 property.writeOnly 错误标识符&#xff08… · 2026/9/24 17:18:07

NVIDIA RTX Pro5500新卡上架,黄哥心里有我们吗?
NVIDIA RTX Pro5500新卡上架,黄哥心里有我们吗?

2026 年 9 月,国内算力圈同时发生三件事:RTX 5090 32G 服务器版站上 5 万元、RTX PRO 6000 96G 服务器版报到 18 万元,而 NVIDIA 又静默上架了一张 84GB 的新卡 ——RTX PRO 5500 Blackwell,价格一栏写着"即将推出"。诶… · 2026/9/24 17:18:01

shadcn-vue Input OTP 组件实战指南:从安装到表单集成的可访问一次性密码输入
shadcn-vue Input OTP 组件实战指南:从安装到表单集成的可访问一次性密码输入

UI组件前端 【免费下载链接】shadcn-vue Vue port of shadcn-ui 项目地址: https://gitcode.com/gh_mirrors/sh/shadcn-vue 点击查看 免费下载 本文围绕 shadcn-vue 官方文档 Input OTP 组件文档 展开,系统讲解基于 vue-input-otp 封装的一次性密码输入… · 2026/9/24 17:18:01

雷达测角基础
雷达测角基础

相位测角法两天线相位法测角原理图示中黑色倒三角,分别为天线1和2,当目标距离两天线远距离时,那么目标与两天线的连线,即黑色虚线和黄色虚线,可近似看为平行。以天线2向目标与天线1的连线做垂直线,即蓝色虚… · 2026/9/24 17:54:28

单片机物联网|毕设答辩|毕业设计项目|观赏鱼缸控制系统设计
单片机物联网|毕设答辩|毕业设计项目|观赏鱼缸控制系统设计

标题:观赏鱼缸控制系统设计文档介绍:1 绪论1.1 研究背景及意义城市化进程持续推进,现代都市居民的生活节奏变得更快,工作压力不断加大,人们对于精神文化生活的追求愈加强烈,在此情形下,观赏鱼养… · 2026/9/24 17:54:28

读书有感:“换位思考”新的解读
读书有感:“换位思考”新的解读

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 17:54:28

专利说明书的技术方案:先摆清要达成什么,再倒推哪几处非写不可
专利说明书的技术方案:先摆清要达成什么,再倒推哪几处非写不可

技术方案写不写到可实施,不看篇幅,看倒推得动不动:先把要达成的技术效果摆出来,再看每一处动作、结构与参数是被哪条效果逼出来的。落笔前有两样可先用:一样立起层级,交免费智能大纲;一样把结构… · 2026/9/24 17:54:21

DeepSeek    LeetCode 103. 二叉树的锯齿形层序遍历 Python3实现
DeepSeek LeetCode 103. 二叉树的锯齿形层序遍历 Python3实现

LeetCode 103. 二叉树的锯齿形层序遍历 Python3 实现 思路 与普通层序遍历相同,使用队列逐层处理。区别在于需要交替改变每层的遍历方向:维护布尔变量 left_to_right 表示当前层方向。每层用一个 deque 收集节点值:从左到右&#xff1a… · 2026/9/24 17:54:15

DeepSeek    LeetCode 103. 二叉树的锯齿形层序遍历 Golang实现
DeepSeek LeetCode 103. 二叉树的锯齿形层序遍历 Golang实现

LeetCode 103. 二叉树的锯齿形层序遍历 Golang 实现 思路 与普通层序遍历一致,用队列逐层处理。区别在于需要交替改变每层的填充方向:维护布尔变量 leftToRight 表示当前层方向。每层预分配 level : make([]int, size):从左到右&#x… · 2026/9/24 17:54:15

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码