这样的分布式怎么实现,应该选择哪种通信方式?

脾气不坏 2012-02-03 11:28:11
有主控制服务器Server1,上边运行着程序A,A维持着多个任务队列。
有作业服务器Server2、server3、server4...serverN,上边分别运行着程序B1,B2,B3,...Bn
B1到Bn分别从A中任务队列获取任务并执行,并且定时将执行情况发送至A应进行统计
所有有服务器处于同一局域网 B1至Bn以及A的管理界面需采用C/S结构

请问程序间应该如何通信 把A做成WebServer? 还是用Remoting? 或者其他的方式?
...全文
484 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
蔡袅 2012-02-03
  • 打赏
  • 举报
回复
采用WCF的netMSMQBibnding为用队列构建分布式应用程序提供支持。
蔡袅 2012-02-03
  • 打赏
  • 举报
回复
WCF MSMQ
wushuai1346 2012-02-03
  • 打赏
  • 举报
回复
试试WCF
Bullatus 2012-02-03
  • 打赏
  • 举报
回复
好像有个开源项目和楼主的情况类似,其主要是为了一般计算机用户向科学计算贡献剩余计算能力的,叫什么名字我真记不得了。
脾气不坏 2012-02-03
  • 打赏
  • 举报
回复
200分都木人啊? 自己顶下吧
窗户纸 2012-02-03
  • 打赏
  • 举报
回复
虽然WCF支持的东西保罗万象,但支持的多的代价是性能的牺牲,我们每个项目只适用特定的技术,根本用不到他绝大部分东西,却还要承担起性能损失 。 因此WCF最好仅作为一个初始的手段,即把通信功能整个封装起来,未来如果希望采用更好的技术,不需要调整业务层、界面层及数据层,只把通信层替换即可。
窗户纸 2012-02-03
  • 打赏
  • 举报
回复
这里有个很有趣的报告http://geekswithblogs.net/marcel/archive/2007/09/26/115651.aspx
有个评论很有意思:
# re: WCF vs Remoting - adjustments to my results
Hi Marcin, there is a reason why WCF is slower than .NET Remoting when you use DataSet binary serialization: the fast DataSet binary serialization mechanism (implemented as ISerializable) is only used by .NET Remoting. When WCF is used, it uses the slow XML serialization path (with IXmlSerializable). See http://blogs.msdn.com/sowmy/archive/2006/02/22/536747.aspx. The reason is that WCF needs the nice XSD projection from IXmlSerializable. I will write a blog entry on this topic sometime later. 10/26/2007 3:43 AM | Wenlong Dong
重点是微软的评测中均使用的是XML序列化,而.NET Remoting采用二进制序列化本身就快于自己使用XML序列化.(我试过,不是百分比的差,而是数量级的差)。
窗户纸 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 xx_mm 的回复:]
微软没必要把自己原来的产品臭的那样吧,自家出的;微软的每一个产品总会尽量向后兼容,WCF也不例外,WCF 兼容了.net remoting,web service,支持最旧的ws版本以及最新的主流的通讯协议,这在理所当然的会“弱势”于remoting的单一化,这也是可以理解的;但将他们对比时采取【低了一个级别的态度】这显然不客观,WCF的优势是:绑定,编码(文本编码,xml编码,json编码,二进制编码无一不包..),序列化...都可以定制,兼容几乎所有通讯协议,可以异构不同的语言,与不同的平台或系统互通,但这对于只支持.NET的remoting显然是不具备的;至于你说性能方面我却发现了相反的比较:A Performance Comparison of Windows Communication Foundation (WCF) with Existing Distributed Communication Technologies
[/Quote]
1. 微软的评测报告我早看过,自己为了推广自己新一代产品当然要做些手脚,自己的评测报告没法让人信服。因为它是建立在某种特定的调优及环境基础上(如数据包大小、特定网络结构、特定服务器等)而第三方评测和实际使用者的结论应该更具有可信度。
2. 我说过不论Remoting还是WCF都难以实现超大流量(频繁数据通信)的分布处理,必须依靠专有的通信协议(Socket).
Remoting还是WCF就像肯德基快餐里的奥尔良烤翅,吃着不难吃,价廉物美。但万龙舟的龙虾比起来味道差太多了。WCF这类的技术是使用及开发成本低,但效率并不高,要搞个短平快的项目,用它最合适,但要做精品,还得靠Socket.
蔡袅 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 etudiant6666 的回复:]

