微信二维码

二维码 扫二维码马上关注
扫码咨询
有关微服务中的共享数据库问题

        元吉优惠券网将在本文中对这个问题的回答:微服务中的共享数据库实际上是一种反模式吗?

        给定两个需要共享一些数据的服务,在微服务体系结构中如何实际管理它们?本文使用了user和Orders示例,这非常好,因为它非常简单,只需要很少的领域知识。

        第一个问题是:为什么?

        为什么使用microservices ?维基百科说:将应用程序分解为不同的较小服务的好处是,它提高了模块性。这使得应用程序更容易理解、开发、测试,并且对架构侵蚀更有弹性。

        我总是喜欢易于理解、开发和测试的应用程序。对建筑侵蚀具有弹性是一个很好的奖励。

        问题是这种架构不是免费的。由微服务组成的系统是需要在这些服务之间通信的系统,而这通常是此类系统中最复杂的地方。

        在Orders服务中,如果我们需要访问关于用户的一些详细信息,我们如何做呢?

        我们可以直接调用用户服务,但这在服务之间创建了很强的依赖性。如果用户减少,则订单减少。这就违背了建筑的目的。这也意味着我们实际上没有单独的服务,我们只是用RPC交换调用组装指令和分布式调试。所有的成本,没有任何的收益。

        上面的文章正确地调用了这个问题,并询问在使用流时,服务之间的异步集成是否能够工作。我不太清楚那是什么意思。我集成不同微服务的通常方法是不这样做。Istead,我们需要将一个命令发送到另一个服务(即async),或者从一个服务中发布一些数据(也是async)。这两个选项都被认为是抗故障和不可靠的。换句话说,如果我向另一个服务发送命令,而我需要处理失败,我设置了一个计时器,让我知道如何处理不回调。

        即使您只需要从另一个服务发布一些数据,并且可以使用RavenDB ETL之类的特性来共享这些数据。您仍然需要考虑一些问题,比如网络故障导致您对数据的看法滞后。

        这不是您的数据,而是来自另一个服务的已发布数据的副本(可能已经过期)。你可以把它作为参考,但不能指望它。如果需要依赖该数据,则需要向拥有该数据的服务发送一条命令,然后由该服务做出实际的决策。

        总之,这不是一件小事。即使实际的实现可以很容易地完成。

        每个服务都拥有系统的特定部分,这是微服务体系结构的核心原则。

        拥有共享数据库就像拥有后台通行证。从理论上讲,这很好,但它也可能被滥用。它将被滥用。我可以百分之百地保证。

        如果模糊了服务之间的界限,它们就不再独立。有乐趣尝试调试为什么您的用户的登录时间飙升(订单运行月报)。享受破坏支付处理系统(您添加了订单系统无法处理的新用户类型)。这些都是好的部分。我还没有开始讨论当Orders服务试图写入用户表时会发生什么。

        元吉优惠券网建议使用DB ACL来控制它,但是您已经有了更好的方法。不同的数据库,因为它是不同的服务。

        最好考虑一下联合银行账户的情况。和你的配偶有一个共同的银行账户是合理的。和会计部门的玛丽在银行开一个联合账户不太合理,因为那样更容易直接存入你的工资。分离是有原因的,是的,这会让事情变得更困难。

        重点是服务之间的集成将会很困难,所以您将会有更少的集成,并且您将会沿着定义很好的边界进行集成。这意味着我们可以在不同的区域之间有适当的边界和契约,这将导致更好的模块化,从而允许更容易的开发、部署和管理。

        如果这不是您想要的,也没关系,但不要进入微服务体系结构。因为一个整体架构很好,但是创建一个带有共享数据库的微服务架构就不是这样了。问问会计部门的玛丽就知道了……

更多精彩内容,请关注元吉优惠券网:专注阿里云代金券阿里云服务器报价腾讯云代金券的免费更新领取!
更多精彩内容推荐:

objective - c内部类
向Swift扩展添加存储属性的最简单方法
架构决策的多样性
使用Firebase云消息向React Web应用程序添加推送通知
在ASP中构建动态Zip包:第1部分
如何使用Firebase云消息向React Web应用程序添加推送


在线客服
热线电话

扫一扫 微信加好友