Golang 源码导读 Vitess-vttablet 模块(一): 主程序解析

栏目: Go · 发布时间: 5年前

内容简介:官方给出的 vttablet 定义如这个系列的文章,主要面向

vitess 是 facebook 开源的一款 mysql 数据库中间件,在业界有广泛应用,并且 github 上的库也在持续更新。这里,我选择其中最具代表性的 vttablet 模块,针对 go 语言开发的源码,对其具体实现进行分析。

官方给出的 vttablet 定义如 链接 ,简而言之,一个 vttablet 往下对接一个 MySQL 实例,往上对接 vitess 的其余中间件模块,是一个 MySQL 数据库的必经出入口。深入了解 vttablet 模块的源码,必将让我们对 MySQL 有进一步的了解。

这个系列的文章,主要面向 go语言MySQL 数据库 有一定基础的朋友,会讲解得尽量详尽。当然,如果只是对 MySQL 感兴趣的朋友,也能收益不少。

解析主程序

1. 命令行入参

  • MySQL 相关
    db_socket
    db_host
    db_port
    db_ssl_*
    
  • userKey 相关
    app
    dba
    repl
    
  • tabletenv 相关: 用于数据库查询、事务提交等配置
  • mycnf 相关: 用于解析 mycnf 文件

解析入参时,会有一个打印 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. 参数校验

  • tabletenv 中的参数校验提供默认值 DefaultQsConfig
  • 针对 实际运行dry run(演练) 两种场景
  • 校验内容分两类:
    • 先校验配置是否冲突,例如对 transaction 的限制分为四种,必须选择其一
    • 根据分类,再检验入参的数值是否满足要求

Tips

写程序时,对参数校验的逻辑要清晰,一方面是代码的逻辑,另一方面是参数的分类。

3. package 的初始化

  • tabletenv 的初始化
    • 根据是否有 url 的参数输入,会初始化 查询日志事务日志 的 HTTP 服务,用于返回对应的结果
    • 返回结果支持 text 与 json 这两种格式
  • servenv 的初始化
    • 当前 Linux 用户检查: vitess 认为用 root 用户运行程序毫无意义,必须为非 root 用户(在权限控制这块很有意义)
  • runtime 官方库中的参数
    • runtime.MemProfileRate 默认为 512kb,即 512*1024。这是个参数一般是在 pprof 工具分析性能时,认为采样不够细致,可以调低这个参数,但是会导致性能下降。
    • runtime.SetMutexProfileFraction(rate int) 默认为0,即不开启。开启后,可以在 pprof 上查询到互斥锁的持有者。
  • Gauge 参数设置
    Getrlimit
    
  • Hook 中注册的函数运行
    init()
    
  • tabletPath 从命令行传入的 tablet 别名,格式为 <cell>-<uid> ,cell 和MySQL的拓扑结构相关,uuid 必须为整数
  • 连接参数检查 如果无连接参数,那么就加载本地的 my.cnf 文件(在第 1 步中加载)
  • 注册ACL控制
  1. 服务初始化
  • 查询服务初始化
    • 新建拓扑服务 目前只支持 zookeeper,etcd和consul三种
    • 注册函数 注册函数到 run 和close 中
  • Mysqld 初始化 包括 dba 和 app 的连接池初始化
  • action agent 初始化
    • 将传入的多项服务进行初始化
    • 所有产生的后台服务共用一个 context
  1. 程序运行

    运行注册在 hook 里的函数,调用 servenv 包,运行程序


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Hacker's Delight

Hacker's Delight

Henry S. Warren Jr. / Addison-Wesley / 2002-7-27 / USD 59.99

A collection useful programming advice the author has collected over the years; small algorithms that make the programmer's task easier. * At long last, proven short-cuts to mastering difficult aspec......一起来看看 《Hacker's Delight》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具