前言

  1.什么是分布式事务,分布式事务包含哪些角色

    分布式事务主要包含,事务参与者,事务管理者,资源服务器三个角色。分布式事务是指着三个角色分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。

  2.分布式事务主要的实现方式:XA协议(包含2PC和3PC),TCC协议

    2PC方式:2PC是非常经典的强一致、中心化的原子提交协议,协议中定义了两类节点:一个中心化协调者节点和多个参与者节点。2PC分为两个阶段:准备阶段(PreCommit),提交阶段(do Commit)。

  准备阶段:事务协调者向所有事务参与者发送事务内容,询问是否可以提交事务。所有事务参与者,执行事务操作,并将Undo和Redo记录在事务日志中,但不提交事务。

  提交阶段:所有事务参与者向事务协调者反馈结果,

    如果反馈都为Yes,协调者向所有参与者发送Commit请求,参与者执行Commit操作,并释放资源。各参与者向协调者回馈ACK完成的消息,协调者收到所有参与者反馈的Ack消息后,即完成事务提交。

    如果任何一个参与者反馈为NO,协调者向所有参与者发送Rollback请求,参与者执行阶段1中的Undo信息。并释放资源。各参与者向协调者回馈ACK完成的消息,协调者收到所有参与者反馈的Ack消息后,即完成事务中断。

    3PC方式:3PC方式时2PC方式的改进版本。在2PC方式中增加了canCommit阶段。并设置了超时机制

  canCommit阶段:事务协调者向所有参与者询问是否可以提交事务。

  preCommit阶段:canCommit阶段所有参与者都返回yes的情况,进行预提交事务,任何一方返回No终端事务。

  doCommit阶段:preCommit阶段都返回yes则提交事务,任何一方返回No或者超时,执行Undo操作。  

    TCC方式(事务补偿协议):TCC将事务分为三个步骤,Try->Commit->Cancel

  1、Try:预留业务资源/数据效验

  2、Confirm:确认执行业务操作

  3、Cancel:取消执行业务操作

  3.主流的分布式事务

    seata

seata分布式事务的实现方式:

  1.XA方式:包含2PC和3PC

  2.AT模式(Auto Trasaction):对代码无入侵,seata自动生成事务preCommit中的redo和undo操作。操作简单,

不足指出,如果对共享数据进行操作,会存在脏写的情况。

  什么是脏写:所谓脏写,就是我刚才明明写了一个数据值,结果过了一会却没了。而它的本质就是事务 B 去修改了事务 A 修改过的值,但是此时事务 A 还没提交,所以事务 A 随时会回滚,导致事务 B 修改的值也没了,这就是脏写的定义。

  3.TCC模式:

  

  4.SAGA模式:

  

  总结:

  AT 模式是无侵入的分布式事务解决方案,适用于不希望对业务进行改造的场景,几乎0学习成本。
  TCC 模式是高性能分布式事务解决方案,适用于核心系统等对性能有很高要求的场景。
  Saga 模式是长事务解决方案,适用于业务流程长且需要保证事务最终一致性的业务系统,Saga 模式一阶段就会提交本地事务,无锁,长流程情况下可以保  证性能,多用于渠道层、集成层业务系统。事务参与者可能是其它公司的服务或者是遗留系统的服务,无法进行改造和提供 TCC 要求的接口,也可以使用 Saga 模式。
  XA模式是分布式强一致性的解决方案,但性能低而使用较少。

seata服务器的安装部署:

  1:下载seata,

    官网下载地址:http://seata.io/zh-cn/blog/download.html

    gitHub下载地址:https://github.com/seata/seata/releases

  2:配置Java环境 ,https://www.cnblogs.com/hisunhyx/p/14925939.html

  3:新建mysql seata库,并建立seata用户,授权。将安装包中的sql导入执行,创建初始表。

-- 创建数据库study_db
create database if not exists seata_db;
-- 创建用户 %表示允许所有IP访问 localhost表示只允许本机访问
create user 'seata'@'%' IDENTIFIED with mysql_native_password by 'seata';
-- 授权
grant all PRIVILEGES on seata_db.* to 'seata'@'%';
flush privileges;

  https://github.com/seata/seata/blob/1.4.2/script/server/db/mysql.sql   

  导入数据表结构初始化脚本。

  4:安装nacos环境。

  5:修稿Seataserver的配置文件registry.conf

    修改 regist和config的type为nacos,并完成nacos的相关配置。

  6:在nacos中配置相关的config信息,配置的dataid和namespace等信息需要和步骤5的保持一致

     参考地址:https://github.com/seata/seata/blob/develop/script/config-center/config.txt

transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableClientBatchSendRequest=false
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
service.vgroupMapping.merchant-group=default
service.vgroupMapping.public-moudle-group=default
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=false
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
store.mode=db
store.publicKey=
store.file.dir=file_store/data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=async
store.file.sessionReloadReadSize=100
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://192.168.30.199:3306/seata_db?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
store.db.user=seata
store.db.password=seata
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
store.redis.mode=single
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
store.redis.sentinel.masterName=
store.redis.sentinel.sentinelHosts=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=
store.redis.queryLimit=100
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
log.exceptionRate=100
transport.serialization=seata
transport.compressor=none
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

  7:启动seata

   ./seata-server.sh -h 127.0.0.1 -p 8091 -m db  &

  

  

  

