文件同步器架构

时间:2017-04-29 15:31:10

标签: java multithreading performance architecture application-design

我必须创建一个文件同步器:一个基本上使用FTP,SFTP和NFS将H24大量数据文件从外部的许多系统同步到我的本地系统的应用程序。

这些流超过二十个,对于每个流,逻辑略有不同,并且必须是可配置的。 其中一个要求是,如果由于某种原因导致其中一个流量下降,则必须能够在不重新启动整个系统的情况下检索它。

另一个要求是转移率是平衡的。换句话说,不得有一个流或它们的一部分同步,另一个流10小时后

我对要实现的体系结构感到困惑:如果我意识到单个多线程系统,我将拥有非常高的线程数(我会说超过100),并通过满足上述两个要求使其变得复杂。

我正在考虑实现几个流程或同一流程的不同实例,即使它看起来有点“丑陋”#34; ..所以通过这种方式,一些负载平衡将由操作系统完成,它可以更简单地杀死或启动流程。甚至性能可能会更好,因为几个进程可以使用更多的ram有人有任何提示/建议?非常感谢,抱歉我的英语不好。吉安

1 个答案:

答案 0 :(得分:1)

正如@kayaman所说,100个线程不是很多。如果这意味着每单位工作100个线程,并且你将有许多工作单元意味着线程增加了很多,我建议你看看Fibers

只要您不阻挡光纤,就可以在一对(通常是多个CPU内核)线程上运行100000多个光纤。然后,每根光纤在继续之前只等待来自该过程的回调。

要访问您的端点并以类似的方式处理它们,请查看Apache Camel - 它将允许您流式传输FTP,SFTP等,并将每个处理作为另一个端点(理论上您应该能够插入电子邮件)同时输入并通过电子邮件发送到端点的数据包)

关于平衡流,这是您需要实现的业务逻辑。如果一个流比另一个流更快地接收数据包,则应该能够通过在特定条件下不请求更多数据包来限制速率。有关如何检索软件包以及您正在使用哪些库的更多信息,以便在此处获得更好的帮助。