DRDS简介
分布式关系型数据库服务(Distributed Relational Database Service,简称 DRDS)是阿里巴巴致力于解决单机数据库服务瓶颈问题而自主研发推出的分布式数据库产品。DRDS 高度兼容 MySQL 协议和语法,支持自动化水平拆分、在线平滑扩缩容、弹性扩展、透明读写分离,具备数据库全生命周期运维管控能力。DRDS 前身为淘宝 TDDL,是近千核心应用首选组件。
DRDS的架构图:
这里我们不对DRDS做详细介绍,毕竟我们没有阿里云提供商!我们只对Sharding-JDBC、Mycat做分析区别!DRDS简单介绍。
Mycat和Sharding-jdbc的区别
1)mycat是一个中间件的第三方应用,sharding-jdbc是一个jar包
2)使用mycat时不需要改代码,而使用sharding-jdbc时需要修改代码
Mycat(proxy中间件层):
Sharding-jdbc(TDDL为代表的应用层):
可以看出sharding-jdbc作为一个组件集成在应用内,而mycat则作为一个独立的应用需要单独部署,drds则是阿里云的一个独立产品,不过需要结合rds一起使用。从架构上看sharding-jdbc更符合分布式架构的设计,直连数据库,没有中间应用,理论性能是最高的(实际性能需要结合具体的代码实现,理论性能可以理解为上限,通过不断优化代码实现,逐渐接近理论性能)。同时缺点也很明显,由于作为组件存在,需要集成在应用内,意味着作为使用方,必须要集成到代码里,使得开发成本相对较高;另一方面,由于需要集成在应用内,使得需要针对不同语言(java、C、PHP……)有不同的实现(事实上sharding-jdbc目前只支持java),这样组件本身的维护成本也会很高。最终将应用场景限定在由java开发的应用这一种场景下。
sharding-jdbc后续发展为Sharding-Sphere,包含sharding-jdbc、Sharding-Proxy、Sharding-Sidecar
Sharding-JDBC | Sharding-Proxy | Sharding-Sidecar | |
---|---|---|---|
Database | Any | MySQL/PostgreSQL | MySQL/PostgreSQL |
Connections Count Cost | High | Low | High |
Supported Languages | Java Only | Any | Any |
Performance | Low loss | Relatively High loss | Low loss |
Decentralization | Yes | No | No |
Static Entry | No | Yes | No |
来源:https://github.com/sharding-sphere/sharding-sphere
mycat是支持SQL92标准,遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。作为对比可以参考上表中的Sharding-Proxy,需要单独部署,由于遵守Mysql原生协议,应用时不需要特殊处理,和使用MySQL是一样的,所以应用场景不受限制;但是mycat不支持二维路由,仅支持单库多表或多库单表,同时由于自定义连接池,这样就会存在mycat自身维护一个连接池,MySQL也有一个连接池,任何一个连接池上限都会成为性能的瓶颈,而mycat的连接池设计也略显粗暴,当请求链接数大于设置连接池上限时直接抛出异常,因此在配置mycat连接池的大小是,需要结合场景做合理设置。总的来说,mycat以逻辑表的形式屏蔽掉应用处理分库分表的复杂逻辑,遵守Mysql原生协议,跨语言,跨平台,有着更为通用的应用场景。
DRDS 兼容 MySQL 协议和语法,支持分库分表、平滑扩容、服务升降配、透明读写分离和分布式事务等特性,具备分布式数据库全生命周期的运维管控能力。可以看成mycat的商业化产品,也就是mycat所有的优点它都有,而且作为一个商业化产品使用上更为简单透明,功能也更为丰富;如果不差钱而且正准备对数据做重构,那么drds是一个不错的选择,之所以说准备做数据重构时考虑用drds,是因为drds不是一个简单的做sharding路由,即使原来使用的是rds,也无法通过drds做路由,唯一的办法新建drds实例,定义路由规则(drds支持二维路由),导入历史数据,然后就可以开心的使用drds了。
然后做个简单总结
Sharding-JDBC | mycat | drds | |
---|---|---|---|
性能 | 高 | 中 | 高 |
应用场景限制 | java应用 | 无 | 无 |
是否支持自定义sharding路由 | 是 | 是 | 是 |
最大支持sharding路由维度 | 2 | 1 | 2 |
分布式事务 | 开发中(4.0.0支持) | 支持弱xa、支持XA分布式事务(1.6.5) | 支持以下分布式事务策略:FREE、2PC、XA、FLEXIBLE |
限制 | 不支持子语句,不支持UNION 和 UNION ALL,不支持批量插入,不支持DISTINCT聚合 | 详见《MYCAT权威指南》——5.6 Mycat 目前存在的限制 | 未明确说明 |
是否开源 | 是 | 是 | 否 |
至此我们总结了这三个的区别!下一篇我们开始读写分离demo例子!
参考文献:
https://www.cnblogs.com/leeSmall/p/9539370.html
https://blog.csdn.net/jornada_/article/details/82947677
相关文章
- Sharding-JDBC系列教程
- Sharding-JDBC 垂直拆分(不同的表在不同的库中)
- Sharding-JDBC不分库,只分表例子
- Sharding-JDBC读写分离案例
- Sharding-JDBC简介