kingshard 架构设计和功能实现

2015-08-18 08:47:15 +08:00
 flikecn

kingshard 开源有一段时间了,有些热心的用户发邮件来咨询 kingshard 的设计和实现问题。于是周末抽空写了一篇介绍 kingshard 架构和功能实现的文章。由于文章有点长,感兴趣的请移步:
https://github.com/flike/kingshard/blob/master/doc/KingDoc/architecture_of_kingshard_CN.md

4756 次点击
所在节点    MySQL
21 条回复
flikecn
2015-08-18 08:58:02 +08:00
kingshard 是一个由 Go 开发高性能 MySQL Proxy 项目, kingshard 在满足基本的读写分离的功能上,致力于简化 MySQL 分库分表操作;能够让 DBA 通过 kingshard 轻松平滑地实现 MySQL 数据库扩容。

主要功能:

1. 读写分离。
2. 跨节点分表。
3. 客户端 IP 访问控制。
4. 平滑上线 DB 或下线 DB ,前端应用无感知。
5. 支持多个 slave , slave 之间通过权值进行负载均衡。
6. 支持强制读主库。
7. 支持将 sql 发送到特定的 node 。
8. 支持在单个 node 上执行事务,不支持跨多个 node 执行事务。
hhkbp2
2015-08-18 09:06:01 +08:00
@flikecn 请问对于某一张子表的 failover 是如何实现的?
flikecn
2015-08-18 09:19:19 +08:00
@hhkbp2 是不是子表对应的 node fail 了?那样的话, sql 语句不会再发送到该节点。
hhkbp2
2015-08-18 09:27:10 +08:00
@flikecn 那样对应分表的数据如何设置备份 node 以提供高可用服务?
flikecn
2015-08-18 09:39:59 +08:00
@hhkbp2 目前后端 DB 的 failover 还没涉及到,只提供了接口。
wudikua
2015-08-18 11:53:13 +08:00
开个专题给讲讲词法解析这部分吧
flikecn
2015-08-18 14:09:11 +08:00
@wudikua 将有关 kingshard 的词法解析倒是可以的。
starlion
2015-08-18 17:06:50 +08:00
跨节点查询怎么实现的?
wudikua
2015-08-18 17:51:32 +08:00
@flikecn 可以啊,我觉得这种东西最麻烦的就是处理各种复杂的 SQL ,比如什么子查询, join 乱七八杂的。
sujin190
2015-08-18 17:55:47 +08:00
mysql workbench 连不上去, set 指令解析有问题啊
aszxqw
2015-08-18 17:57:08 +08:00
@flikecn 恩,讲讲词法解析吧。
invite
2015-08-19 08:24:41 +08:00
Proxy 本身的 HA 如何实现?备份还是双活?切换后,状态是否保存?
flikecn
2015-08-19 08:56:03 +08:00
@starlion 每个节点单独启一个 goroutine 发一个 SQL ,然后收结果。
flikecn
2015-08-19 08:56:13 +08:00
@sujin190 我确认一下。
flikecn
2015-08-19 08:56:47 +08:00
@invite 提供了 HA 的接口。切换还需要自己切。
flikecn
2015-08-19 09:24:47 +08:00
@sujin190 这个问题确认了,确实有问题。是 mysql workbench 发了一条:“ SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ”。我现在在考虑要不要支持这么多客户端,因为这些客户端会发一些稀奇古怪的 SQL 语句。
invite
2015-08-19 09:45:22 +08:00
@flikecn 举个例子看看。

PS :如果需要自己切换,没有自动接管机制,对用户来说肯定是一个问题。个人觉得不应该把切换交给开发人员去做。
sujin190
2015-08-19 10:04:52 +08:00
@flikecn 其实可以写条通用规则,语法解析都能过,但没效果,这样客户端也能连上
sujin190
2015-08-19 10:06:54 +08:00
@flikecn 发现 sort 虽然能用但不是全局排序啊,而且似乎不能在 where 语句中不带分表的 key 做全部表查询啊
flikecn
2015-08-19 10:18:31 +08:00
@sujin190 是的。为了效率考虑,必须带 key 查询。 order by group by 后续会加上。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/213929

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX