真心急求! C#程序,超大数据量,超高并发任务,应该如何处理?
用C#写一个程序,运行在一台10G内存的服务器上,
作用是24小时不停的 ping 10万个ip,以获取每个ip的主机是否正常连接,
每隔2秒钟这10万个ip就全部ping一次,
并记录返回的指定信息,部分信息需要存储在硬盘或者数据库上.
与此同时,返回的信息需要一些运算和加工,展现给使用者.
如果ip只有少量几个,而且不是不停的运行,那我可以轻松实现,
但是大量的数据和高并发性出现后,C#的程序是不是应该大换血了?
究竟应该如何处理代码?如何做这个程序?
------解决方案--------------------你用snmp协议试试,好像不用ping!
------解决方案--------------------如果只是检测是否正常,可以考虑发arp请求
[DllImport("Iphlpapi.dll")]
private static extern int SendARP(Int32 destinationIp, Int32 sourceIp, ref Int64 mac, ref Int32 length);
------解决方案--------------------有一点比较重要的是,IP要正常。由于我采集的IP地址都是一些主站IP,所以很少有失效的,可以肯定的是在测试的时候,前10000个只有一个不正常。
如果IP质量不行,2秒就不能强求了。N个并发处理量基本相当于2*N秒单线程的处理量。
所以如果超时IP数量超过并发数,循环周期就肯定超过2秒。
最糟糕的情况是所有IP都不正常,这时候的循环周期时间接近于 IP数量*超时单位/并发数。