在微服务开发中,存在诸多的开发痛点,例如分布式事务、全链路跟踪、限流降级和服务平滑上下线等。而在这其中,分布式事务是最让开发者头痛的。那分布式事务是什么呢?html
分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不一样的分布式系统的不一样节点之上。简单的说,就是一次大的操做由不一样的小操做组成,这些小的操做分布在不一样的服务器上,且属于不一样的应用,分布式事务须要保证这些小操做要么所有成功,要么所有失败。本质上来讲,分布式事务就是为了保证不一样数据库的数据一致性。或者,在换一句话说,分布式事务 = n 个本地事务。经过事务管理器,达到 n 个本地事务要么所有成功,要么所有失败。git
那有什么方案解决上述的这些难点和痛点呢?github
SEATA做为一款开源的分布式事务解决方案应运而生,其致力于在微服务架构下提供高性能和简单易用的分布式事务服务。redis
官方网址:https://seata.io/zh-cn/index.htmldocker
GitHub: https://github.com/seata/seata数据库
微服务架构下,易用、高效的分布式事务解决方案。bash
技术积累服务器
愿景:像使用本地事务同样使用分布式事务,提供一站式的分布式事务解决方案架构
其中,TC 为单独部署的 Server 服务端,TM 和 RM 为嵌入到应用中的 Client 客户端。负载均衡
TM 请求 TC 开启一个全局事务。TC 会生成一个 XID 做为该全局事务的编号。
XID,会在微服务的调用链路中传播,保证将多个微服务的子事务关联在一块儿。
RM 请求 TC 将本地事务注册为全局事务的分支事务,经过全局事务的 XID 进行关联。
TM 请求 TC 告诉 XID 对应的全局事务是进行提交仍是回滚。
TC 驱动 RM 们将 XID 对应的本身的本地事务进行提交仍是回滚。
官方文档地址:https://seata.io/zh-cn/docs/ops/deploy-by-docker.html
新建一个文件夹: /docker-compose/seata
建立文件: docker-compose.yaml
version: "3" services: seata-server: image: seataio/seata-server hostname: seata-server ports: - "8091:8091" environment: - SEATA_PORT=8091 - STORE_MODE=file
在文件同一级, 运行命令: docker-compose up -d
。 -d
是让seata在后台运行,若是你想看到各服务的注册和移除状况,能够不用。
在 Linux/Mac 下
$ sh ./bin/seata-server.sh
在 Windows 下
bin\seata-server.bat
参数 | 全写 | 做用 | 备注 |
---|---|---|---|
-h | --host | 指定在注册中心注册的 IP | 不指定时获取当前的 IP,外部访问部署在云环境和容器中的 server 建议指定 |
-p | --port | 指定 server 启动的端口 | 默认为 8091 |
-m | --storeMode | 事务日志存储方式 | 支持file ,db ,redis ,默认为 file 注:redis需seata-server 1.3版本及以上 |
-n | --serverNode | 用于指定seata-server节点ID | 如 1 ,2 ,3 ..., 默认为 1 |
-e | --seataEnv | 指定 seata-server 运行环境 | 如 dev , test 等, 服务启动时会使用 registry-dev.conf 这样的配置 |
如:
$ sh ./bin/seata-server.sh -p 8091 -h 127.0.0.1 -m file
下一章将给你们介绍基于Dubbo + Seata的分布式事务 --- AT模式的实战案例,敬请期待!