微服务12-分布式服务理论基础+Seata的认识

文章目录

  • 分布式服务理论基础
    • 前言
    • 微服务和分布式的区别
    • CAP定理
    • BASE理论
  • Seata
    • 流程:
    • seata部署
    • 微服务集成seata

分布式服务理论基础

前言

单体架构

1.项目过于臃肿,所有服务在一起,一个业务挂了,整个项目就不能用了;

2.资源不能隔离,所有业务用一个资源,共享一个数据库,如果说一个业务突然增大——>导致数据库宕机了,那么其他业务就会受到影响;

3.扩展不灵活,如果我们要对一个服务进行扩展,会将整个系统水平扩展;

4.所有功能得一起上线,一起部署;

分布式:

1.数据一致性:我们先说有个最明显的案例:之前我们的单体架构中,数据库是多个服务共享的,所以事务是ACID的,但是分布式中,每个微服务都有自己独立的数据库,你一个业务串了多个服务,那么分布式下的微服务链路原子性就不能保证了——>比如下面:

例子:创建订单,扣减用户余额,扣减库存(涉及三个服务),在订单业务中远程调用两个服务,我们创建一个订单,假设库存为10,我们下单11个,按道理来说我们是想库存服务和订单服务还有账户服务是会回滚的,因为下单超过库存数,但是实际上只有库存服务会回滚自己的数据库,其余的账户服务和订单服务都会成功;

原因:每个服务都是独立的,有自己的数据库,所以事务也是独立的;

**2.需要考虑网络问题,**因为服务的调用十分依赖网络,尤其是节点非常多,链路非常长的情况下

**3.异步:**引入了各种中间件,GateWay,mq,nacos,seata等等,异步通信增加了功能实现的复杂度;

**4.运维成本:**一个系统被拆成多个服务,每个服务都得配置,部署;

总得来说,就是将原本一个系统分成多个互相调用通信的服务;

在这里插入图片描述
在这里插入图片描述

微服务和分布式的区别

所以:
~ 分布式 的意思是多个模块共同完成一件事情(也可以是一个模块分多个部署),每个节点可以单独完成任务;(分开不同机器部署)
~ 微服务的意思也是多个模块共同完成一件事情,(不管应用部署在哪里)

总结:

微服务和分布式都是拆分单体应用的产物,可以理解为,微服务只是对服务拆分的形容词,分布式是对服务部署方面的考量,微服务是可以包含分布式的,但是分布式不一定是微服务;

CAP定理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
分区:因为网络故障导致分布式中部分节点与其他节点失去连接,从而形成独立分区——>一定会有的;

在这里插入图片描述
解决:
让node03节点等待网络的恢复,在恢复之前不允许访问;——>满足了一致性,不满足可用性

因为分布式系统中,我们的服务节点一定是通过网络连接的,那么就一定会出现分区问题,毕竟你网络是不能保证百分百良好的

在这里插入图片描述

思考:

因为es集群,当有一个节点宕机时,过了一定时间它会被剔除,那么我们就访问不到它了,牺牲了可用性,但是节点上的数据会被分到其他节点上,从而保证了一致性,所以是CP

这里回顾一下es集群:

elasticsearch搭建集群-CSDN博客

突然想到了EureKa和Nacos中的区别里面也涉及AP、CP

区别:

Nacos支持服务端主动检测服务提供者状态:临时实例采用心跳模式,非临时实例采用服务器主动访问模式;

临时实例心跳不正常会被踢出,非临时实例则不会被剔除;

Nacos支持服务列表消息推送模式,即时更新;

补充 nacos、EureKa涉及ap、cp模式

CP和AP是什么?有什么区别?-CSDN博客

BASE理论

牛逼之处:部分的损失可用(A),临时的不一致——>最终的一致性(C),权衡
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Seata

目的:解决分布式系统的事务问题

流程:

