etcdmain.Main

etcd是一个高可用的分布式的键值数据库,基于github开源,提供配置共享和服务发现的集群服务。通常我们一般用来存储数据的链接,缓存配置等的自动发现和更新。
这一系列就是通过对etcd的源码的解读,去弄懂商用的raft以及grpc等的使用和设计,同时也会介绍一下,其所使用的的一些开源的库的精彩设计。

首先我们从etcd的main方法开始,

func main() {
    etcdmain.Main()
}

很简单,进入到etcdmain.Main之后,

func Main() {
    checkSupportArch()//检查系统是否支持

    if len(os.Args) > 1 {//获取入参,
        cmd := os.Args[1]//获取启动命令
        if covArgs := os.Getenv("ETCDCOV_ARGS"); len(covArgs) > 0 {
            args := strings.Split(os.Getenv("ETCDCOV_ARGS"), "\xe7\xcd")[1:]
            rootCmd.SetArgs(args)
            cmd = "grpc-proxy"
        }
    switch cmd {//根据命令启用程序
        case "gateway", "grpc-proxy":
            if err := rootCmd.Execute(); err != nil {
                fmt.Fprint(os.Stderr, err)
                os.Exit(1)
            }
            return
        }
    }

    startEtcdOrProxyV2()
}

上面仔细去看,是根据命令行输入的第一个参数去启动不同的代码逻辑,我们来查看一下etcd命令的使用帮助:

$ ./etcd -help
Usage:

  etcd [flags]
    Start an etcd server.

  etcd --version //查看版本
    Show the version of etcd.

  etcd -h | --help //获取帮助
    Show the help information about etcd.

  etcd --config-file //设置配置文件
    Path to the server configuration file.

  etcd gateway //启动 L4 TCP网关代理
    Run the stateless pass-through etcd TCP connection forwarding proxy.

  etcd grpc-proxy //L7 grpc 代理
    Run the stateless etcd v3 gRPC L7 reverse proxy.

........

注意看上面的最后两个说明:

  • gateway 无状态的tcp转发服务
  • grpc-proxy 无状态grpc服务

可以从代码逻辑看到,可以有3个启动命令服务,

 ./etcd //启动etcd服务
 ./etcd gateway start //启动tcp网关代理
 ./etcd grpc-proxy start //启动grpc网关代理

我们主要也是从这三个命令去贯穿整个etcd的源码去介绍。

猜你喜欢

转载自www.cnblogs.com/songjingsong/p/9227547.html