当前位置 : 主页 > 大数据 > 区块链 >

SOA和共享的数据库

来源:互联网 收集:自由互联 发布时间:2021-06-22
我不明白SOA(面向服务的架构)和数据库。虽然我受到SOA概念(将可重用的业务逻辑封装到服务中)的吸引力,但我无法弄清楚如果其他服务/系统需要封装在服务中的数据表,或者SOA适合于
我不明白SOA(面向服务的架构)和数据库。虽然我受到SOA概念(将可重用的业务逻辑封装到服务中)的吸引力,但我无法弄清楚如果其他服务/系统需要封装在服务中的数据表,或者SOA适合于在这种情况下呢?

更具体地说,假设我有两个服务:

> CustomerService:包含我的Customers数据库表和关联的业务逻辑。
> OrderService:包含我的Orders表和逻辑。

现在如果我需要使用SQL语句加入Customers和Orders表?如果表格包含数百万条目,如果我必须通过使用SOAP / XML的网络发送数据,将导致不可接受的性能。以及如何执行JOIN?

做了一点研究,我发现了一些提出的解决方案:

> Use replication在需要时制作所需数据的本地副本。但是那么没有封装,那么使用SOA的重点在于什么呢?这是on StackOverflow,但没有明确的共识。
>设置一个封装所有数据库数据的Master Data Service。我想这会让怪物大小(每个存储过程基本上有一个API调用),并且需要更新。对我来说这似乎与enterprise data bus概念有关。

如果您有任何意见,请告知我。

编辑:一年过去了,我对SOA的兴趣一直在减少,而概念的普及也在减少。如今,人们似乎想专注于RESTful服务。

在这种情况下,“服务”的定义主体之一是绝对拥有其负责的领域的数据以及该数据的操作。

通过复制或任何其他机制复制数据可以减轻责任。您也可以复制业务规则,否则您最终会卷入需要更新的其他服务以更改内部规则的情况。

使用单一数据服务只是“不要做SOA”;如果您拥有管理所有数据的单一位置,则您没有独立的服务,您只需要一个服务。

相反,我建议使用第三个选项:使用组合将数据放在一起,避免数据库级的JOIN操作完全。

而不是考虑在数据库中将这两个值一起加入,考虑如何将它们组合在一起:

当您为客户呈现HTML页面时,您可以从多个服务提供HTML,并将它们彼此视觉化:客户详细信息来自客户服务,订单服务的订单详细信息。

同样的发票电子邮件:从多个服务组合数据可视化,而不需要数据库内连接。

这有两个优点:一,你不需要加入数据库,甚至需要将数据存储在同一类型的数据库中。现在每个服务都可以使用任何数据存储最适合他们的需要。

二,你可以更容易地改变你的应用程序的外部。如果您有小的可组合部件,您可以轻松地以新的方式添加重新排列零件。

网友评论