何时结合多个应用程序以简化其数据集成?

精简版: 我们有多个团队,每个团队开发多个应用他们需要分享一些数据。我们是否应该将这些应用程序组合成一个更大的应用程序以简化数据集成,还是应该将它们分开并利用一些数据交换/缓存机制? 更长的版本: 我们有许多团队,每个团队都在处理一组应用程序。其中许多应用程序需要共享数据。一种选择是使用异步消息传递来创建一个记录系统 - 所有写入都发生 - 并将该数据广播到需要它的任何其他系统。这些系统会将所需的数据位存储在只读缓存中(在其数据库中)。 这种布局的好处是一个系统可以在不影响其他系统的情况下爆炸。它还使各个团队更容易处理他们的个人应用程序。它使发布的安排更容易,更小的代码库可以导航等。 另一个选择是确定这些应用程序共享太多数据,并且消息传递/缓存的开销过高。在这种情况下,您可以决定将这三个应用程序合并为一个更大的应用程序然后,您将完全消除数据集成问题,因为您将集成移动到应用程序的单个模块的服务/事务层中。换句话说,MyGiantApp仍然可以拆分(罐子,应用程序上下文等)到各个模块中,这些模块通过另一个模块的事务服务API相互通信。在我们的例子中,我们几乎就像使用Spring一样  服务总线,使用方法调用而不是Web服务或异步消息传递。 虽然第二个选项简化了数据集成,但它使开发变得复杂。现在X团队必须处理相同的代码库。这可以通过使用分支,持续集成和单独的库/上下文等来稍微缓解,但在一天结束时它仍然是我们都在构建的一个令人遗憾的工件。此外,现在一个团队的错误可以更容易地传播到整个应用程序;一个应用程序吹出堆可以把所有下来。 您如何决定何时使用解决方案#1以及何时使用解决方案#2?     
已邀请:
我把它放在一个单独的答案中,因为它的重点与我的第一个完全不同。 听起来你已经仔细考虑过,并且很好地掌握了你的问题和解决方案。让我再看一下(我认为是)你的关键问题......   你怎么决定...... 回到基础:从你知道的真实开始。 与您团队中的相关人员一起举办白板研讨会,您需要: 绘制相关约束的列表。 列出您不想要的结果(单个大型无法管理的应用程序等)。 也建议但可能不是必要的:识别风险和潜在影响(作为约束或不可取的结果的一部分)。 列出您想要的结果(共享数据,轻松部署等)。 优先考虑期望和不可取的结果(非常重要),如果他们在辩论过程中发生变化,也不要感到惊讶。 这些信息应足以开始建立讨论和决策框架。 在本次研讨会之前还可以做一些额外的事情(或者作为其中的一部分,取决于您的情况的政治和社会动态)。 确定系统的目标 - 无论是“商业”意义还是“建筑意义”。 (提示:两者应该对齐 - 或者至少不要冲突)。 如果有一个明确定义的系统或您的业务愿景应该有所帮助(但请记住,这些并不总是存在,好的甚至更少)。 请参阅您所从事系统的业务/战略计划 - 并考虑市场,趋势等。您认为未来应用程序可能会发生什么?在架构上提前思考与代码级别的YAGNI不同,仔细考虑未来可能会影响您现在所做的决定。     
嗨 - 不确定我是否覆盖了你想要回答的确切分数 - 但这是一个开始;如果你想要求澄清,我会相应地更新我的答案。 在数据管理方面,您可能希望开始考虑主数据管理线。想到的第一个想法是你不想要不一致的参考数据;这将建议您使用单个共享数据实例 - 或者您可以拥有多个副本,假设围绕该数据的管理和保管流程非常明确。 在集成方面,重用取决于各种系统的非功能性要求。单个共享服务可以轻松管理数据(因为只需要担心一个副本),但这意味着它可以成为一个瓶颈;更多“链条中最薄弱的环节”适用 - 如果共享服务出现故障会产生什么影响? 可能的解决方案选 如果没有更多信息,很难知道该推荐什么,但我的想法是: 将您的三个应用分开。 将单个共享服务用于共享数据。 可以通过“服务”访问共享数据 - 这将为您提供最多的控制和选项。 共享服务可能作为单个实例存在 - 或 - 您可能已部署服务的多个实例(但只有一个DB实例)。 关键是你应该能够抽象出共享服务而不影响其他应用程序 - 特别是,你不应该考虑制作一个超级应用程序。 还有一件事 - 考虑在商业意义上存在一种“服务”并不排除采用多种技术暴露和消费方式。     
你有没有想过并发,交易,...... 我不知道您的要求,但感觉是时候以正确的方式解决这个问题,并使用中央“存储库”来管理您的共享数据。     

要回复问题请先登录注册