2010-02-01 53 views
2

我负责创建一个Web应用程序。我目前正在使用c#& asp.net(mvc - 但我怀疑它与这个问题有关) - 是一位菜鸟开发人员,对.net有点新鲜。从asp.net(mvc)处理数千个外部服务调用的正确方法

应用程序构建中的部分逻辑是通过在请求中敲击特定的URL向外部smsgateway发出请求 - 或者作为webapp中用户发起的操作的一部分(可能是几个消息发送)或作为每天运行的计划任务的一部分(可以并且将几千条消息发送)。

关于日常任务,恐怕在一个线程中循环 - 比如说 - 10.000次(特别是如果我也根据请求的响应采取行动 - 比如写入数据库)并不是最好的战略,并且我可以从一些并行化中获得一些性能/省时。

最终,我更害怕成千上万的用户同时(很可能)会执行触发请求的操作。有了一个天真的实现,它为每个请求衍生出某种后台线程(无论它叫什么),我担心一次有数百/数千请求的场景。

所以如果我的假设是正确的 - 我该如何处理?我是否必须手动产生一些适当数量的新线程(),并协调他们的工作,从生产者/消费者类队列中进行还是有一些简单的方法?

干杯

回答

3

如果你必须做出10,000个请求到服务,则意味着该服务的API贫血 - 可能CRUD基于数据库的设计,而不是实际的服务。

对精心设计的服务的单一“请求”应该表达执行单个“工作单元”所需的所有信息 - 换句话说,这些10,000个请求很可能合并到一个请求中,或者至少有少量的要求。如果请求要发送到远程服务器或需要很长时间才能完成(在计算中需要2-3秒的时间才能完成),这一点尤其重要。

如果您无法控制服务,如果您无法更改规格或API - 那么我认为您会发现这非常困难。一台机器不能一次处理10,000个传出连接;它将与甚至几百次的斗争。您可以尝试将其并行化,但即使您的吞吐量增加了10倍,仍需要半小时才能完成,这是您可能不希望在面向公众的网站上运行的任务(但那么,也许你会这样做,我不知道具体情况)。

也许你可能对环境,体系结构以及它想要做什么更具体?


在回答您的更新(可能有成千上万的用户都在执行的,需要你发送一个或两个短信每个同时动作的):

这听起来像是正是一种你应该在哪里使用Message Queuing。这实际上并不难,建立一个solution using WCF。一些为什么一个使用消息队列的主要理由是:

  • 有大量邮件来发送的;
  • 发送应用程序不起同步发送他们或等待任何样的反应;
  • 这些消息必须最终交付。

而且你的要求符合这个像手套。既然你已经在微软堆栈上,我肯定会推荐由MSMQ支持异步WCF服务。

+0

做的问题更具体一点 – 2010-02-02 10:09:19

+0

IM要去研究MSMQ。与此同时,病人将此标记为答复,以表彰你的协助 – 2010-02-02 22:09:25

0

如果您正在使用SOAP工作,或一些其他类型的XML请求,您可能没有处理的循环请求的水平的问题。

我成立了类似的东西使用与4-5K的请求也没有问题的SOAP服务器...

0

的SOAP请求Web服务(假设.NET 2.0和上级)看起来是这样的:

WebServiceProxyClient myclient = new WebServiceProxyClient(); 

myclient.SomeOperation(parameter1, parameter2); 

myclient.Close(); 

我假定这段代码将被嵌入到你的业务逻辑,你会作为用户发起的操作的一部分触发,或作为计划任务的一部分触发。

您不需要在代码中做任何特别的来应对大量的用户。这实际上会成为你平台上缩小的问题。

当你说:10.000的要求,你是什么意思? 10.000每秒/分钟/小时的请求数,这是你每天的页数,等等?

0

我还考虑使用AsyncController,让您的网站不会很快变得完全无法使用。

相关问题