我有用.NET编写的机器学习WCF服务。计算量不是很大,但有一些小的计算。有两个大的共享集合:
lock
内的MemoryChache。它的工作速度非常快,并且在LAN内部提供几毫秒的响应(在客户端)并且工作负载不是非常密集。随着工作量的增加 - ConcurrentDictinary,lock`s,MemoryChache(带GC)和WCF基础设施(带WebServer)将成为限制因素。
现在我有一个拥有巨大流量的客户,因此我预计每天会有高达十亿(每天高达200米的用户会话* 5个来自一个用户的请求)请求。请求是同步的(页面加载时间将取决于它们)所以我必须尽量减少响应时间。
所以:
我可以横向扩展WCF基础架构吗? WCF请求可以以相同的比例并行化到多个端点吗?
为了通过MemoryChache和一般计算来并行化内存使用,我认为可以使用一些自定义类型的MapReduce。 .NET的分布式计算方法是否有任何构建可以帮助我? AFAIK - 没有。 也许在SCALA中重写evething并使用Hadoop或更好的Spark更容易。 但是不想重写evething :(想法?
答案 0 :(得分:3)
是的,请查看负载均衡以进行水平缩放。您可以通过带有流量管理器(F5 is popular provider - click this link for more info)的硬件解决方案,通过软件平衡器(e.g. Consul)或代码 - there is a good sample on Code Project来实现此目的。
负载平衡策略包括循环法或基于资源的决策,以确定哪个服务最不忙。
对于1B交易,网络可能成为迫使您使用硬件解决方案的瓶颈。对于路由智能很少的原始解决方案,您可以在单独的端点上的100台或1000台计算机上托管您的服务,然后让您的客户按比例分配节点的流量。
我认为最有说服力的信息是,如果有任何共享状态 - 实例需要彼此了解。如果是这样,那么您需要考虑的不仅仅是简单的负载平衡!