我们需要建立一个系统,能够每秒处理40,000条消息,在任何软硬件故障的情况下都不能丢失任何消息。
每条消息的大小约为2-4KB。
处理一条消息包括验证消息、进行一些简单的算术计算、将结果保存到数据库,并(有时)向其他系统发送通知。
首选的软件技术是.Net。
哪种软件和硬件模式最适合这样的任务?
需要多少硬件支持?
我们需要建立一个系统,能够每秒处理40,000条消息,在任何软硬件故障的情况下都不能丢失任何消息。
每条消息的大小约为2-4KB。
处理一条消息包括验证消息、进行一些简单的算术计算、将结果保存到数据库,并(有时)向其他系统发送通知。
首选的软件技术是.Net。
哪种软件和硬件模式最适合这样的任务?
需要多少硬件支持?
首先我会将通知排队。然后我会将所有不需要返回值的数据库写入排队。然后我会考虑扩展。
其他考虑因素: * 避免使用过于笨重的框架,这些框架在幕后执行的工作可能比你需要的要多得多。 * 在尽可能的情况下使用缓存和静态变量。
每秒40,000条消息是可以实现的,但当你将IO加入到混合中时,即使在具有大量内存的超级快速硬件上,也可能是不可预测的。尽可能多地进行带外处理。如果失败,请尝试在多核或多处理器机器上运行多个线程,并考虑在集群中运行多个服务器。
编辑:
我再次强调在这种情况下进行负载测试的好处。制作一个简单的原型并进行负载测试。改进原型,直到达到所需结果。然后根据原型设计最终解决方案。在测试所需的性能水平之前,你只是在猜测解决方案。
4k * 40.000/s = 160MB/s是相当大的带宽。
由于无消息丢失的要求意味着所有通信方都发送和接收两个方向,因此您可能需要在两个方向上具有该带宽。
将该数字除以您的网络卡的平均吞吐量或硬盘的写入速度,以找出这将成为高度并行和冗余系统。
您还需要对您的数据库操作和每个消息的计算进行基准测试,并乘以40.000(或35亿用于单日),以获得所需硬件的估计。
我猜.Net要求将是您最不用担心的问题。