Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf 将分布式数据收集到中央数据库中_Wcf_Rabbitmq_Msmq_Zeromq_Data Distribution Service - Fatal编程技术网

Wcf 将分布式数据收集到中央数据库中

Wcf 将分布式数据收集到中央数据库中,wcf,rabbitmq,msmq,zeromq,data-distribution-service,Wcf,Rabbitmq,Msmq,Zeromq,Data Distribution Service,我的任务是更新现有的收集销售点数据的系统,并将其插入中央数据库。目前正在工作的是基于FTP/SFTP传输的,信息每天发送一次,通常是在晚上。不幸的是,由于不稳定的连接链路(低质量的2G/3G调制解调器),一些文件似乎已损坏。只有几家商店通过这种方式连接起来,一切都很顺利,但随着商店数量的增加,错误变得越来越频繁。更糟糕的是,将数据插入中央数据库所需的时间长达12-14小时(包括等待从所有商店下载数据)这不会发生在工作日,因为这会阻碍创建销售报告的过程和数据库的其他活动,所以我们在这里的处理时间非

我的任务是更新现有的收集销售点数据的系统,并将其插入中央数据库。目前正在工作的是基于FTP/SFTP传输的,信息每天发送一次,通常是在晚上。不幸的是,由于不稳定的连接链路(低质量的2G/3G调制解调器),一些文件似乎已损坏。只有几家商店通过这种方式连接起来,一切都很顺利,但随着商店数量的增加,错误变得越来越频繁。更糟糕的是,将数据插入中央数据库所需的时间长达12-14小时(包括等待从所有商店下载数据)这不会发生在工作日,因为这会阻碍创建销售报告的过程和数据库的其他活动,所以我们在这里的处理时间非常紧张

我的经理建议在白天连续发送数据。数据包将大大缩小,因此传输和插入速度将大大加快,中央服务器将包含实际(几乎实时)数据,夜间可用于创建备份、重建索引等长时间运行的数据库活动

在浏览了许多网站后,我发现:

  • 使用ASMXWeb服务现在已经过时,应该改用WCF
  • 带有MSMQ或系统消息传递的WCF可用于安全传输数据,在这种情况下,我不必太在意确认数据的传递、一致性、节点脱机等
  • 根据WCF,排队更好
  • 还有其他实现消息队列的技术,如RabbitMQ、ZeroMQ等
这就是我感到困惑的地方。有这么多选择,这些技术有什么优点和缺点吗? 我们在Windows窗体和SQL Server上使用.NET,但如果有必要,我们可以改成更合适的。我也有点担心服务器的效率。经过一些计算,服务器每秒将接收大约15个数据包(峰值)。多少钱?我知道有很多网站没有严格的服务器基础设施,可以在线处理数百名访问者,并且运行平稳,但该网站主要将数据上传到客户端,我们将从客户端下载数据

我还发现了一些类似的问题: 其中提到了DDS。您如何看待引入一些中间件服务器来处理与销售点的低质量链接,这样主服务器就不会被1KB/s传输阻塞


如果你能帮我,我将不胜感激。提前谢谢你

Rabbitmq可以轻松处理每秒数千条1kb的消息

由于您的用例不是关于处理实时数据的,所以我认为您应该合并一些消息并将它们作为一个批发送。这样就足够分散一天的负荷了

因为这里的动机不是实时处理数据,所以任何传输层都可以完成这项工作。甚至ftp/sftp。由于rabbitmq在这里可以正常工作,因此它不是它的典型用例


正如您提到的,您担心的一个问题是网络速度慢/不可靠,我建议在发送文件之前对其进行压缩,并在接收端立即验证其完整性。Rsync或类似的软件可能会在这方面做得很好

据我所知,你基本上有两个问题:

  • 呼叫数据丢失/损坏的可能性
  • 数据库写入性能
  • 呼叫数据丢失/损坏的潜在原因是从客户端到服务的数据传输缺乏可靠性

    除了模糊地提到高容量之外,还不清楚是什么导致了数据库争用/性能问题,因此这个答案将更倾向于解决第一个问题

    您已经正确地认识到需要可靠的异步通信传输,以解决当前设置中的可靠性问题

    查看MSMQ以实现这一目标是有效的第一步。MSMQ通过消息传递语义提供可靠的通信,该语义是现成的,只需很少的配置

    不幸的是,虽然MSMQ适合您的需要,但它依赖于两件事:

  • 可靠的网络协议,以及
  • 在发送和接收机器上运行的客户端服务
  • 根据您上面的描述,我认为1不存在(internet不是一个可靠的网络),您可能很难使用2-MSMQ仅随Windows Server或桌面上Windows的商业/企业版本一起提供。(*见下文…)

    作为网络可靠性问题的可能解决方案,您可以使用WCF或RESTful端点(使用或)公开通过HTTP公开的服务操作,该操作将接受来自客户端机器的传入呼叫。这些技术是完全不同的,因此您需要确保在早期做出正确的选择

    WCF支持SOAP1.2规范的开箱即用,它允许通过http进行可靠的web服务调用,但是它的配置非常繁重,通常不是一个好的框架

    REST比.Net中的WCF简单得多,非常轻量级且易于使用。但是,为了实现可靠的交付,您必须公开某种GET操作(除了允许客户端发送数据的POST之外)(在合理的时间范围内)以进行调用,以验证数据是否已提交。如果GET“acknowledge”的结果是否定的,那么客户端必须实现某种重试语义

    尽管WCF路线需要两次作业,而不是一次作业,但我还是赞成其余的方法。我在这两方面都做了大量的工作,发现与REST服务一起工作更愉快

    (*)这并不是说MSMQ在您的最终解决方案中不起作用,只是t