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