• 分库分表


    利用中间件MyCat 客户端sharding-jdbc

    优点: 

    • 解决了单库大数据,高并发的性能瓶颈
    • 拆分规则封装好,对应用端几乎透明,开发人员无需关系拆分细节
    • 提高了系统的稳定性和负载能力

    缺点:

    • 拆分规则很难抽象
    • 分片事务一致性难以解决
    • 二次扩展时,数据迁移,维护难度大,比如: 开始我们按照用户id对2求模,但是随着业务的增长,2台数据库难以支撑,还是继续拆分为4个数据库,那么这时就需要做数据的迁移了

    总结:

    世界上的万物没有完美的,有利就有弊,就像数据切分一样,无论是垂直切分,还是水平切分,它们解决了海量数据的存储和访问性能问题,但也随之而来的带来了很多新问题,它们的共同缺点有:

    • 分布式的事务问题;
    • 跨库join问题
    • 多数据源的管理问题

    针对多数据源的管理问题,主要有两种思路:

    1.客户端模式,在每个应用模块内,配置自己需要的数据源,直接访问数据库,在各个模块内完成数据的整合

    2.中间代理模式,中间代理统一管理所有的数据源,数据库层对开发人员完全透明,开发人员无需关注拆分的细节

    MyCat: 

    MyCat是一个开源的分布式数据库系统,前端的用户可以把它看成是个数据库代理,用MySql客户端和命令行工具都可以访问,而其后端则是用MySQL原生的协议与多个MySQL服务之前进行通信.MyCat的核心功能是分库分表,即将一个大表水平切分成N个小表,然后存放在后端的MySQL数据库中.

    使用场景:

    • 单纯的读写分离,此时配置最为简单,支持读写分离,蛀虫切换
    • 分库分表,对于超过1000W的表进行分片,最大支持1000亿的数据
    • 多租户应用,每个应用一个数据库,应用只连接MyCat,程序本身不需要改造;
    • 代理Hbase,分析大数据

    分布式事务解决方案:

    分布式事务解决方案:
    一:
    1.XA协议的两阶段提交
    XA是由X/Open组织提出的分布式事务的规范
    由一个事务管理器(TM)和多个资源管理器(RM)组成
    提交分为两个阶段:prepare和commit

    MySQL5.7及以上均支持XA协议
    MySQL Connector/J 5.0以上 支持XA协议
    Java系统中,数据源采用Atomikos

    2.Atomikos分布式事务(Spring)

    二:
    3.事务补偿机制
    什么是事务补偿机制?
    针对每个操作,都要注册一个与其对应的补偿(撤销)操作
    在执行失败时,调用补偿操作,撤销之前的操作

    优点: 逻辑清晰,流程简单
    缺点: 数据一致性比XA还要差,可能出错的点比较多
    TCC属于应用层的一种补偿方式,程序员需要写大量代码


    三:
    4.基于本地消息表
    采用BASE原理,保证事务最终一致
    在一致性方面,允许一段时间内的不一致,但最终会一致
    在实际的系统当中,要根据具体情况,判断是否采用

    优点: 避免了分布式事务,实现了最终一致性
    缺点: 要注意重试时幂等性操作

    四:
    基于MQ的最终一致方案
    原理.流程与本地消息表类似
    不同点: 本地消息表改为MQ
    定时任务改为MQ的消费者

    优点:
    不依赖定时任务,基于MQ更高校,更可靠
    适合与公司内的系统

    不同公司之前无法基于MQ,本地消息表更合适

  • 相关阅读:
    Go 交叉编译
    go module 基本使用
    win10中安装Linux子系统
    VsCode/Pycharm配合python env 使用
    python virtualenv 基本使用
    Django 知识点小记
    Django中一种常见的setting与账密保存/读取方式
    win安装python模块出现依赖问题的解决方法 & No module named 'MySqldb'
    MySQL数据库文件
    如何在MySQL中分配innodb_buffer_pool_size
  • 原文地址:https://www.cnblogs.com/yxgmagic/p/15113385.html
Copyright © 2020-2023  润新知