需要帮助,某种架构建议...在两个孤立的系统之间进行同步的最佳方式是什么?
一种是标准的java环境,另一种是一些没有j2ee集成和调度选项的遗留系统。遗留系统提供了web服务,所有处理都由来自客户端(java应用程序)的调用启动。该处理将从大约100个web服务调用开始,并且将花费太长时间才能完成,因此我不能在线程中等待那么长时间。
我正在考虑使用一种客户端开始处理并公开另一个web服务以等待遗留系统处理的方法。遗留系统将通过将所需数据(记录ID或类似数据)放入数据库中来提供信息。这将是另外100个呼叫,作为对init呼叫的某种应答。这是合法的软件架构解决方案吗?
两个系统都在读/写同一个数据库。有没有因为这个原因而需要2个for服务?遗留系统没有计划启动的选项,所以我需要以某种方式启动它。
发布于 2015-05-19 08:46:35
你有什么和你需要什么还不是很清楚。所以,让我来推测一下。
1)遗留系统获得100个请求,然后将它们作为批处理一起处理。新系统需要所有这100个答案才能继续创建新请求。基于这一假设,遗留系统不会对每个单独的请求做出响应。因此,既然没有提供答案,那么新的系统应该继续不断地发出新的请求。然而,如果新系统不应该发出101请求,而在遗留系统中没有完成1-st,那么就需要同步。因此,新的不应该等待,而不是开始101,直到它知道1-st已经完成。这应该是同步点-不是等待101,而是检查1-st是否已经完成。它可以在遗留系统或新系统中完成,但这就是同步点。
发布于 2015-05-19 13:09:27
您对问题和解决方案的描述符合http://en.wikipedia.org/wiki/Reactor_pattern。这是一种非常常见的方法,非常适合。
发布于 2015-05-20 22:42:52
几个合理的问题: 1)当你达到100 (或任何魔数)并开始处理请求批后,新的请求会发生什么?被拒绝了?排队等待新的"100“批次? 2)所以。批处理解析是异步的。您现在有两个选择:选项A:在客户端公开遗留系统将“联系”的and服务,以“反弹”关于这100个精化的反馈。选项B:在遗留服务器上公开and服务,当前系统将每5分钟"ping“一次,仅当有详细说明等待反馈时,才暂时获取反馈。就我个人而言,我更喜欢选项A,但请考虑到,在处理带有队列的异步精化时,您需要考虑两端的多个场景。例如,假设遗留系统暂时不可用或过载,而新系统构建的backlog >为100 (或者不管是什么魔术数字),您还必须考虑一种机制来处理backlog队列,为排队项提供某种“偏好”/urgency。
https://stackoverflow.com/questions/30312340
复制相似问题