MySQL分布式分片式分库分表读写分离高可用集群

MySQL分布式分片式分库分表读写分离高可用集群可选产品:


MariaDB Spider分库分表引擎








robert
互联网从业人员
27 人赞同了该回答

首先要感谢 戒贤 整理的中间件列表。 在过去的一段时间,这份列表中除了 vitess,Mango,Sharding-JDBC我们没有了解过之外,其他的中间件我们团队(UCloud - UDB产品 - UDDB小分队),都有一些研究。负责任地说, 这几款中间件,除了MySQL router不建议使用(代码非常简洁,实现也比mysql proxy好, 但是只能通过不同的端口写和做读的分流)外,其他几款中间件,包括没有在这份名单中的mycat, 都是比较靠谱的中间件软件,不管是用来做读写分离,还是做分库分表。

问题是现在有比使用中间件更好的解决方案,这就是运行在公有云上的,基于中间件技术 + 公有云数据库打造成的分布式数据库。 目前典型的有阿里云的DRDS/PetaData,腾讯云的DCDB FOR TDSQL, 以及UCloud最近推出的UDDB。

我们所说的更好, 首先体现在系统的管理和运维上。云上的,基于中间件的分布式数据库,相对于单纯的中间件来说, 创建/管理方便、关键指标可视化/自动化告警、复杂运维(如水平扩展中的数据迁移)自动化等功能点,都是节省 DBA 时间的利器,让 DBA 可以专注于业务存储架构和优化,而不用疲于应对日常的系统管理和运维。




XA 分布式事务的性能问题

        Mysql的XA事务分为外部XA和内部XA
        外部XA用于跨多MySQL实例的分布式事务,需要应用层作为协调者,通俗的说就是比如我们在PHP中写代码,那么PHP书写的逻辑就是协调者。应用层负责决定提交还是回滚,崩溃时的悬挂事务。MySQL数据库外部XA可以用在分布式数据库代理层,实现对MySQL数据库的分布式事务支持,例如开源的代理工具:网易的DDB,淘宝的TDDL等等。
        内部XA事务用于同一实例下跨多引擎事务,由Binlog作为协调者,比如在一个存储引擎提交时,需要将提交信息写入二进制日志,这就是一个分布式内部XA事务,只不过二进制日志的参与者是MySQL本身。Binlog作为内部XA的协调者,在binlog中出现的内部xid,在crash recover时,由binlog负责提交。(这是因为,binlog不进行prepare,只进行commit,因此在binlog中出现的内部xid,一定能够保证其在底层各存储引擎中已经完成prepare)。
        XA的性能很低。一个数据库的事务和多个数据库间的XA事务性能对比可发现,性能差10倍左右。因此要尽量避免XA事务,例如可以将数据写入本地,用高性能的消息系统分发数据。或使用数据库复制等技术。只有在这些都无法实现,且性能不是瓶颈时才应该使用XA。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值