【问题标题】:Interactive Java Software Architecture [closed]交互式 Java 软件架构 [关闭]
【发布时间】:2013-04-16 14:52:10
【问题描述】:

我们不久前设计了一个处理交易的软件架构。它是这样工作的:传入的事件,根据它们的类型,被翻译成Callable,然后根据事件类型运行到Executor。例如,“Event_A”类型被转换为EventAHandlerCallable),然后在Executor中运行。

我们现在必须支持交互式事件,即需要用户通过网络进一步输入的事件,这很慢。例如,对于新类型的事件,我们向用户呈现一个菜单并等待响应。如果我们遵循上述架构,即将每个事件转换为Callable,我们会占用等待用户响应的线程,这不是一个好主意。

我正在寻找让我们这样做的建议或建筑风格。我们需要每秒支持大约 10,000 个事件。如果可能的话,我想坚持使用 Executor Framework,并且不能更改系统以支持异步循环。

【问题讨论】:

  • Callable 暗示 Future 暗示 get() 阻塞。如果您正在构建真正的异步应用程序,则不需要 Callable。如果你真的使用 Callable,那么你的应用程序就不是完全异步的。

标签: java architecture executorservice


【解决方案1】:

使用基于Actor model 的架构可能满足您的需求, 是该范例的众所周知的实现。

【讨论】:

  • 这是我考虑过的。它不起作用,因为 Actors 不应该阻止某些外部操作(来源:documentation)这与创建CallableRunnable 具有相同的效果,在ThreadPoolExecutor 中有一个线程检查一下,然后然后整个线程阻塞....感谢您的回答。
【解决方案2】:

首先,您必须将您的架构表示为Data flow diagram。它可以是动态的,在执行期间创建新节点。与其等待用户响应,不如创建一个对该响应做出反应的新节点,并将响应路由到该节点。这样你就不会阻塞线程。

然后,实现你需要的数据流图元素的哪些属性,比如:

  • 节点是对多个后续消息做出反应(如对象)还是用于处理单个消息(如方法调用)

  • 一个节点是单输入还是多输入

  • 如果有多个输入,当所有输入都被填充(与门)或任何输入被填充(或门)时节点应该触发执行

--等等

然后决定哪个数据流/actor 库符合您的要求。我不会排除 Akka,但我推荐我的开发 df4j,因为它紧凑、可扩展,并且支持开箱即用的多输入节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多