1 分库分表
在传统的关系型数据库,比如MySQL,当业务量上涨之后可能会遇到如下问题时:
(1) 单个表数据量太大
(2) 单个库数据量太大
(3) 单台数据量服务器压力很大
(4) 读写速度遇到瓶颈
这种问题的解决方法无非两种:
(1)向上扩展(scale up) :不断增加硬件性能。
(2)水平扩展:直接增加机器,把数据库放到不同服务器上,在应用到数据库之间加一个proxy进行路由。
MySQL的水平扩展都是通过中间件来实现的,这是中间件的除读写分离功能之外的另一个主要功能。国内目前的中间件有很多,很大大厂都开发了自己的中间件,主要有如下几个:
(1)Cobar:阿里巴巴B2B开发的关系型分布式系统,管理将近3000个MySQL实例。后来阿里开发了tddl替代cobar。
(2)MyCAT:社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存在的一些问题,并且加入了许多新的功能在其中。
(3)Kingshard: Kingshard是前360Atlas中间件开发团队的陈菲利用业务时间用go语言开发的。
(4)Atlas: 360团队基于mysql proxy 把lua用C改写。原有版本是支持分表, 目前已经放出了分库分表版本。
(5)MaxScale:mariadb (MySQL原作者维护的一个版本)研发的,目前版本不支持分库分表。
(6)MySQL Route:MySQL 官方Oracle公司发布出来的一个中间件。
2 NewSQL 架构
关于NewSQL 数据库说明可以参考我之前的博客:
数据库的三种分类说明:SQL / NoSQL / 分布式NewSQL
https://www.cndba.cn/dave/article/4579
鉴于NewSQL数据库的先进架构,国内的几个大厂和创业公司都退出了自己的NewSQL 数据库,比如OceanBase,TDSQL,TiDB,SequoiaDB。
NewSQL 架构和上节说的分库分表的架构对比如下图:
简单的说就是:
(1) 中间件模式SQL解析、执行计划优化等在中间件与数据库中重复工作,效率相比较低;
(2) NewSQL数据库的分布式事务相比于XA进行了优化,性能更高;
(3) 新架构NewSQL数据库存储设计即为基于paxos(或Raft)协议的多副本,相比于传统数据库主从模式(半同步转异步后也存在丢数问题),在实现了真正的高可用、高可靠(RTO<30s,RPO=0);
- NewSQL 分布式数据库中的 协议( 2PC / 3PC)和 选主算法(Paxos / Raft) 说明
https://www.cndba.cn/dave/article/4580
(4) NewSQL数据库天生支持数据分片,数据的迁移、扩容都是自动化的,大大减轻了DBA的工作,同时对应用透明,无需在SQL指定分库分表键。
版权声明:本文为博主原创文章,未经博主允许不得转载。