MySQL设计与实践学习笔记(三)

一、企业级数据库Sharding Sphere分库分表应用设计实战

        数据扩展带来的问题

                请求路由

                        分表规则

                        写入路由

                        查询路由

                                分页查询怎么解决:混合模式

                                1、Sharding Sphere

                                        Sharding JDBC :客户端集成 线上业务使用

                                        Sharding-Proxy:代理模式    数据维护使用

对比项

Sharding JDBC

 Sharding-Proxy

数据库

任意

单一

异构语言

仅JAVA

任意

连接数

性能

损耗低

损耗高

去中心化

静态入口

                        分布式事务:业务规避

二、企业级分布式事务阿里巴巴Seata应用设计实战

                分布式事务

                        强一致

                                一致性协议

                                        两阶段提交2PC   事务协调者->事务参与者A->事务参与者B 事务协调者询问确认提交 

                                        三阶段提交3PC    事务协调者->事务参与者A->事务参与者B 事务协调者询问是否提交,确认完再通知提交 

                                落地方案

                                        XA规范(两阶段提交)

                                                资源管理器-事务参与者

                                                事务管理器-事务协调者

                                存在问题(XA10倍性能衰减)

                                        写入加锁    存在异常锁数据

                                        记录事务执行状态 不支持异地恢复

                        柔性事务(最终一致性)

                                TCC(Try-Confirm-Cancel)框架实现

                                        尝试执行业务,预留资源

                                        确认执行业务,使用Try阶段资源

                                        取消执行业务,释放Try阶段预留的资源

                                SAGA模型

                                        把一个分布式事务拆分为多个本地事务

                                        本地事务都有相应的执行模块和补偿模块(需要补偿逻辑并且补偿接口要有幂等)

                                        事务管理器负责在事务失败时调度执行补偿逻辑

                                        

                        事务消息(分布式事务的弱化)MQ消息 RocketMQ 2PC

                                简化了分布式事务模型

                                对业务更友好

                    XA>TCC、SAGA>事务消息

                    

                Seata分布式事务流程

                        TM向TC申请开启一个全局事务,TC创建全局事务后返回全局唯一的XID,XID会在全局事务的上下文中传播

                        RM向TX注册分支事务,该分支事务归属拥有相同XID的全局事务

                        TM向TX发起全局提交或回滚

                        TC调度XID下的分支事务完成提交或者回滚

                Seata-AT

                        介绍:

                                一种无侵入的分布式事务解决方案,2PC的广义实现

                                源自阿里云GTS AT模式的开源版本

                        核心价值

                                低成本:编程模型不变,轻依赖不需要为分布式事务场景做特定设计

                                高性能:一阶段提交,不阻塞;连接释放,保证整个系统的吞吐

                                高可用:极端的异常情况下,可以暂时跳过异常事务,保证系统可用

                        核心设计

                                一阶段

                                        拦截“业务SQL”

                                        生成前镜像:用于异常回滚

                                        生成后镜像

                                二阶段

                                        TX向所有RM发起提交/回滚

                        执行流程

                                拦截“业务SQL”

                                        解析SQL语义

                                        提取表元数据

                                        保存原镜像

                                        执行业务SQL

                                        保存新镜像

                                利用本地事务保证ACID

                                提交:清快照数据

                                回滚:

                                        检查脏写:新镜像VS当前数据库数据

                                        还原数据:根据前后镜像,生成逆向SQL

                                        删除中间数据:删除前后镜像

                        前后镜像:操作前后 查询数据作为前后镜像

                        商品库存操作:

                               用户下单减库存:每个下单都是独立的分布式事务,不同的XID

                               商户增加库存:不是分布式事务

                        隔离性

                            写隔离:

                                    分支事务提交前拿到全局锁、

                                    拿全局锁超时,回滚本地事务,释放本地锁

                            读隔离(数据库读已提交)

                                    默认全局隔离级别是读未提交

                                            如何做到读已提交:SELECT FOR UPDATE实现读已提交

                                            如何实现可重复读:前镜像能否实现MVCC

            Sharding Sphere 与 Seata集成  

                        思考:

                                分支事务已经提交,如何回滚 undo log 回滚前镜像

                                防止其他数据对数据的修改 行锁->分布式锁

                                        其他分布式事务的修改

                                        非分布式事务的修改

三、企业级MySQL数据库高可用设计与实战

            数据库冗余部署

                    一主一从或多从:增加主库同步压力

                    级联部署:降低了住的压力,但是串联同步方式可靠性低

                            尽量保证数据不丢失

                    延时库部署案例

                            一主多从抗线上流量

                            级联部署延迟从做备份

不要执行无条件 DELETE UPDATE

            数据库高可用方案

                    提供两个VIP

                            VIP1指向主库,VIP2指向从库

                    主库发故障

                            VIP1和VIP2指向从库

                    故障节点恢复

                            VIP2指向新的从库

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thunder_C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值