想象一下,我们有2项服务:产品和订单.基于我对SOA的理解,我知道每个服务都可以拥有自己的数据存储(一个单独的数据库,或同一个数据库中的一组表).但是,不允许任何服务直接触摸另一个服务的数据存储.
现在,假设我们在产品和订单服务中独立存储了产品和订单数据.在订单服务中,我们可以通过其ID识别产品.
我的问题是:使用这种架构,如何在"同一"页面上显示订单列表和产品详细信息?
我的理解是我应该从OrderService获取OrderItems列表.每个OrderItem都有一个ProductID.现在,如果我单独调用ProductService来检索有关每个产品的详细信息,那将是非常低效的.
你会如何解决这个问题?
干杯,莫什
Mos*_*osh 12
我做了一些研究,发现了2种不同的解决方案.
1-服务可以在本地缓存其他服务的数据.但这需要pub/sub机制,因此应该发布数据源的任何更改,以便订阅服务可以更新其本地缓存.实施起来成本很高,但是最快的解决方案是因为服务在本地具有所需的数据.它还通过防止服务依赖于其他服务的数据来提高服务的可用性.换句话说,如果其他服务不可用,它仍然可以通过其缓存数据完成其工作.
2-或者,服务可以通过提供标识符列表来查询来自另一个服务的对象的"列表".这可以防止对目标服务进行单独调用以获取给定对象的详细信息.这更容易实现,但在性能方面,并不像解决方案1那么快.此外,如果目标服务不可用,源服务无法完成其工作.
希望这有助于其他遇到此问题的人.
MOSH