如何利用一个数据库中间件扩展MySQL集群

Python015

如何利用一个数据库中间件扩展MySQL集群,第1张

安装Go语言环境 。

git clone https //github com/flike/kingshard.git src/github.com/flike/kingshard

cd src/github.com/flike/kingshard

source ./dev.sh

make

设置配置文件

运行kingshard。./bin/kingshard -config=etc/ks.yaml

之前写过了Go语言gorm框架MySQL实践,其中对gorm框架在操作MySQL的各种基础实践,下面分享一下如何使用gorm框架对MySQL直接进行性能测试的简单实践。

这里我使用了一个原始的Go语言版本的 FunTester 测试框架,现在只有一个基本的方法,实在是因为Go语言特性太强了。框架设计的主要思路之一就是利用Go语言的闭包和方法参数特性,将一个 func() 当做性能测试的主题,通过不断运行这个 func() 来实现性能测试。当然还有另外一个思路就是运行一个多线程任务类,类似 Java 版本的 com.funtester.base.constaint.ThreadBase 抽象类,这样可以设置一些类的属性,绑定一些测试资源,适配更多的测试场景。

下面演示select的性能测试,这里我用了随机ID查询的场景。

这里我使用从35开始递增的ID进行删除。

这里使用了select的用例部分,随机ID,然后更新name字段,随机10个长度的字符串。

这里用到了 FunTester 字段都是随机生成。

到这里可以看出,性能测试框架用到的都是gorm框架的基础API使用,这里MySQL连接池的管理工作完全交给了gorm框架完成,看资料说非常牛逼,我们只需要设置几个参数。这个使用体现很像 HttpClient 设置 HTTP 连接池类似,这里我们也可以看出这些优秀的框架使用起来都是非常简单的。

PS:关于gorm的基础使用的请参考上一期的文章Go语言gorm框架MySQL实践。

读取配置文件并启动,在配置文件中设置的监听端口监听客户端请求。

收到客户端连接请求后,启动一个goroutine单独处理该请求。

首选进行登录验证,验证过程完全兼容MySQL认证协议,由于用户名和密码在配置文件中已经设置好,所以可以利用该信息验证连接请求是否合法。 

当用户名和密码都正确时,转入下面的步骤,否则返回出错信息给客户端。

认证通过后,客户端发送SQL语句。

kingshard对客户端发送过来的SQL语句,进行词法和语义分析,识别出SQL的类型和生成SQL的路由计划。如果有必要还会改写SQL,然后转发到相应的DB。也有可能不做词法和语义分析直接转发到相应的后端DB。如果转发SQL是分表且跨多个DB,则每个DB对应启动一个goroutine发送SQL和接收该DB返回的结果。

接收并合并结果,然后转发给客户端。