1.首先TC是维护协调整个全局的事务的,帮助事务进行提交和回滚,相当于分布式事务一个总的大杂烩
——>2.而作为分布式系统,是有个入口的,因为我们的微服务之间的调用,每调用一个服务就是一个事务出现,也就是说我们这个入口管理了整个服务调用的一个范围,所以说TM事务管理器就相当于全局事务的入口,定义了事务范围,然后开启全局事务
——>3.TC,它会判断我们的全局服务是否进行提交与回滚
——>4.但是在此之前,因为全局事务里面有分支事务,分支事务提交就与RM有关,管理分支事务处理,向TC进行注册事务,并且执行对应的sql,然后报告状态给TC(但是RM此时是没有回滚和提交效果的,说白了也就是执行了服务而已,但是并没有提交)
——>5.TC会进行验证服务状态来判断最后是提交还是回滚,由TM处理;

总结:TM和RM是和业务有关的,对服务进行管理,而TC是独立出来的,维护分支服务状态的
在这里插入图片描述

seata部署

在这里插入图片描述
在这里插入图片描述

新建配置中+配置内容:

# 数据存储方式,db代表数据库
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=123456
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
# 事务、日志等配置
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
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000# 客户端与服务端传输方式
transport.serialization=seata
transport.compressor=none
# 关闭metrics功能,提高性能
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

