前言

设计一个分布式事务框架前,首先要明确问题到定义。分析具体应用场景,包括以下三个:A、服务内跨数据库的事务;B、跨内部服务的事务;C、跨外部服务的事务。其中划分内部和外部的标准是:内部服务我们可以控制其实现,修改配置或代码;外部服务指的是第三方的,只能约定通信的方式和具体协议,具体代码实现在控制范围之外。

一、应用场景A:服务内跨数据库

如下图所示,在同一个服务方法内,访问两个或两个以上数据库。我们知道,Java事务是通过Connection对象控制的。不同的数据库,是不同的数据库链接,通过不同的Connection对象实现。传统数据库事务无法实现事务控制,需要引入事务协调者的概念。这是场景A,这个场景中分布式体现在数据库的部署上。

二、应用场景B:跨内部服务

如下图所示,一个服务通过微服务框架或者RPC调用调用其他的服务,多个子服务需要同时成功或失败。每个子服务都有自己的持久化方式,不一定是数据库,体现事务的持久性。每个子服务部署在不同的服务容器中,不同的服务容器部署在不同的服务器节点上。这是场景B,这个场景中分布式体现在服务(或应用)的部署上。这时候,事务的概念已经超出“数据库”的范畴了。

三、应用场景C:跨外部服务

这个场景是在应用场景B的基础上,进一步,服务的具体实现在我们控制范围之外。我们不能限制其实现语言,不能要求指定方法上加标注(注解)。甚至除了服务调用的网络通道外,我们不能期望服务间访问相同的Zookeeper作为事务协调器。这是场景C,这个场景中,我们只能在通信协议层面做约定,是最彻底的分布式场景。

分库分表学习总结(4)——分布式事务常见应用场景总结相关推荐

  1. Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案

    Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案 参考文章: (1)Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案 (2)https://www.cnblogs.com/ ...

  2. 分库分表学习总结(3)——深入理解分布式事务

    1.什么是分布式事务 分布式事务就是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上.以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成 ...

  3. 分库分表学习总结(6)——分库分表?选型和流程要慎重,否则流程会失控!

    数据库中间件之分库分表 恭喜你,贵公司终于成长到一定规模,需要考虑高可用,甚至分库分表了.但你是否知道分库分表需要哪些要素?拆分过程是复杂的,提前计划,不要等真正开工,各种意外的工作接踵而至,以至失控 ...

  4. 分库分表学习总结(5)——有关分库分表相关面试题总结

    一.为什么要分库分表? 分表 比如你单表都几千万数据了,你确定你能扛住么?绝对不行,单表数据量太大,会极大影响你的 sql 执行的性能,到了后面你的 sql 可能就跑的很慢了.一般来说,就以我的经验来 ...

  5. 分库分表的 9种分布式主键ID 生成方案,挺全乎的

    <sharding-jdbc 分库分表的 4种分片策略> 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为 ...

  6. nodejs mysql 分表_数据库分库分表学习

    大型网站数据库分库分表 分库分表方案: 垂直&水平 1.什么是垂直拆分? 指的是将一个包含了很多表的数据库,根据表的功能的不同,拆分为多个小的数据库,每个库中包含部分表. .垂直拆分的另外2种 ...

  7. 分库分表的 9种分布式主键ID 生成方案

    <sharding-jdbc 分库分表的 4种分片策略> 中我们介绍了 sharding-jdbc 4种分片策略的使用场景,可以满足基础的分片功能开发,这篇我们来看看分库分表后,应该如何为 ...

  8. 分库分表学习总结(2)——数据库中间件MyCat学习总结之MyCat-Web原理介绍

    Mycat是一个分库分表的基于java开发的数据库中间件,使用过程中需要有一个监控系统,mycat-web应运而生.mycat-web是一个使用SpringMVC + Mybatis的监控平台,使用常 ...

  9. sharding-jdbc 处理分库分表学习

    分库分表 分库分表带来的问题 sharding-jdbc sharding-jdbc要解决的就是分库分表带来的问题(即分库分表已经被分好了,sharding-jdbc是为了更好操作的一种解决方案) s ...

  10. oracle分库分表原理_02. MyCat 的原理,应用场景,分库分表的思想

    # MyCAT 作用是能够代替昂贵的oracle的MySQL集群中间件. 1) 一个彻底开源的,面向企业应用开发的"大数据库集群" 2) 支持事务.ACID.可以替代Mysql的加 ...

最新文章

  1. PHP 使用 Redis
  2. python学会后再学c_目前python熟练 ,想再学golang 需要先学c吗?
  3. 网站如何布局才能更利于提升用户体验?
  4. 【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )
  5. Windows中各类画面源的截取和合成方法总结
  6. 小技巧,找出所有check table设置为某个数据库表的数据库表
  7. discuzX 帖子 有的图片没输出 [attach]12323[/attach]的解决办法
  8. 剑指Offer - 面试题54. 二叉搜索树的第k大节点(二叉树循环遍历)
  9. anaconda下python2和python3环境共存
  10. 用户交互输入--mtd-utils代码一例
  11. android 获取linux线程状态,Android 的进程与线程总结
  12. java为什么删除jpg删不掉_java-如何在不损失质量的情况下从图像(JPG)删除元数据?...
  13. python使用级数pi的近似值_JavaScript与Python计算pi的近似值运行时间对比
  14. socket-(2)
  15. java cmd 进程_关闭CMD进程-JAVA
  16. Ubuntu 16.04 修改Home目录下的 中文目录 为英文目录
  17. 分享一个jQuery的自动客户端本地保存插件Sisyphus.js - 帮助你自动保存用户输入内容
  18. 工单处理之--docker版java应用增加调试日志的笨方法
  19. 2018年物联网趋势
  20. ntp和chrony

热门文章

  1. (c语言)输入两个整数a和n,计算下面表达式的值。Sn=a+aa+aaa+aaaa+.....+aa..aa(n个a)
  2. 35岁学python爬虫_35岁码农的机器学习入门之路-python篇
  3. 力扣98. 验证二叉搜索树(JavaScript)
  4. java kafka分布式_JavaWeb项目架构之Kafka分布式日志队列
  5. python的celery的面试_面试必问的celery,你了解多少?
  6. C++之操作符重载探究(三):输出操作符重载
  7. 远程协助计算机是灰色的,服务器远程协助是灰色的
  8. python中typeerror是什么意思_TypeError:在Python中
  9. html文件元素体,文档表示HTML文件,文档中的______________被称为元素
  10. c51语言bit函数,keil C51中的本征函数库及使用说明