vitess 是 facebook 开源的一款 mysql 数据库中间件,在业界有广泛应用,并且 github 上的库也在持续更新。这里,我选择其中最具代表性的 vttablet 模块,针对 go 语言开发的源码,对其具体实现进行分析。
官方给出的 vttablet 定义如 链接 ,简而言之,一个 vttablet 往下对接一个 MySQL 实例,往上对接 vitess 的其余中间件模块,是一个 MySQL 数据库的必经出入口。深入了解 vttablet 模块的源码,必将让我们对 MySQL 有进一步的了解。
这个系列的文章,主要面向 go语言 和 MySQL 数据库 有一定基础的朋友,会讲解得尽量详尽。当然,如果只是对 MySQL 感兴趣的朋友,也能收益不少。
解析主程序
1. 命令行入参
db_socket db_host db_port db_ssl_*
app dba repl
解析入参时,会有一个打印 version 的控制项,包括 git、Jenkins 等环境信息,是通过 Makefile 中的 -Ldflags 的方式传入的。感兴趣的朋友可以参考 链接
Tips
这里有个很好用的小技巧,当传入未知参数时,用于强行退出
args := flag.Args() if len(args) > 0 { flag.Usage() log.Exitf("%s doesn't take any positional arguments, got '%s'", cmd, strings.Join(args, " ")) }
2. 参数校验
DefaultQsConfig
Tips
写程序时,对参数校验的逻辑要清晰,一方面是代码的逻辑,另一方面是参数的分类。
3. package 的初始化
Getrlimit
init()
- 服务初始化
查询服务初始化Mysqld 初始化action agent 初始化
-
程序运行
运行注册在 hook 里的函数,调用 servenv 包,运行程序