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

标签 c# .net wcf parallel-processing distributed-computing

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

  • 包含统计信息和结果的 ConcurrentDictinary
  • lock 内的 MemoryChache,包含用户 session 详细信息。

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

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

所以:

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

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

最佳答案

是的,查看用于水平缩放的负载平衡。您可以通过带有流量管理器 (F5 is popular provider - click this link for more info) 的硬件解决方案、通过软件平衡器 (e.g. Consul) 或通过您的代码 - there is a good sample on Code Project 来实现这一点。 .

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

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

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

关于c# - 是否可以使用 WCF 架构每天处理 1B 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37822281/

相关文章:

.net - 如何解决 "Could not establish trust relationship for the SSL/TLS secure channel with authority"

c# - 如何减少多个图像的内存使用?

c# - 如何在 C#.NET GUI 应用程序中实现语法高亮和自动完成功能?

c# - .NET Regex 等效于 Python Regex (?P=previousmatchname)

c# - .net win 表单(如 asp.net web 表单)中是否有可用的验证控件?

c++ - 如何将 C++ 程序连接到 WCF 服务?

c# - 读取 XML 数据时已超出最大命名表字符数配额 (16384)

c# - .mdf 文件上的 Entity Framework

C# Windows 窗体在安装后不打开默认浏览器

c# - 如何在没有 nuget.exe 或 Visual Studio 扩展的情况下下载 Nuget 包?