引用 12 楼 xx_mm 的回复:
数据通信频繁照样可以用WCF,WCF并不受限这里,能通信的都可以考虑WCF,效率并不低,尤其netTcpBinding采用二进制编码传送基于Tcp传输,效率是相当优秀的。
听微软胡吹可能会害人,WCF的效率再高也不比Remoting的二进制模式高(国外有测试结果),而即使是remoting 其分布式异步通信效率也不咋地,在大规模分布式通信领域WCF也只是……
[/Quote]微软没必要把自己原来的产品臭的那样吧,自家出的;微软的每一个产品总会尽量向后兼容,WCF也不例外,WCF 兼容了.net remoting,web service,支持最旧的ws版本以及最新的主流的通讯协议,这在理所当然的会“弱势”于remoting的单一化,这也是可以理解的;但将他们对比时采取【低了一个级别的态度】这显然不客观,WCF的优势是:绑定,编码(文本编码,xml编码,json编码,二进制编码无一不包..),序列化...都可以定制,兼容几乎所有通讯协议,可以异构不同的语言,与不同的平台或系统互通,但这对于只支持.NET的remoting显然是不具备的;至于你说性能方面我却发现了相反的比较:A Performance Comparison of Windows Communication Foundation (WCF) with Existing Distributed Communication Technologies
WCF 性能基准报告
窗户纸 2012-02-03
  • 打赏
  • 举报
回复
WCF的领域在B/S应用还可以,而C/S领域,尤其是数据库类型的应用,其数据通信的特点是每个数据包很小(数百字节就算大的),巨量数据包(每秒数万甚至数十万),靠WCF,光算序列化的时间就歇菜了
当然如果LZ的任务指的是多媒体类型的用WCF到无所谓.
窗户纸 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xx_mm 的回复:]
数据通信频繁照样可以用WCF,WCF并不受限这里,能通信的都可以考虑WCF,效率并不低,尤其netTcpBinding采用二进制编码传送基于Tcp传输,效率是相当优秀的。[/Quote]
听微软胡吹可能会害人,WCF的效率再高也不比Remoting的二进制模式高(国外有测试结果),而即使是remoting 其分布式异步通信效率也不咋地,在大规模分布式通信领域WCF也只是个传说而已。
简单说一点,WCF采用XML的数据体系,看看XML的数据冗余率及序列化的占用时间就知道了。
蔡袅 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 etudiant6666 的回复:]

如果业务量很大,数据通信非常频繁的话,SOCKET可能是唯一的选择,WCF,Remoting通信损耗都非常大,要处理的话得用异步通信方式,需要维护几个队列:
server1上的任务队列的入栈及出栈要异步进行。
server1上的命令队列(比如服务器上线、离线、汇报进度等)
各个分布处理Bn服务器的任务收发队列
如果要求可以断线接续还要考虑设置断线接续队列等。

假设你的意图是服务器B……
[/Quote]数据通信频繁照样可以用WCF,WCF并不受限这里,能通信的都可以考虑WCF,效率并不低,尤其netTcpBinding采用二进制编码传送基于Tcp传输,效率是相当优秀的。
蔡袅 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 showjancn 的回复:]

如果无大数据传输,建议用WCF。(需要.net 3.5支持)
[/Quote]即使大数据传输也可以用WCF的流模式,如果很大还可以分块发送,WCF对于数据的包容与扩展是全面的。
showjancn 2012-02-03
  • 打赏
  • 举报
回复
如果无大数据传输,建议用WCF。(需要.net 3.5支持)
窗户纸 2012-02-03
  • 打赏
  • 举报
回复
如果业务量很大,数据通信非常频繁的话,SOCKET可能是唯一的选择,WCF,Remoting通信损耗都非常大,要处理的话得用异步通信方式,需要维护几个队列:
server1上的任务队列的入栈及出栈要异步进行。
server1上的命令队列(比如服务器上线、离线、汇报进度等)
各个分布处理Bn服务器的任务收发队列
如果要求可以断线接续还要考虑设置断线接续队列等。

假设你的意图是服务器B1~Bn完成当前任务后取新任务的情况(这样比较简单,效率也较高),就要定义好相关命令协议(比如取任务、收任务等)

总之,socket通信有些难度,但效率比其他方式高N倍(相当于增加N台服务器)
脾气不坏 2012-02-03
  • 打赏
  • 举报
回复
直接用socket写怎么样?
脾气不坏 2012-02-03
  • 打赏
  • 举报
回复
好的 我看看

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