这是问题描述我们有数千台设备(大约4k-5k),我们必须每2分钟或30秒连续读取数据.每个设备都有其独特的IP.将收集此数据,然后将其存储在数据库中.这些设备位于全国各地的100个位置.数据不会24X7读取,但至少12小时.
有一个Web应用程序可以在某个时刻请求显示通过这些设备收集数据的数据.我们知道正在请求设备的数据.
这就是我们认为我们可以用Java实现的方式
解决方案A:在每个位置,指定一台将充当服务器的计算机,并从x个设备读取数据.此数据将每1小时推送到中央服务器.在这个指定的机器上,数据被拉出并存储在本地(平面文件或内存数据库)
在这种情况下,我们将拥有与位置数量一样多的服务器.例如,我们可能最终拥有1500台服务器/机器管理,这成为一场噩梦.
解决方案B:
我们有8-10个中央服务器,每个服务器从一堆机器中读取数据.数据排队并按照它到达的顺序被拾取.
服务器将数据推送到数据库.
客户如何获取数据?
在解决方案B中,客户端从数据库获取它,假设数据已被推送到数据库并且仍然没有排队.
您认为应该做得更好?
任何替代设计/解决方案?
我们应该考虑使用Unix/Perl在服务器上进行编程.出于某些其他原因,我们不想使用C++.
您问题中所述的要求并不意味着 1000 个并发连接,因为您可以轻松地每 30 秒重新建立连接。假设可以在 500 毫秒内处理一个连接,则剩下 5000 / 30 * 0.5 ~= 100 个并发连接。任何像样的操作系统都应该能够处理那么多。由于并发性如此之低,您甚至可以不用使用单个服务器,每个连接都由专用线程工作。
因此,您的设计应该关注您的其他要求。一些想法: