5 月 12 日,DBLE 公开课系列的最后一课《DBLE 3.0 规划揭秘与社区问题答疑》,我们以直播的形式呈现给了大家,终于为公开课系列画上圆满的句号。

DBLE 开源项目负责人阎虎青(蓝寅)老师,主要讲了 DBLE 3.0的规划,以及大家对 DBLE 的疑问。除了提前收集的问题,我们还在直播课程发布的同时,收集大家的疑问一起回答,由于直播时间有限,没来得及全部回答

所以本片总结共分为两块内容:

课件资料

课后答疑

本文中,我们会将本次直播课程的 PPT 和视频上传,分享给大家,需要可以自取!同时,课后虎青老师整理了所有大家提交问题的答案,也会在下面贴给大家!

PPT 课件、视频 以及 整理的问题&答案都往下看 ↓↓↓

关于 DBLE

嘻嘻,首先还是常规介绍下 DBLE,让新来的小伙伴也可以了解下!

DBLE 作为企业级开源分布式中间件,江湖人送外号“MyCat Plus”;其简单稳定,持续维护,良好的社区环境和广大的群众基础使 DBLE 得到了社区的大力支持。 

作为一个高性能、高可靠性,低成本,可弹性扩展的开源分布式数据库中间件,DBLE 具有读写分离,分库分表,故障自动切换,原生 MySQL 协议支持,跨平台等特性,可灵活构建不同规模的数据库集群,通过将业务数据分片到不同的数据库存储节点中,充分利用各节点的计算资源, 极大地提高了数据库的性能。 

课件资料

PPT 获取方式:

百度云链接:

https://pan.baidu.com/s/1A4EXQ3ep691ScxcWQXzCHA

提取码:8hbo

扫码或复制链接,获取 PPT

视频获取方式:

1)阅读原文,直接观看

2)复制链接:
https://v.youku.com/v_show/id_XNDY3MjQ2ODg2MA==.html

课程大纲:

DBLE 3.0 规划

1. 更标准的连接池

2. 功能更强的读写分离

3. 更灵活易用的管理端命令

4. 可以定制的防火墙

5. 更合理的配置文件

6. 分布式事务接口

7. 代码模块 trace

8. 拥抱 MySQL 8.0

DBLE 问题答疑

1. MySQL 高可用怎么做? 

2. DBLE 集群有哪些地方需要注意?

3. DBLE 的配套商业版做了什么?

课后答疑

问题 1:能讲讲 dble 线上的实际使用案例和适用场景吗?
案例:“我有一些美妙的故事,可惜这里空白的地方太小,写不下。”一个费马式的微笑,欢迎来面基。  

适用场景:数据总量大,每个具体的业务只涉及到小部分数据,典型场景就是 OLTP。

问题 2:MySQL 本身的 ID 自增对 DBLE 全局唯一有影响么?在 ZK 的配置上有要求么?

1. MySQL 本身的 ID 自增 和 DBLE 全局唯一序列是不同层级的问题,之间没有什么联系。

2. zk 的配置参见官方文档,有几种方式需要显示配置。

问题 3:dble 3.0 版本分布式事务有哪些改进?后续会支持开源框架?seata, atomikos,如果用这些框架,后端连接退化成 jdbc,是否有性能损耗?

1. 提供分布式事务接口。

2. 分布式事务本身带来的性能损耗是无法避免的。

3. 我们期望的分布式接口是和分布式事务框架,让它来告诉 dble 应该如何工作,而不是代替 dble 执行,所以后端退化为JDBC连接这件事不一定成立。我们会先和自家兄弟项目 分布式事务框架 TXLE 结合。

问题 4:有考虑分片字段,columns 拆分列支持多个?

暂不考虑,建议多个字段合并为一个冗余列,然后自定义拆分算法对冗余列做拆分。

问题 5:dble 对于物理备份有没有好的方案?用 pasue 暂停外部流量这样不是降低了可用性嘛?

答:参见 DBLE 公开课 – 第十一课

问题 6:如果将后端链接方式改为 jdbc,是否会增加对 oracle,pg,db2 的支持?增加多维路由,两次路由?间接路由,很多场景是没有分片字段,可否通过另一个字段映射分片字段?

1. 不支持异构数据库。

2. 二次路由暂不考虑,建议多个字段合并为一个冗余列,然后自定义拆分算法对冗余列做拆分。

问题 7:代码可否重构,简单易读,现在 DBLE 代码太复杂了。例如:元数据很绕;reload 很绕;工程结构太绕,能不能拆为多个子工程,不同模块独立管理,开源扩展更简单。

1. 有些是为了性能做出的牺牲,这部分可读性很难提高。

2. 有些工程结构方面的问题会逐步改善,但进度不会太快。

问题 8:如何避免分片后 SQL 不带分片字段查询?

未来规划自定义防火墙,参见 PPT。

问题 9:请问 DBLE 是怎么停止流量的?

参考对应章节文档:

https://github.com/actiontech/dble-docs-cn/blob/master/2.Function/2.1_manager_cmd/2.1.14_pause_resume.md

问题组 10:

1. 分布式事务的支持情况,比如 seata,saga,lcn?

2. 是否支持 DBLE 节点的集群和高可用(非 LVS/Keepalive 方式)?

3. 有没有规划做流控、熔断、降级等数据库治理的功能?

4. 有没有规划做存储的多副本,Raft 支持等分布式一致性的特性?

5. 现在跟 MySQL 的语法兼容性百分比是多少,用的是什么测试集,case 多少?

6. 有没有考虑支持 K8S/Istio 等 CNCF 的 mesh 层面的功能?

7. 是否会朝着 TiDB,CockroachDB 方向发展成分布式数据库?

8. 跟 MyCAT、Sharding-Proxy 有什么差异性和优势?

9. 商业版本跟开源版本有什么区别,有什么其他服务?

回答:
1. 1 / 2 参见别的问题回答

3. 数据库治理可以专门做一套解决方案了,dble 跟着调度就行了

4. dble 的存储是 MySQL,不自己定义存储副本

5. 95%… 好吧,百分比有啥意义

6. 暂没考虑,不排除以后会有

7. 应该不会,如果做了你敢上生产吗?

8. 欢迎有空来面基讨论

9. PPT 中已经讨论过了

问题 11:虽然听着 DBLE 还有些问题,但是不是比 MyCAT 要好?对于读写分离支持不是很好,那么是不是需要再上一个中间件了,类似 proxysql?

1. 比较问题大家用数据说话吧。  

2. 不建议再上一个中间件,架构上的复杂度会增加,dble 直接支持读写分离的功能很快就会推出。

问题 12:如果主从切换,dble 的读写分离的 ip 如何做到切换?

这也是一个很长的故事,高可用联动我们在 6 月份还有一次直播专门讨论。

问题 13:DBLE 3.0 及后续 RoadMap 开发自动化部署分片的?比如我在 64 台服务器,每台配置两个实例,每个实例跑 4 个 DB,组成 512 个分片 hash 分片,配置起来会比较麻烦。

1. 商业版有可视化配置会解决这个问题。

2. 第一次就手动配置吧,毕竟配置应该更新频率不是太高

问题 14:DBLE 3.0 对 XA 分布式事务支持度如何?

提供分布式事务接口。

问题 15:DBLE 的高可用使用什么实现的,raft 么,还是使用 keepalive 这类工具?

dble 本身基本无状态,所以无状态高可用工具都可以用。

问题 16:DBLE 3.0 对代码模块做了 trace,跟没有做 trace 的性能做过对比,性能差异多大?

暂时还没有数据,未来退出的时候会给出结果。

问题 17:dble 目前支持的驱动是 5.1.35,能否提升?

JDBC5.1.x 版本的都支持,8.0 版本在规划中。

问题 18:dble 后续是否考虑支持库内分表。类比 drds, shardingjdbc 都有这样的功能。

不支持,可以用单实例多库来实现。

问题 19:时间戳相关自增 id 配置为什么只能配置 0-31?

因为设计的时候认为一个集群的 MySQL 实例很难超过 32,所以只留了 5 位二进制数用于唯一标识。

好了,以上就是答疑环节中提问页面的全部问题。由于时间问题,还有个别在讨论区的问题没有回答。您可以直接进入 DBLE 的 QQ 群(669663113)进行提问,很快就会有社区成员进行解答(提问题不用发红包哦~)。