我正在重构4个不同的软件组件,这些组件几乎在同一个服务中做同样的事情(不是Web服务 - 必然甚至可能)。 3是用C ++编写的,而最后一个也是最重要的是用Java编写的。系统的其余部分是用Java编写的,因此我不会重构C ++代码并使用JNI,尤其是当前用C ++编写的组件计划在 a 可预见的未来用Java组件替换。
当前用Java实现的组件实际上是更大组件的子组件。因此,当较大的/包装组件希望使用子组件(被重构为服务)时,它只是调用进程内Java方法。如果我将该子组件重构为单独的服务,原始包装组件将失去当前在进程方法调用中的好处。
我是否应该将一个线程添加到原始/包装组件以充当服务网关,或者我是否应该将代码完全重构为独立服务。
我希望我已经足够清楚......
答案 0 :(得分:0)
通常,不需要单个“服务”实例,也不需要远程调用实例。出于性能或可用性原因而共同部署的策略是非常合理的。只需单独实现逻辑,您就可以获得很多收益。
但是,如果您已经建立了服务基础架构,可能以特定方式管理服务提供商,那么可能需要保持一致。
所以你需要了解分离的影响,在这种情况下,进程内调用的好处是否显着?您还需要考虑是否将进程内服务作为其他客户端的远程可调服务进行,这将对现有系统的性能产生负面影响。
我的直觉:将代码拉入一个能够进行本地和远程调用的组件(在我的世界中可以使用简单的无状态会话EJB完成)并将其部署两次。一旦与原始系统共处一地。一旦作为服务。牺牲最小扰动的绝对一致性。