Fabric源码流程分析之Orderer篇

导言:
  本文使用fabric1.1版本,此时有小朋友会问了,fabric都出1.4.2了你怎么还在看1.1呢!首先fabric自1.0以后大的架构基本没有变化,小版本升级只是功能性上更加丰满了,当然最重要的是有一本对源码解读超详细的书《Hyperledger Fabric技术内幕:架构设计与实现原理》使用的就是1.1版本,不懂的地方看看这本书就会茅塞顿开,强烈推荐嗷!,如果阅读源码有障碍,可阅读本人使用的版本,其中有大量注释,不过因为是随手笔记有些许潦草 https://github.com/mikesen1994/FabricSourceAnalyze
  在直接阅读源代码前,如果您只运行过官方docker-compose的一键部署,那么强烈建议手动搭建一套Fabric网络,这样会更加了解Fabric的运行细节,对阅读源码很有帮助,推荐博客 https://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2018/04/26/hyperledger-fabric-deploy.html
   本文不会细讲源码中每个函数每个方法,只是讲解orderer服务运行的大体流程以及官方使用了哪些开源工具

参考书籍:《Hyperledger Fabric技术内幕:架构设计与实现原理》
     《深度探索区块链 Hyperledger技术与应用》


orderer模块入口:hyperledger\fabric\orderer\common\server\main.go

一.首先通过kingpin技术(命令行解析工具)接收命令行命令

    比如在orderer文件存在的目录命令行直接敲:
   orderer start       //启动orderer模块
   orderer version     //打印当前版本信息
   orderer benchmark    //测试运行orderer
   orderer help      //显示帮助信息

    fullCmd := kingpin.MustParse(app.Parse(os.Args[1:]))
    if fullCmd == version.FullCommand() {
      //如果接收到version命令直接打印当前orderer版本
       fmt.Println(metadata.GetVersionInfo())
       return
    }

二.然后通过viper技术(管理配置信息的工具)加载配置信息,并将当前目录下的的orderer.yaml文件转化为具体配置信息的结构体
    conf, err := config.Load()   ——>  config := viper.New())   ——>  cf.InitViper(config, configName)

    下图为本人实操时orderer的配置信息,orderer启动时实际转化的就是此文件
在这里插入图片描述
在这里插入图片描述

    下图为转化后的结构体,可以看到结构体与orderer.yaml的配置信息很匹配

    目录:hyperledger\fabric\orderer\common\localconfig\config.go

    type TopLevel struct {
   
       General    General
       FileLedger FileLedger
       RAMLedger  RAMLedger
       Kafka      Kafka
       Debug      Debug
    }

三.通过配置信息初始化日志等级,fabric的日志管理主要使用了第三方包go-logging(主要特点是可以根据设置的日志等级来显示不同的颜色,以及可以直接定位到产生日志的代码位置),部分使用了go语言标准库中的log。在此基础上fabric自己封装出来了flogging,默认的日志等级是debug
    initializeLoggingLevel(conf)

四.通过配置信息加载并初始化Msp文件
    initializeLocalMsp(conf) ——> mspmgmt.LoadLocalMsp(conf.General.LocalMSPDir, conf.General.BCCSP, conf.General.LocalMSPID)

    主要用到的就是orderer.yaml配置文件里的以下三个信息:
在这里插入图片描述


五.将命令与配置信息传递给Start函数
      Start(fullCmd, conf)

六.创建本地MSP签名者实例,实际就是一个空的mspSigner结构体指针
      signer := localmsp.NewSigner()

七.通过TLS相关的配置信息,初始化TLS认证需要的的安全服务器配置项
      serverConfig := initializeServerConfig(conf)

    获得的serverConfig由两种结构体组成SecureOptions与KeepaliveOptions
    SecureOptions保存了用于tls验证的公钥私钥,服务器CA证书,客户端CA证书等。
    KeepaliveOptions则是用于设置grpc双方通讯的配置的信息包括客户端等待响应时间,服务端等待响应时间,客户端通讯响应间隔等信息


八.初始化grpc服务,传入配置文件与TLS配置信息,通过TLS配置信息来决定是否启用tls验证
     grpcServer := initializeGrpcServer(conf, serverConfig)

九.使用serverConfig的客户端CA证书列表构造CA证书支持组件对象,在注册多通道管理器对象时需要用到
    caSupport := &comm.CASupport{
      
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值