【问题标题】:File synchronizer architecture文件同步器架构
【发布时间】:2017-09-27 14:10:23
【问题描述】:

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

流有 20 多个,每个流的逻辑略有不同,并且必须是可配置的。 其中一项要求是,如果其中一个流由于某种原因掉线,则必须能够在不重新启动整个系统的情况下恢复它。

另一个要求是传输速率是平衡的。换句话说,不能有一个流或其中的一部分同步并且另一个流延迟 10 小时

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

我正在考虑实现多个进程或同一进程的不同实例,即使它看起来有点“丑陋”.. 所以通过这种方式,操作系统将完成一些负载平衡,并且更容易杀死或开始一个流程..也许甚至性能可能会更好,因为几个进程可以使用更多的内存有人有任何提示/建议吗?非常感谢,对不起我糟糕的英语。吉安

【问题讨论】:

  • 100 个线程不一定是高线程数,但这个问题对于 StackOverflow 来说太宽泛了。

标签: java multithreading performance architecture application-design


【解决方案1】:

正如@kayaman 所说,100 个线程并不多。如果这意味着每个工作单元有 100 个线程,并且您将有许多工作单元,这意味着线程数会大幅增加,我建议您查看 Fibers

只要不阻塞光纤,您就可以让 100000 多根光纤在几个(通常是 CPU 核心数)线程上运行。然后,每个纤程将等待该过程的回调,然后再继续。

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

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

【讨论】:

    猜你喜欢
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多