假设我们有 2 项服务:产品和订单。根据我对SOA的理解,我知道每个服务都可以有自己的数据存储(一个单独的数据库,或者同一数据库中的一组表)。但任何服务都不允许直接接触另一个服务的数据存储。
现在,假设我们已将产品和订单数据独立存储在产品和订单服务中。在订单服务中,我们可以通过产品 ID 来识别产品。
我的问题是:通过这种架构,如何在“同一”页面上显示订单列表和产品详细信息?
我的理解是我应该从 OrderService 获取 OrderItems 列表。每个 OrderItem 都有一个 ProductID。现在,如果我单独调用 ProductService 来检索每个产品的详细信息,效率会非常低。
您将如何解决这个问题?
干杯,
莫什
我做了一些研究,发现了两种不同的解决方案。
1-服务可以在本地缓存其他服务的数据。但这需要发布/订阅机制,因此数据源的任何更改都应该发布,以便订阅服务可以更新其本地缓存。虽然实施成本较高,但这是最快的解决方案,因为服务在本地拥有所需的数据。它还通过防止服务依赖于其他服务的数据来提高服务的可用性。换句话说,如果其他服务不可用,它仍然可以通过其缓存数据完成其工作。
2- 或者,服务可以通过提供标识符列表来查询来自另一个服务的对象“列表”。这可以防止单独调用目标服务来获取给定对象的详细信息。这更容易实现,但在性能方面,不如解决方案 1 快。此外,如果目标服务不可用,源服务将无法完成其工作。
希望这对遇到此问题的其他人有所帮助。
Mosh
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)