请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

应用拆分,数据库,及事务问题

老师,您好!

请教下:

在微服务应用拆分时,通常会将一个大应用拆分为多个模块,每个模块即子应用。

问题1、什么时候子应用单独用一个数据库?什么时候用公共的数据库?

问题2、能举例说明吗?

问题3、若按上面拆分,那么很容易出现在一个 Java 方法中,对数据库的操作,是跨库操作,

    而且这种情况非常多,本地事务似乎不够用,需要用到分布式事务,

    很难做到老师您说的不用分布式事务。

    我上面说的对吗?

    如果是老师您,会怎么做?

问题4、有了分布式事务,本地操作数据库时,还需要添加本地事务吗?

    本来分布式事务就耗资源,如果添加本地事务,不是更耗资源了吗?


可以的话,希望能逐个问题解答,谢谢老师!

正在回答

4回答

1、单独的模块,比如订单、产品这种直接就可以,当然这取决于业务量和请求量,小的话其实没必要。实际中你保证单表操作的话,后面即使要按表拆多个库,也会很容易

0 回复 有任何疑惑可以回复我~
  • 提问者 梨多情 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-04-15 10:12:40
Jimin 2020-04-14 23:08:57

4、你这个问题本身就有问题,你先具体了解一下分布式事务原理吧

0 回复 有任何疑惑可以回复我~
  • 提问者 梨多情 #1
    分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务,例如:
    用户注册送积分事务、创建订单减库存事务,银行转账事务等都是分布式事务。
    分布式事务的实现方式有多种:
        2pc、3pc、tcc、MQ+最终一致性
    前几种实现方式都有明显的缺点,
    我们通常使用的是 MQ+最终一致性 的方式,它是通过补偿等手段,实现分布式事务。
    是我的理解的有问题吗?
    回复 有任何疑惑可以回复我~ 2020-04-15 11:11:11
  • Jimin 回复 提问者 梨多情 #2
    这里我举个例子或许你就能明白我的意思了,假设使用分布式事务控制多个数据源的提交,对于单个数据源提交,他上面的就是单数据源事务,只是使用了相同的事务id,一起提交或回滚而已
    回复 有任何疑惑可以回复我~ 2020-04-16 03:56:45
Jimin 2020-04-14 23:07:45

3、实际中很少使用分布式事务的,我们会借助补偿手段及消息等来保证最终一致性

0 回复 有任何疑惑可以回复我~
Jimin 2020-04-14 23:06:10

2、参考1的例子

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信