gpt4 book ai didi

SOA 风格 - 共享数据

转载 作者:行者123 更新时间:2023-12-04 11:46:10 29 4
gpt4 key购买 nike

我正在考虑为一组服务使用 SOA 架构来支持我咨询的业务,以前我们使用数据库集成,其中每个应用程序从共享的 MS SQL 数据库中挑选出它需要的东西并使用它等等。我们有各种与怪物数据库(包括 java、.net 和 microsoft access)集成的应用程序,由于所有内容都是紧密耦合的,因此具有参照完整性。

我对如何支持服务之间的数据共享有点困惑。

让我们以产品服务为例,它位于批发商每月提供的产品数据库之上。我们构建了一个域模型,并将其放置在使用 Hibernate 或其他任何东西的数据库中,根据批发商提供的有关产品的信息,实现明智的产品是一个大型对象图。

现在假设 Review 服务、Pricing Service、Shipping Service 和 Stock Service 将订阅 ProductUpdated、ProductAdded、ProductDeleted。问题是每个服务只需要部分或部分关于产品的信息。运输可能只需要尺寸和重量。定价可能只需要产品编号、批发成本、批量折扣、迄今为止的有效价格。审核可能需要产品 ID、产品名称、生产商。

是否只是发布整个产品(合适的非订阅者特定契约(Contract),例如 ProductUpdated 和合适的模式 - 代表所有产品对象图)并让订阅者将他们需要的任何内容映射到他们的域模型(或者他妈的做他们想做的事情),这是标准做法吗?想要,甚至可能没有域模型)...

或者在我写这篇文章时,我在想:

产品服务发布 ProductAdded 消息(不包含产品详细信息,仅包含产品 ID 和时间戳)

Pricing Service 订阅 ProductAdded 并发布 RequestPricingForProduct 消息

产品服务发布 ResultForPricingForProduct 消息

嗯.. 似乎好一点......但感觉就像我正在根据我可以识别的其他服务以及他们将需要什么来构建产品服务契约(Contract),也许在 future XYZ 服务需要不同的东西。我打算停在那里,因为我认为我感到困惑的地方越来越清楚了……也许上面的方法会起作用,因为我应该公开一种方法来返回任何应该公开的东西,嗯。

任何意见或方向非常感谢。对不起,如果这看起来半生不熟。

最佳答案

我实际上认为这个问题的解决方案是不共享数据。 SOA 意味着数据归服务所有——它是该数据的技术权威。我建议阅读一些 Pat Helland 的文章,例如 Data On The Inside, Data On The Outside .

这些不同服务之间唯一应该共享的是主键 - 您的示例中的 ProductId 。否则,对于每个服务,需要事务一致的数据会放在一起。

不需要一个“产品”。每个服务都可以对其服务中的产品有不同的看法。对于定价服务,您有一个 productId 和一个价格。对于评论服务,productId 和评论。等等。

如果这些数据来自所有这些不同的服务,那么人们开始困惑的是如何在 UI 中显示这些数据。如何显示产品的评论列表,该产品具有来自 ProductService 的产品名称和来自 ReviewService 的评论文本?

答案是从所有不同的服务组成 UI。从产品服务中获取产品并从评论服务中获取评论数据,然后在 UI 中组合这些数据。

关于SOA 风格 - 共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/963851/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com