【问题标题】:Scale TCP Socket based architecture in .NET在 .NET 中扩展基于 TCP 套接字的体系结构
【发布时间】:2015-04-21 07:31:55
【问题描述】:

场景:n 辆汽车与 tcp 服务器创建 tcp 套接字连接。服务器然后将传入消息转储到数据库。管理员也可以通过套接字向车辆发送命令,因此套接字必须是持久的。

问题:目前只有一个 tcp server 和 DB server。

问题:如何使这种架构在 .NET 中具有可扩展性。我们希望拥有更多的 tcp 服务器和数据库。什么是最好的方法/技术堆栈。

谢谢

【问题讨论】:

  • .NET 套接字在大多数情况下使用 any 的异步 API 可以很好地扩展:Socket.Begin/EndXXXSocket.XXXAsync(不基于任务)、NetworkStream.XXXAsync(任务-based) 等。非基于任务的XXXAsync 方法具有最好的开箱即用可扩展性,但在每种情况下,可扩展性都不仅仅取决于所使用的网络 API。如前所述,你的问题太宽泛了。尝试一些东西,看看它是如何工作的,然后如果你有问题,问一个具体的问题,关于如何改进你所拥有的东西。
  • 我们必须处理的最大并发连接数是 1000。当我对此进行更多研究时,我意识到单个 tcp 服务器可以轻松处理这么多的连接。但是,假设 1000 个连接每秒发送 10 条消息,重要的是数据库连接是可扩展的。假设每条消息都调用一个昂贵的存储过程。什么是最好的架构,调用存储过程的 1000 个线程是否会导致服务器出现故障。
  • 每个 连接 一个线程已知不可扩展。您需要使用异步而不是占用线程。

标签: c# sockets tcp architecture


【解决方案1】:

我相信您正在寻找的是消息传递基础架构,本节中有几个完善的库/产品(例如RabbitMQZeroMQ、...)

几乎所有这些都支持在多个生产者/消费者之间分发消息的模式,这使得编写可扩展的应用程序更容易, ZeroMQ是中间的东西,用法和sockets很相似。

除了库选择之外,我建议您看看 ZMQ Guide,它描述了编写可扩展应用程序的模式和最佳实践。

【讨论】:

    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2013-05-07
    • 2010-09-15
    相关资源
    最近更新 更多