前言

  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. Android ViewModel,LiveData 简要分析

    ViewModel: 负责为关联UI(activity/fragment)进行数据管理,业务逻辑处理.不直接持有view引用,不对UI进行访问调用操作 对外通过暴露Livedata方式响应处理结果 L ...

  2. [转载]pytest报AttributeError: module ‘pytest‘ has no attribute ‘main‘

    转自:https://blog.csdn.net/yinying12/article/details/110522989 pytest报AttributeError: module 'pytest' ...

  3. vue子传父 .indexOf('1')!=-1

    子传父 1.先在父级页面的子组件上加上自定义事件  <SearchSelector @attrinfo="propsinfo" /> 2.在子组件里面写方法传 //点击 ...

  4. python中的上下文管理器以及python内建模块contextlib的contextmanager方法

    上下文管理器 上下文管理器是实现了上下文管理协议的对象,其特有的语法是"with -as".主要用于保存和恢复各种全局状态,关闭文件等,并为try-except-finally提供 ...

  5. 蓝桥杯题目——翻硬币无需修改‘*’与’o‘的特殊解法及其所包含的思想

    前言 本文介绍蓝桥杯题目--翻硬币的一种无需对字符串进行操作的解法及该解法所包含的思想. 题目信息 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可 ...

  6. java 实现Excel导入导出功能

    本文记录 首先需要准备一个导入模板的实体类 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn ...

  7. OpenStack 卷虚拟机跨租户迁移方案

    目标:迁移租户A的卷虚机到租户B 场景:使用卷虚拟机,租户a和b使用相同网络 租户A的操作: 1.记录虚拟机的ip地址,Mac信息, nova interface-list neutron port- ...

  8. D. Triangle Coloring

    https://codeforces.com/contest/1795/problem/D #include <iostream> #include <cstring> #in ...

  9. Pytorch实战学习(四):加载数据集

    <PyTorch深度学习实践>完结合集_哔哩哔哩_bilibili Dataset & Dataloader 1.Dataset & Dataloader作用 ※Datas ...

  10. 808.11ac的MAC层

    MAC层是802.11的主要功能部分.上层应用通过调用MAC层提供的接口原语调用MAC层的功能. 在内部,MAC由除了函数还有数据,叫MIB,存储MAC的各种参数.SME是一个单独的模块,用来跟接口函 ...