Centos7 安装Seata,注册中心选择nocas的更多相关文章

  1. 分布式系统CAP理论以及注册中心选择

    CAP定理:指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可同时获得. 一致性(C-数据 ...

  2. Dubbo框架介绍与安装 Dubbo 注册中心(Zookeeper-3.4.6)

    背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. • 单一应用架构 • 当网站流量很小时, ...

  3. 安装 Dubbo 注册中心(Zookeeper-3.4.6)--单节点

    1.建议使用dubbo-2.3.3以上版本的使用zookeeper注册中心客户端2.Zookeeper是Apache Hadoop的子项目,强度相对较好,建议生产环境使用该注册中心.3.Dubbo未对 ...

  4. 安装Dubbo注册中心(Zookeeper-3.4.6)

    样例视频教程:http://www.roncoo.com/course/view/f614343765bc4aac8597c6d8b38f06fd Dubbo建议使用Zookeeper作为服务的注册中 ...

  5. 架构师必备软件:安装Dubbo注册中心(Zookeeper-3.4.6)

    Dubbo建议使用Zookeeper作为服务的注册中心. http://www.roncoo.com/details?cid=f614343765bc4aac8597c6d8b38f06fd 注册中心 ...

  6. 170426、centos6.5安装 Zookeeper注册中心

    注册中心服务器(192.168.3.71)配置,安装 Zookeeper: 1. 修改操作系统的/etc/hosts 文件中添加: # zookeeper servers 192.168.3.71 r ...

  7. 跟我学习dubbo-ZooKeeper注册中心安装(2)

    注册中心 可选方案:zookeeper.Redis 1.建议使用dubbo-2.3.3以上版本的使用zookeeper注册中心客户端 2.Zookeeper是Apache Hadoop的子项目,强度相 ...

  8. ZooKeeper注册中心安装详细步骤(单节点)

    安装 Dubbo 注册中心 Dubbo 建议使用 Zookeeper 作为服务的注册中心. 注册中心服务器(192.168.3.71)配置,安装 Zookeeper: 1. 修改操作系统的/etc/h ...

  9. dubbo服务治理中间件,zookeeper注册中心 安装配置

    对传统项目架构进行拆分: 集群概念: 面向服务分布式架构: 服务层提供被注册的对象需要实现序列化接口Serializable: 配置表现层和服务层: 依赖包: 服务层: <!-- 定义dubbo ...

  10. 这个注册的 IP 网络都不通了,Eureka 注册中心竟然无法踢掉它!

    本文导读: 微服务技术架构选型介绍 k8s 容器化部署架构方案 Eureka 注册中心问题场景 问题解决手段及原理剖析 阅读本文建议先了解: 注册中心基本原理 K8s(Kuberneters)基本概念 ...

随机推荐

  1. java 转发重定向

    首先我们要知道: (1)request.getRequestDispatcher()是请求转发,前后页面共享一个request ; 这个是在服务端运行的,对浏览器来说是透明的.(2)response. ...

  2. 1223. 掷骰子模拟 (Hard)

    问题描述 1223. 掷骰子模拟 (Hard) 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时, 连续 掷出数字 i 的次数不能超过 ...

  3. Centos 6.5 iptables 端口白名单设置

    iptables -I INPUT -p tcp --dport 8888 -j DROPiptables -I INPUT -s 10.9.145.101 -p tcp --dport 8888 - ...

  4. 05-python的输入与输出

    python输入(input)与输出(print) 一.输入(input) 在python3中,input会将接收到的用户输入自动存储为字符串类型 username = input('输入用户名:') ...

  5. php中的错误异常处理

    作者:小涵 |  阅读: 1636 在PHP5中添加了类似于其它语言的错误异常处理模块.在PHP代码中所产生的异常可被throw语句抛出并被catch语句捕获.需要进行异常处理的代码都必须放入 在PH ...

  6. function的length,就是第一个具有默认值之前的参数个数。

    一个拥有 length 属性和若干索引属性的对象就可以被称为类数组对象,类数组对象和数组类似,但是不能调用数组的方法.常见的类数组对象有 arguments 和 DOM 方法的返回结果,还有一个函数也 ...

  7. RabbitMQ Linux安装与启动服务

    本文转载自 https://blog.csdn.net/chengmin123456789/article/details/124710277 1.先下载 erlang-23.2.3-1.el7.x8 ...

  8. TreeView控件的基本用法

    https://www.cnblogs.com/net064/p/5534697.html https://www.bbsmax.com/A/RnJW6VGvzq/

  9. redisTemplate类学习及理解

    List<Object> list = masterRedisTemplate.executePipelined((RedisCallback<Long>) connectio ...

  10. ubuntu18.04 安装 opencv(版本4.5.5) cmake(版本3.25)

    参考链接:安装cmake     https://blog.csdn.net/Man_1man/article/details/126467371   安装 opencv  https://blog. ...