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

Is it possible to handle 1B requests per day with WCF architecture?

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

它的工作速度非常快,并在 LAN 内提供几毫秒的响应时间(在客户端),工作量不是很大。由于工作负载会更高 - ConcurrentDictinary、lock`s、MemoryChache(带 GC)和 WCF 基础设施(带 WebServer)将成为限制因素。

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

所以:

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

要通过 MemoryChache 和一般计算并行化内存使用,我认为可以使用某种自定义类型的 MapReduce。是否有任何内置的 .NET 分布式计算方法可以帮助我? AFAIK-不。 也许在 SCALA 中重写所有内容并使用 Hadoop 或更好的 Spark 会更容易。 但是不想重写所有内容:( 想法?

是的,查看用于水平扩展的负载平衡。您可以通过带有流量管理器的硬件解决方案 (F5 is popular provider - click this link for more info), through a software balancer (e.g. Consul) or through your code - there is a good sample on Code Project

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

对于 1B 交易,网络可能成为瓶颈,这将迫使您使用硬件解决方案。对于路由智能很少的粗略解决方案,您可以在 100 或 1000 台机器上的不同端点上托管您的服务,然后让您的客户将流量分配给节点。

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