使用 SQL Service broker 与 Web 服务队列
Using SQL Service broker vs Queues with web service
我们有一个带有中央数据库(SQL 服务器)和小型客户端(KIOSK- 带有本地数据库(SQL Express))的遗留系统,它是使用 WPF 应用程序编写的。客户端和中央数据库之间的数据同步是使用 C# ADO.NET sql 语句完成的。这会对性能造成巨大影响。目前我们拥有的客户数量为 400 家,而且还会增加。每个客户端每天向中央数据库发送 100,000 条记录。
我们计划使用 SQL Service Broker
重写此同步部分
主要问题之一,客户端和中央数据库之间的架构不同。表未规范化,最坏的情况是大多数列使用 nvarchar 数据类型来存储日期时间、整数数据。
我担心使用 Service Broker,因为大多数业务逻辑将使用存储过程编写。
我想知道使用该技术是否是最好的,或者我们是否需要考虑使用 Message Queue 创建基于 REST 的服务。
TL;DR: 我建议不要在这种环境中使用 Service Broker。
详细解答
虽然 Service Broker 确实是一种非常轻量级和可靠的通信机制,但它在设计时考虑到了不同的目标。也就是说,它在静态拓扑中效果最好,管理员一次设置所有内容,然后整个系统运行多年,几乎没有变化。
根据我从您的解释中了解到的情况,您连接的主机网络更加动态,每天都有主机来来去去。这会给您的支持带来高昂的维护成本,因为为了在属于不同 SQL 服务器实例的两个 Service Broker 端点之间建立通信,您将需要(除许多其他事项外)生成至少一对证书和在参与的实例之间交换它们的 public 密钥,之后它们将必须部署在双方的 master
和主题数据库中。
此证书交换和部署应在 Service Broker 消息传递成为可能之前完成,因此您需要服务器之间的另一个通信通道才能进行交换。通常,这是由 DBA 手动完成的,因为与潜在的传输级密钥丢失相关的高安全风险。然而,在您的环境中,人们很可能根本无法跟上。更不用说人为错误的可能性,由于大量重复的手动工作,人为错误的可能性会很高。
简而言之,我建议寻找更容易部署和维护的东西。 Change tracking 可能是一个好的开始;至于传输,你有一个完整的大杂烩选择,从 WCF 到 WebAPI(到过去几年出现的任何其他东西)。
我们有一个带有中央数据库(SQL 服务器)和小型客户端(KIOSK- 带有本地数据库(SQL Express))的遗留系统,它是使用 WPF 应用程序编写的。客户端和中央数据库之间的数据同步是使用 C# ADO.NET sql 语句完成的。这会对性能造成巨大影响。目前我们拥有的客户数量为 400 家,而且还会增加。每个客户端每天向中央数据库发送 100,000 条记录。
我们计划使用 SQL Service Broker
重写此同步部分主要问题之一,客户端和中央数据库之间的架构不同。表未规范化,最坏的情况是大多数列使用 nvarchar 数据类型来存储日期时间、整数数据。
我担心使用 Service Broker,因为大多数业务逻辑将使用存储过程编写。
我想知道使用该技术是否是最好的,或者我们是否需要考虑使用 Message Queue 创建基于 REST 的服务。
TL;DR: 我建议不要在这种环境中使用 Service Broker。
详细解答
虽然 Service Broker 确实是一种非常轻量级和可靠的通信机制,但它在设计时考虑到了不同的目标。也就是说,它在静态拓扑中效果最好,管理员一次设置所有内容,然后整个系统运行多年,几乎没有变化。
根据我从您的解释中了解到的情况,您连接的主机网络更加动态,每天都有主机来来去去。这会给您的支持带来高昂的维护成本,因为为了在属于不同 SQL 服务器实例的两个 Service Broker 端点之间建立通信,您将需要(除许多其他事项外)生成至少一对证书和在参与的实例之间交换它们的 public 密钥,之后它们将必须部署在双方的 master
和主题数据库中。
此证书交换和部署应在 Service Broker 消息传递成为可能之前完成,因此您需要服务器之间的另一个通信通道才能进行交换。通常,这是由 DBA 手动完成的,因为与潜在的传输级密钥丢失相关的高安全风险。然而,在您的环境中,人们很可能根本无法跟上。更不用说人为错误的可能性,由于大量重复的手动工作,人为错误的可能性会很高。
简而言之,我建议寻找更容易部署和维护的东西。 Change tracking 可能是一个好的开始;至于传输,你有一个完整的大杂烩选择,从 WCF 到 WebAPI(到过去几年出现的任何其他东西)。