SOA:跨多个服务连接数据

Mos*_*osh 18 service soa

想象一下,我们有2项服务:产品和订单.基于我对SOA的理解,我知道每个服务都可以拥有自己的数据存储(一个单独的数据库,或同一个数据库中的一组表).但是,不允许任何服务直接触摸另一个服务的数据存储.

现在,假设我们在产品和订单服务中独立存储了产品和订单数据.在订单服务中,我们可以通过其ID识别产品.

我的问题是:使用这种架构,如何在"同一"页面上显示订单列表和产品详细信息?

我的理解是我应该从OrderService获取OrderItems列表.每个OrderItem都有一个ProductID.现在,如果我单独调用ProductService来检索有关每个产品的详细信息,那将是非常低效的.

你会如何解决这个问题?

干杯,莫什

Mos*_*osh 12

我做了一些研究,发现了2种不同的解决方案.

1-服务可以在本地缓存其他服务的数据.但这需要pub/sub机制,因此应该发布数据源的任何更改,以便订阅服务可以更新其本地缓存.实施起来成本很高,但是最快的解决方案是因为服务在本地具有所需的数据.它还通过防止服务依赖于其他服务的数据来提高服务的可用性.换句话说,如果其他服务不可用,它仍然可以通过其缓存数据完成其工作.

2-或者,服务可以通过提供标识符列表来查询来自另一个服务的对象的"列表".这可以防止对目标服务进行单独调用以获取给定对象的详细信息.这更容易实现,但在性能方面,并不像解决方案1那么快.此外,如果目标服务不可用,源服务无法完成其工作.

希望这有助于其他遇到此问题的人.

MOSH

  • 我想在这个问题上与克里斯不同意.这些"限制"是非常有用的约束.举个例子,这些约束可以帮助您扩展系统以进行扩展.软件开发是关于明智地选择约束.在一个小的演示应用程序中,这种约束可能看起来很愚蠢,但是在需要长时间维护的大型应用程序中,它很有意义. (9认同)