【发布时间】:2015-04-21 07:31:55
【问题描述】:
场景:n 辆汽车与 tcp 服务器创建 tcp 套接字连接。服务器然后将传入消息转储到数据库。管理员也可以通过套接字向车辆发送命令,因此套接字必须是持久的。
问题:目前只有一个 tcp server 和 DB server。
问题:如何使这种架构在 .NET 中具有可扩展性。我们希望拥有更多的 tcp 服务器和数据库。什么是最好的方法/技术堆栈。
谢谢
【问题讨论】:
-
.NET 套接字在大多数情况下使用 any 的异步 API 可以很好地扩展:
Socket.Begin/EndXXX、Socket.XXXAsync(不基于任务)、NetworkStream.XXXAsync(任务-based) 等。非基于任务的XXXAsync方法具有最好的开箱即用可扩展性,但在每种情况下,可扩展性都不仅仅取决于所使用的网络 API。如前所述,你的问题太宽泛了。尝试一些东西,看看它是如何工作的,然后如果你有问题,问一个具体的问题,关于如何改进你所拥有的东西。 -
我们必须处理的最大并发连接数是 1000。当我对此进行更多研究时,我意识到单个 tcp 服务器可以轻松处理这么多的连接。但是,假设 1000 个连接每秒发送 10 条消息,重要的是数据库连接是可扩展的。假设每条消息都调用一个昂贵的存储过程。什么是最好的架构,调用存储过程的 1000 个线程是否会导致服务器出现故障。
-
每个 连接 一个线程已知不可扩展。您需要使用异步而不是占用线程。
标签: c# sockets tcp architecture