日期:2014-05-17  浏览次数:21485 次

真心急求! C#程序,超大数据量,超高并发任务,应该如何处理?
用C#写一个程序,运行在一台10G内存的服务器上,
作用是24小时不停的 ping 10万个ip,以获取每个ip的主机是否正常连接,
每隔2秒钟这10万个ip就全部ping一次,
并记录返回的指定信息,部分信息需要存储在硬盘或者数据库上.
与此同时,返回的信息需要一些运算和加工,展现给使用者.


如果ip只有少量几个,而且不是不停的运行,那我可以轻松实现,
但是大量的数据和高并发性出现后,C#的程序是不是应该大换血了?
究竟应该如何处理代码?如何做这个程序?


高并发 大数据 c# ping

------解决方案--------------------
你用snmp协议试试,好像不用ping!
------解决方案--------------------
如果只是检测是否正常,可以考虑发arp请求
        [DllImport("Iphlpapi.dll")]
        private static extern int SendARP(Int32 destinationIp, Int32 sourceIp, ref Int64 mac, ref Int32 length);

------解决方案--------------------
引用:
1、异步不需要自己new线程,使用的是系统线程池,关键是不要做多余的事,否则会对其它任务产生影响。 2、我想Summary至少需要操作一个共享队列(最好是仅仅操作一下共享队列,不要阻塞线程池中的线程,数据处理的事应该交给其它线程同步处理),需要lock操作。
3、根据我的测试结果推论,需要2MB/s的上行带宽、3MB/s的下行带宽、8核心的CPU。至于7x24不间断一般都是受实际网络环境影响的。硬件方面可能需要一台备用机器,程序优化要根据你的其他实际业务需求而定。
有一点比较重要的是,IP要正常。由于我采集的IP地址都是一些主站IP,所以很少有失效的,可以肯定的是在测试的时候,前10000个只有一个不正常。
如果IP质量不行,2秒就不能强求了。N个并发处理量基本相当于2*N秒单线程的处理量。
所以如果超时IP数量超过并发数,循环周期就肯定超过2秒。
最糟糕的情况是所有IP都不正常,这时候的循环周期时间接近于 IP数量*超时单位/并发数。