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

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

内容简介:官方给出的 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 包,运行程序


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

查看所有标签

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

我知道他想看什么

我知道他想看什么

沙建军 / 中信出版社 / 2018-1 / 48.00

社交媒体迅速发展、信息快速迭代、时间碎片化;大数据、智能终端、物联网横空出世;移动支付、网红经济和传统营销失效,这些都让这个时代的媒体、内容、渠道、产品之间的边界越来越模糊,也从根本上改变了营销的逻辑,内容营销从热词变成趋势,变成营销的底层思维。未来一切都是媒体,形式也是内容。 本书作者通过对国内外36个内容营销的新近案例的故事化描述和透彻分析,提出“组织媒介化”“营销内容化”“内容情趣化”......一起来看看 《我知道他想看什么》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

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

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具