maf*_*afu 1 c# scalability load-balancing
我有一个C#服务,目前在PC上运行单实例.我想拆分这个组件,以便它可以在多台PC上运行.应为每台PC分配一部分工作.如果一台PC出现故障,则应将其工作移至备用机器.
数据同步可以由DB完成,因此这不应该是一个问题.我目前的想法是使用某种负载均衡器来分割并将传入的请求发送到PC阵列,并确保实际处理工作.
我该如何实现这样的功能?我不确定我是否在问正确的问题.如果我对如何实现这一目标的理解是错误的,请给我一个提示.
编辑:
我想知道上面给出的想法(负载均衡器拆分工作包到PC并检查结果)是否可行.如果有某种已经实现的解决方案,所以这个看似常见的问题,我很乐意使用该解决方案.
可用性是一项关键要求.
我建议查看负载共享的Pull模型,而不是Push模型.在推送工作时,协调服务器/负载平衡器必须知道系统中当前正在运行的所有服务器,以便它知道转发请求的位置; 这必须在config中设置或动态设置(例如在Publisher-Subscriber模型中),然后不断检查以检测是否有任何服务器脱机.虽然它完全可行,但它可能会使应用程序的扩展变得复杂.
使用Pull体系结构,您有一个中央工作队列(托管在MSMQ,Sql Server Service Broker或类似程序中),并且每个处理服务都会从该队列中解脱出来.公开WCF服务以接受外部请求并将工作放入队列,安全地知道某些服务器将完成工作,即使您不确切知道哪一个.这具有额外的好处,即每个服务器监视它自己的工作负载并在它准备就绪时接收工作,并且您可以轻松地在此模型中添加或删除服务器,而无需更改配置.
NServiceBus支持此体系结构以及Windows Azure Web和Worker角色之间的通信.
| 归档时间: |
|
| 查看次数: |
4251 次 |
| 最近记录: |