高可用性和C#的可扩展性

时间:2009-10-12 07:22:44

标签: c# scalability load-balancing

我有一个C#服务,目前在PC上运行单实例。我想拆分这个组件,以便它可以在多台PC上运行。应为每台PC分配一部分工作。如果一台PC出现故障,应将其工作移至备用机器上。

数据同步可以由DB完成,因此不应该是一个大问题。我目前的想法是使用某种负载均衡器来分割并将传入的请求发送到PC阵列,并确保工作实际得到处理。

我如何实现这样的功能?我不确定我是否在问正确的问题。如果我对如何实现这一目标的理解是错误的,请给我一个提示。

修改

  1. 我想知道上面给出的想法(负载平衡器拆分工作包到PC并检查结果)是否可行。如果有某种已经实施的解决方案,这个看似常见的问题,我很乐意使用该解决方案。

  2. 可用性是一项关键要求。

8 个答案:

答案 0 :(得分:7)

我建议查看负载共享的Pull模型,而不是Push模型。在推送工作时,协调服务器/负载平衡器必须知道系统中当前正在运行的所有服务器,以便它知道转发请求的位置;这必须在config中设置或动态设置(例如在Publisher-Subscriber模型中),然后不断检查以检测是否有任何服务器脱机。虽然它完全可行,但它可能会使应用程序的扩展变得复杂。

使用Pull架构,您有一个中央工作队列(托管在MSMQ,Sql Server Service Broker或类似服务器中),每个处理服务都会从该队列中解脱出来。公开WCF服务以接受外部请求并将工作放入队列,安全地知道某些服务器将完成工作,即使您不确切知道哪一个。这具有额外的好处,即每个服务器监视它自己的工作负载并在它准备就绪时接收工作,并且您可以轻松地在此模型中添加或删除服务器,而无需更改配置。

NServiceBus支持此体系结构,Windows Azure Web&工人角色。

答案 1 :(得分:1)

根据您的说法,每台PC都需要一份完整的服务副本 -

  

每台PC都应该分配一定的   部分工作。如果一台PC出现故障,那就是   工作应该转移到备份   机

否则您将无法将其工作转移到另一台PC。

我很想拥有一台中央服务器,可以将工作分配给个人电脑。这意味着您需要在每台机器之间进行某种形式的通信,并在中央服务器上记录已分配的工作位置。

你还需要每台机器测量它的CPU负载,如果它太忙,就拒绝工作。

这种服务的多线程方法可以充分利用现在的ubiquitoius多核处理器核心。

答案 2 :(得分:0)

如何使用服务器和多线程处理?或者甚至在PC上进行多线程处理,因为现在可以在标准桌面上获得许多内核。

这显然不能解决机器故障问题,但可以通过更少的投资为您提供更多性能。

答案 3 :(得分:0)

你可以检查windows clustering,你必须处理一系列依赖于服务行为的问题(你可以提供有关服务本身的更多细节,以便我可以回答)

答案 4 :(得分:0)

这取决于您希望如何分配工作量,这通常由

完成
  • 按多个服务拆分相同的工作量

      

    表示安装了相同的服务   不同的服务器,并将做   同样的工作。假设您的服务正在从数据库服务器读取大量数据并处理它们以生成巨大的客户端特定数据文件,最后将此数据文件发送给客户端。在这种方法中,安装在差异服务器中的所有服务都将执行相同的工作,但他们将工作分开以提高性能。

  • 通过多种服务拆分部分工作负载

      

    在这种方法中,每项服务都将分配给不同的工作,并按照不同的目标开展工作。在上面的示例中,一个服务器负责从数据库读取数据并生成大量数据文件,另一个服务仅配置为读取数据文件并将其发送给客户端。

我已经在我的一项工作中实施了第二种方法。因为这可以让我在发生任何故障时隔离和调试错误。

答案 5 :(得分:0)

负载均衡器的常用方法是在所有服务实例之间平均分割服务请求。

对于每个工作项(请求),您可以在数据库中存储相关信息。然后,每个服务还应至少有一个后台线程检查数据库,用于放弃工作项。

答案 6 :(得分:0)

我建议您通过WCF(Windows Communication Foundation)发布服务。

然后实现一个“中央”客户端应用程序,该应用程序可以跟踪您的服务的可用提供者并完成工作。中央应用程序将充当要执行的任务的调度程序和负载平衡器。

查看JuwalLövy关于WCF的书(“编程WCF服务”),以便对该主题进行详细介绍。

答案 7 :(得分:0)

你可以看看NGrid:http://ngrid.sourceforge.net/

或Alchemi:http://www.gridbus.org/~alchemi/index.html

都是带有负载均衡器的网格计算框架,可以让您立即入门。

干杯, 弗洛里安