以上我们数据存储的数据库为seata,我们还需要定义一个全局事务表和一个分支事务表

 
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- 分支事务表
-- ----------------------------
DROP TABLE IF EXISTS `branch_table`;
CREATE TABLE `branch_table`  (`branch_id` BIGINT(20) NOT NULL,`xid` VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`transaction_id` BIGINT(20) NULL DEFAULT NULL,`resource_group_id` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`resource_id` VARCHAR(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`branch_type` VARCHAR(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`status` TINYINT(4) NULL DEFAULT NULL,`client_id` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`application_data` VARCHAR(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`gmt_create` DATETIME NULL DEFAULT NULL,`gmt_modified` DATETIME NULL DEFAULT NULL,PRIMARY KEY (`branch_id`) USING BTREE,INDEX `idx_xid`(`xid`) USING BTREE
) ENGINE = INNODB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = COMPACT;-- ----------------------------
-- 全局事务表
-- ----------------------------
DROP TABLE IF EXISTS `global_table`;
CREATE TABLE `global_table`  (`xid` VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`transaction_id` BIGINT(20) NULL DEFAULT NULL,`status` TINYINT(4) NOT NULL,`application_id` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`transaction_service_group` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`transaction_name` VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`timeout` INT(11) NULL DEFAULT NULL,`begin_time` BIGINT(20) NULL DEFAULT NULL,`application_data` VARCHAR(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`gmt_create` DATETIME NULL DEFAULT NULL,`gmt_modified` DATETIME NULL DEFAULT NULL,PRIMARY KEY (`xid`) USING BTREE,INDEX `idx_gmt_modified_status`(`gmt_modified`, `status`) USING BTREE,INDEX `idx_transaction_id`(`transaction_id`) USING BTREE
) ENGINE = INNODB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = COMPACT;SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述
在这里插入图片描述

seata部署成功

目的:完成分布式事务管理,形成TM,RM,代理我们的分布式事务;

微服务集成seata

在这里插入图片描述

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><exclusions><!--版本较低,1.3.0,因此排除--><exclusion><artifactId>seata-spring-boot-starter</artifactId><groupId>io.seata</groupId></exclusion></exclusions>
</dependency>
<!--seata starter 采用1.4.2版本-->
<dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>${seata.version}</version>
</dependency>

seata-tc-server服务的确定需要再nacos注册中心中进行寻找:服务地址+namespace默认值+分组group+application+事务组+集群

**事务组:**相当于管理分布式系统中里面的微服务(订单,库存…),这些服务把他们进行管理,这些管理的大组为事务组,我们可以根据这个获取TC节点
在这里插入图片描述
在这里插入图片描述

seata:registry:type: nacosnacos:server-addr: 127.0.0.1:8848namespace: ""group: DEFAULT_GROUPapplication: seata-tc-serverusername: nacospassword: nacos#事务组名称tx-service-group: seata-demoservice:#配置映射关系vgroup-mapping:seata-demo: SH

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/160342.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

哪个牌子的电容笔好用?ipad触控笔推荐平价

有哪些电容笔适合学生党入手&#xff1f;苹果Pencil虽然与普通的电容笔&#xff0c;不同的是&#xff0c;这款电容笔同时具有重力传感器和倾斜传感器&#xff0c;而平替电容笔&#xff0c;只有一种倾斜传感器&#xff0c;但在书写方面的体验很不错&#xff0c;可以用来写字&…

【算法|前缀和系列No.4】leetcode238. 除自身以外数组的乘积

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【leetcode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

如何实现前端数据持久化(LocalStorage、IndexedDB等)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

MySQL InnoDB引擎深入学习的一天(InnoDB架构 + 事务底层原理 + MVCC)

目录 逻辑存储引擎 架构 概述 内存架构 Buffer Pool Change Buffe Adaptive Hash Index Log Buffer 磁盘结构 System Tablespace File-Per-Table Tablespaces General Tablespaces Undo Tablespaces Temporary Tablespaces Doublewrite Buffer Files Redo Log 后台线程 事务原…

Hadoop 配置 Kerberos 认证

1、安装 Kerberos 服务器和客户端 1.1 规划 服务端&#xff1a; bigdata3 客户端&#xff08;Hadoop集群&#xff09;&#xff1a; bigdata0 bigdata1 bigdata2 192.168.50.7 bigdata0.example.com bigdata0 192.168.50.8 bigdata1.example.com bigdata1 192.168.50.9 b…

4.Python-用Python,Ajax实现MySQL数据库的新增数据

题记 用python&#xff0c;ajax实现mysql数据库的新增数据。以下是一个简单的实例和操作过程。 安装flask模块 pip install flask 安装mysql.connector模块 pip install mysql-connector-python 编写app.py文件 app.py文件如下&#xff1a; 块引用可能显示不完整&#x…

第15章 SpringBoot

所有的流程逻辑原理都是针对2.3.2.RELEASE版本 15.1 谈谈你对微服务架构演进的理解 难度:★ 重点:★ 白话解析 还是串主线,在串主线的过程中发现问题,解决问题。主线的入口:随着业务的逻辑越来越复杂,架构再不断升级演进,先理解架构的演进。 这道题参考了:企业IT架构转…

kantts docker化

kan-tts docker本地化 环境安装 下载docker镜像(python3.8的) registry.cn-hangzhou.aliyuncs.com/modelscope-repo/modelscope:ubuntu20.04-cuda11.8.0-py38-torch2.0.1-tf2.13.0-1.9.2 安装基础模型 pip install modelscope 安装语音模型 pip install "modelscope…

系列八、Redis的事务

一、是什么 可以一次执行多个命令&#xff0c;本质是一组命令的集合。一个事务中的所有命令都会序列化&#xff0c;按顺序地串行化执行而不会被其他命令插入&#xff0c;不允许加塞。 二、能干嘛 一个队列中&#xff0c;一次性、顺序性、排他性的执行一些列命令。 三、怎么玩…

git本地仓库及远端仓库推送【linux】

git本地仓库及远端仓库推送【linux】 一.git上创建仓库二.linux中git三板斧i.检查是否安装gitii.克隆仓库到本地iii.提交到本地仓库iiii.上传到远端仓库 三.其他内容补充git loggit status.gitignore 一.git上创建仓库 已经创建好的可以直接跳到第二步进入到创建仓库界面&…

SpringBoot + 自定义注解 + AOP 高级玩法打造通用开关

前言 最近在工作中迁移代码的时候发现了以前自己写的一个通用开关实现&#xff0c;发现挺不错&#xff0c;特地拿出来分享给大家。 为了有良好的演示效果&#xff0c;我特地重新建了一个项目&#xff0c;把核心代码提炼出来加上了更多注释说明&#xff0c;希望xdm喜欢。 案例 …

SQL注入漏洞

0x01 漏洞介绍 泛微e-office系统是标准、易用、快速部署上线的专业协同OA软件&#xff0c;国内协同OA办公领域领导品牌&#xff0c;致力于为企业用户提供专业OA办公系统、移动OA应用等协同OA整体解决方案。泛微e-office深谙改革之道以迎变革之机&#xff0c;沉心产品研发数十载…

电子笔记真的好用吗?手机上适合记录学习笔记的工具

提及笔记&#xff0c;不少人都会和学习挂钩&#xff0c;的确学习过程中我们经常会遇到很多难题&#xff0c;而经常记录笔记可以有效地帮助大家记住很多知识&#xff0c;而且时常拿出笔记查看一下&#xff0c;可方便巩固过去学习的知识。 手机作为大家日常随身携带的工具&#…

Matlab进阶绘图第31期—桑基图(Sankey Chart)

桑基图&#xff08;Sankey Chart&#xff09;本质为一种流程图&#xff0c;可以很好地展示数据的层次结构以及流量变化。 桑基图主要由节点块与流动路径线组成。 其中&#xff0c;节点块用于表示类别&#xff1b;流动路径线除了可以直观地表示流动的方向&#xff0c;其宽度还…

【EI会议征稿】第九届能源资源与环境工程研究进展国际学术会议(ICAESEE 2023)

第九届能源资源与环境工程研究进展国际学术会议&#xff08;ICAESEE 2023&#xff09; 2023 9th International Conference on Advances in Energy Resources and Environment Engineering 第九届能源资源与环境工程研究进展国际学术会议&#xff08;ICAESEE 2023&#xff09;…

补体C3/C4(C3/C4)介绍

补体是一种血清蛋白质&#xff0c;存在于人和脊椎动物血清及组织液中&#xff0c;不耐热&#xff0c;活化后具有酶活性、可介导免疫应答和炎症反应。可被抗原-抗体复合物或微生物所激活&#xff0c;导致病原微生物裂解或被吞噬。可通过三条既独立又交叉的途径被激活&#xff0c…

【MATLAB源码-第48期】基于matlab的16QAM信号盲解调仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 16QAM (16个象限幅度调制) 是一种广泛使用的数字调制技术。在无线和有线通信系统中&#xff0c;为了在固定的带宽内发送更多的信息&#xff0c;高阶调制如16QAM被使用。下面是16QAM盲解调的基本步骤、优缺点及应用场景。 16Q…

从零开始学习调用百度地图网页API:一、注册百度地图账号

目录 注册账号申请AK 注册账号 https://lbsyun.baidu.com/index.php?titlejspopular3.0/guide/getkey JavaScript API只支持浏览器类型的ak 申请AK 注&#xff1a;使用示例时&#xff0c;需要在百度地图示例加上https:&#xff0c;替换ak。

蓝桥杯——递增序列和货物摆放

文章目录 前言一、递增序列二、货物摆放总结 前言 多多练习 一、递增序列 解题思路&#xff1a; 代码实现&#xff1a; 当然我的这个代码也不是很正确 发这道题就是向大家集思广益&#xff0c;我的就只作为一个参考啦~ #include <stdio.h> #include <stdlib.h>…

提升医疗服务质量:将互联网医院源码应用于实践

随着科技的快速发展&#xff0c;医疗行业也亟需寻求创新的解决方案来提升服务质量。在这个数字化时代&#xff0c;互联网医院源码成为了引人注目的选择&#xff0c;为医疗机构和患者之间的沟通和协作提供了前所未有的便利。作为该领域的专家&#xff0c;我将介绍互联网医院源码…