我们正在用 Java 设计一个 Orchestrator 系统,它将托管一个 Web 服务,并根据对它的请求调用一个用 XML 编写的流,这些流只不过是一个接一个地执行的步骤,但 XML 告诉用户流是什么,他还可以通过更改 XML 来更改流程。他可以添加新服务并将其添加到 XML。但是在设计时,我现在对诸如此类的事情感到困惑。
我是否应该使用阻塞队列使服务成为可运行的,并通过将其调度到执行程序来使其始终保持活动状态,这样当新请求到达时,我会将请求推送到阻塞队列中,并且服务将处理它。并创建一个邮箱来承载不同服务之间的消息传递任务。
我应该使用spring IOC而不是使服务可运行,这将使类单例,因此只有一个实例存在,我将直接向服务方法发送请求,因此我不必做任何麻烦,因为没有线程也不需要实现任何邮箱。
我读到了事件驱动系统如何像 nodejs 和 ngnix 一样更快,所以我想使用 disuptor 框架将所有传入的请求推送到 ringbuffer,然后编写一个处理程序,将事件发送到将开始处理请求的协调器和还与请求一起发送回调,以便当协调器完成时,它将使用回调将响应发回给调用者。但是由于请求的类型不同,所以我将无法利用中断对象分配。
系统需要以低延迟提供最大吞吐量,系统将来会向 XML 添加新的服务/流,因此它应该在不影响性能的情况下采用新的流。我只能使用 java 7,没有 Scala,所以我是有界的。