1.什么是分布式事务
指在分布式架构中出现的事务,无法满足事务的ACID原则
2.什么是CAP定理
C: 一致性 A: 高可用性 p: 分区容错性
CAP定理在分布式架构中同时满足是不可能的,只能在CP和AP之间选择。
CP强调一致性 AP强调高可用性
3.什么是BASE理论
Basically Available(基本可用):保证核心业务可用
Soft State(软状态):可以允许数据短暂出现不一致
Eventually Consistent(最终一致性)
4.常见的分布式事务解决方案
XA模式:基于XA的2PC,远程管理事务。
优点:事务强一致性,满足ACID
缺点:由于事务强一致性,性能差
AT模式:分阶段提交事务模型,弥补XA模型中资源锁定周期过长的缺陷
优点:利用全局锁实现读写隔离、无代码侵入
缺点:框架的快照功能会影响性能
TCC模式:分阶段提交事务模型,通过人工编码来实现数据恢复
优点:不需要使用全局锁,比AT性能强
缺点:有代码侵入性,需要人为编写Try、Confirm、Cancel接口
SAGA模式:解决长事务的方案
优点:基于事件驱动实现异步调用、吞吐量高、无锁、性能高
缺点:时效性差、没有事务隔离、会有脏写问题
MQ + 本地消息表 :将分布式事务拆分成不同的事务分支,采用消息通知来避免分布式事务,实现最终一致性
优点:可以实现异步调用、性能高
缺点:代码实现复杂,一致性比较弱
5.SeataAT模式基本流程介绍
SeataAT模式分为二阶段:
一阶段: 1.分支事务注册到全局事务 @GlobalTransaction开启全局事务,可以在有事务的方法上加
2.记录undo_log(前镜像回滚+后镜像校验数据)
3.执行sql并提交
4.报告事务状态
二阶段: 1.一阶段全部成功 删除相关的undo_log日志
2.一阶段失败 根据undo_log日志恢复数据
6.项目中分布式事务场景及解决介绍
在进行实名认证业务时,涉及到分布式事务。 有三个微服务四张表。 user服务 (ap_user、ap_user_realname) article服务(ap_author) wemedia服务(wm_user)
1.用户提交身份认证审核
2.运营平台审核申请
3.事务提交成功,为用户创建自媒体账户,添加用户作者信息。
4.由于微服务都拥有自己的数据库,如果某个微服务由于某些原因(网络不好)造成操作失败,会造成数据库的数据不一致 我们使用的是seata来解决分布式事务。
seata是alibaba的开源分布式事务一站解决方案,支持的事务模式: AT模式、TCC模式 XA模式 、SAGA模式 我们使用的是AT模式 ,它可以实现原子性事务,代码侵入性低
7.SeataAT问题
1.SeataTC宕机:用nacos作为配置中心,搭建集群
2.由于事务隔离级别是读未提交,会有脏读问题
3.解决脏读问题:在select 语句后 for update
4.不会出现脏写问题:通过加全局锁来解决脏写问题
5.回滚时,如何恢复数据?
先根据后置镜像进行数据校验,如果当前数据库的数据和后置镜像不一致,说明数据库被Seata1以外的操作修改了,所以回滚会失败,seata会不断的重试回滚。 如果当前数据库的数据和后置镜像一致,会根据前置镜像的数据恢复数据库数据。
8.阿里云对象存储OSS介绍
解决分布式存储问题,我们将项目所需的素材信息全部存储到OSS
9.项目中OSS的具体使用方式
1.去阿里云官网开通OSS对象存储服务
2.根据网关下载对应SDK
3.申请访问的key和密钥
4.通过Springboot指定配置,将SDk封装成一个起步依赖(FileStorageService)
5.在项目中直接引用starter依赖
10.素材上传流程
1.前端点击上传上传,传入图片
2.后台使用MultipartFile接受参数
3.判断用户是否登录
4.判断上传文件是否正确,如格式是否正确
5.通过调用阿里云OSS接口上传文件
6.将信息保存到素材库
11.自动AI实名认证流程
1通过用友云调用公安部接口 ,校验身份信息的真实性
(1)基于身份证OCR扫描接口
1)识别身份证(正面照、背面照)
2)识别出用户(姓名、身份证号、身份有效期(判断是否过期))
(2)调用身份证二要素接口,校验身份证和姓名是否真实
(3)校验活体检测接口,判断前端采集的用户活体图片是否为真实活人>= 85 分
(4)对比人证核验接口,用户活体照片和身份证正面照片,如果相似度 >= 85分以上判断为同一个人
2.2.如果失败,审核结束
