处理面向微服务的架构数据(第2部分)

这是我对PEAT UK播客的逐字记录:

你好,再一次到另一个热点。 我叫Peter Pilgrim,DevOps专家,Java企业和平台工程师以及Java Champion

微服务应用程序中的数据库架构是什么?

在真正的独立微服务中,它们的设计和构建遵循“单一责任原则”(罗伯特·马丁),即软件功能,类,程序包或聚合模块不是一件好事,而只有一件事好。

* [SRP](https://en.wikipedia.org/wiki/Single_responsibility_principle)

单一责任原则是一种计算机编程原则,该原则规定,每个模块或类都应对软件提供的功能的一部分负责,而责任应由类完全封装。 它的所有服务都应严格地与这一责任保持一致。 罗伯特·C·马丁(Robert C. Martin)表示以下原则:“一堂课只有一个改变的理由。” [1]

因此,SRP表示微服务必须松散耦合,以便可以独立开发,部署和扩展

一些业务交易必须强制执行跨越多个服务的不变式。 例如,下订单用例必须验证新订单不会超过客户的信用额度。 其他业务交易,必须更新多个服务拥有的数据。

一些业务交易需要查询多个服务拥有的数据。 例如,“查看可用信用”用途必须查询“客户”以找到信用额度,并“订单”以计算未结订单的总额。

某些查询必须联接多个服务拥有的数据。 例如,要查找特定地区的客户及其最近的订单,需要在客户和订单之间建立连接。

不同的服务具有不同的数据存储要求。 对于某些服务,关系数据库是最佳选择。 其他服务可能需要NoSQL数据库,例如MongoDB,后者擅长存储复杂的非结构化数据,或Neo4J,Neo4J用于高效地存储和查询图形数据。

理想情况下,应用程序中的每个微服务都应该是其自己的数据库副本,只有特定的服务才能访问。 换句话说,一个微服务有一个私有数据库。 让我们明确地说。 微服务类的每个实例都拥有数据库的所有权,当我使用术语数据库时,它的含义非常抽象。 该数据库只是一个持久性存储,它可以是RDBMS,NoSQL或Graph数据库或其他持久性存储机制。 因此,在这里我要说的是一个微服务的三个实例,一个库存仓库付款处理器访问一个分布式商店。 因此,请想象一下。

假设我们需要处理一个峰值,然后可以将数量实例加倍到库存仓库支付微处理器服务中,然后有6个实例与我们的实例进行通信。 我们可以再次将其加倍为12个通信,然后再将其加倍为24个通信(或连接)。 现在,我们真的可以感觉到从Java微服务到我们所谓的数据库的48个持久连接的压力吗?

确切地说,因为问题在于数据库需要扩展,并且对于我们非常私人的客户数据(包括您和我的客户),仍然需要保持原子性,一致性,隔离性和持久性。

因此,以我的经验,人们对微服务持久性数据库有不同的想法。 对于某些人来说,理想太多了,例如,客户可能会寻求AWS RDS Aurora寻求解决方案,因为他们知道该解决方案基于MySQL,而Amazon则引用了该服务器终端节点的可靠分布,从而可以扩展。 MySQL工作台可与远程Aurora RDS以及工作站或公司内部数据中心上的本地数据库一起使用。 由于AWS RDS可以被视为具有多个架构的分布式数据库服务器,因此跨微服务实例共享的用户和表可能对客户具有吸引力。 缺点显然是亚马逊要收取费用,当然还要担心客户数据的隐私和安全性。

翻译自: https://www.javacodegeeks.com/2018/09/dealing-with-micro-service-oriented-architecture-data-part-2.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值