Java中长期运行的数据处理系统的通用体系结构



我被要求将一个遗留的数据处理应用程序移植到Java。

当前版本的系统由一堆(写得不好的)Excel表组成。这些表实现了一个大循环:对许多数据源进行轮询。这些源代码是基于CSV和XML的web服务的混合体。

这个过程在概念上很简单:

它是无状态的,这意味着运行的计算完全依赖于输入。计算结果将公布(目前通过在网络上的一些标准位置写入一些CSV文件)。

公布结果后,轮询周期再次开始。

这个过程不需要管理GUI,但如果我能实现某种基于web的控制面板,那就太好了。这将不是什么漂亮的,纯粹用于内部使用。控制面板只会显示有关源提要的统计信息,并可能在出现问题时强制刷新输入提要。该组件在第一轮交付中完全是可选的。

该系统的一个关键特性是容错。有些输入提要是出了名的bug。我希望我的系统能够在某些输入中断的情况下恢复。在这种情况下,不可能更新输出——我希望它继续轮询,直到系统得到解决,可能会生成一些XMPP消息来指示系统的状态。总体而言,该系统应在没有干预的情况下长时间工作。

用户目前有一个自定义客户端,可以轮询(希望)不需要重写的CSV文件。如果我能正确地完成这项工作,那么他们不会注意到运行该系统的引擎已经重新实现。

我不是一个java开发人员(我主要做Python),但JVM是这种情况下的需求。经理给了我充足的学习时间。

我想知道的是如何开始构建这种项目。我想利用框架&良好的模式是可能的。有没有什么大的构建块可以帮助我更快地运行一个高质量的系统?

更新0:还没有人提到Spring——这个框架在这种应用程序中发挥作用吗?

您可以使用许多大型复杂框架来"帮助"您做到这一点。学习这些可以是CV++。

在你的情况下,我建议你尽量简化这个系统。它将表现更好,更容易维护(它也更有可能工作)

因此,我会接受每一项要求并问问自己;我能做多简单?这不是懒惰(你必须更加努力地思考),而是IMHO的良好实践。

1)编写处理文件的代码,保持简单,每个任务一个类,您可能会发现Apache CSV和Apache Commons很有用。2) 然后查看Java线程池,为这些类创建一个单独的进程运行程序作为单独的任务,如果它们出错,可以重新启动它们。3) 启动的最佳方法取决于平台,但我认为你提到Excel表明它是windows PC。因此,最简单的解决方案是从windows->启动菜单项运行进程运行程序。一个稍微好一点的解决方案是使用windows服务包装器。或者,您可以在类似Apache ACD 的东西下运行它

Java生态系统中有一个工具,它解决了所有(几乎)集成问题。

它被称为阿帕奇骆驼(http://camel.apache.org/)。它依赖于消费者和生产者的概念以及介于两者之间的企业集成模式。它提供容错和并发处理配置功能。有人支持定期投票。它有用于XML、CSV和XMPP的组件。很容易定义时间触发的后台作业,并与您喜欢的任何消息系统集成以进行作业排队。

如果你从头开始写这样的系统,那将需要数周的时间,但你可能会错过一些错误条件。

看看Pentaho ETL工具或Talend OpenStudio
该工具提供对文件、数据库等的访问。如果需要,您可以编写自己的插件或适配器。Talend创建可以编译和运行的Java代码。

最新更新