C# 是否可以使用WCF架构每天处理1B个请求?

C# 是否可以使用WCF架构每天处理1B个请求?,c#,.net,wcf,parallel-processing,distributed-computing,C#,.net,Wcf,Parallel Processing,Distributed Computing,我用.NET编写了机器学习WCF服务。计算不是很密集,但有一些小的计算。共有两大共享集合: 与统计数据和结果一致 MemoryChache insidelocks,其中包含用户会话详细信息 它工作速度非常快,在局域网内提供几毫秒的响应时间(在客户端),工作负载不是很密集。由于工作负载将更高,并发字典、锁、内存缓存(使用GC)和WCF基础设施(使用WebServer)将成为限制因素 现在,我有一个流量巨大的客户,因此我预计每天的请求量将达到10亿次(每天多达200米的用户会话*5个来自一个用户

我用.NET编写了机器学习WCF服务。计算不是很密集,但有一些小的计算。共有两大共享集合:

  • 与统计数据和结果一致
  • MemoryChache inside
    lock
    s,其中包含用户会话详细信息
它工作速度非常快,在局域网内提供几毫秒的响应时间(在客户端),工作负载不是很密集。由于工作负载将更高,并发字典、锁、内存缓存(使用GC)和WCF基础设施(使用WebServer)将成为限制因素

现在,我有一个流量巨大的客户,因此我预计每天的请求量将达到10亿次(每天多达200米的用户会话*5个来自一个用户的请求)。请求是同步的(页面加载时间取决于它们),所以我必须尽量减少响应时间

因此:

我可以让WCF基础设施水平扩展吗?WCF请求能否以相等的比例并行到多个端点

为了通过MemoryChache和一般计算并行化内存使用,我认为可以使用一些定制的MapReduce。是否有任何内置的.NET分布式计算方法可以帮助我?阿法克-不。 也许在SCALA中重写evething并使用Hadoop或者更好的Spark更容易。
但不想重写任何东西:(想法?

是的,请查看水平扩展的负载平衡。您可以通过带有流量管理器()的硬件解决方案、软件平衡器()或您的代码来实现这一点

负载平衡策略包括循环,或基于资源的决定哪个服务最不繁忙

对于1B事务,网络可能会成为瓶颈,迫使您采用硬件解决方案。对于路由智能很少的粗糙解决方案,您可以在单独端点上的100台或1000台计算机上托管服务,然后让客户将流量与节点成比例


我认为最能说明问题的信息是,是否存在任何共享状态-实例是否需要相互了解。如果是这样,那么您需要考虑的不仅仅是简单的负载平衡!

您真的每天要处理10亿次请求吗?即每秒11574次请求,在24小时内每秒钟一次。老实说,我怀疑您的客户是否有在许多请求中。@ScottChamberlain每天有多达200米的用户会话。一个用户最多可以提出5个请求。判断您的体系结构是否可以扩展的唯一真正方法是对其进行负载测试。您通读了吗?基本上他们说,如果您使用的是HttpBinding,请将其与任何其他HTTP负载平衡情况一样对待。编写服务以处理1b使用WCF,每天有数百万个请求听起来不是最好的主意……但是,如果你可以使用负载平衡器和一堆服务器,为什么不呢?如果你不需要在不同的负载平衡实例之间共享状态-这只取决于你能负担得起多少服务器,即使你使用WCF。是的,正如我在问题中提到的那样-我有两大份额d状态收集。可以使用mapreduce方法处理此收集更新。Map reduce将破坏您的响应时间。您需要考虑如何可能对数据进行分区,使用聚合等来尝试拆分处理。对于您添加的每个节点,跨数百或数千个实例共享状态不会执行你会增加开销。试着考虑一种分区方法。