节点启动流程

启动流程

  • Fabric使用cobra的命令行工具库,viper作为参数配置库。
    • 入口peer/main.go
      • 设置加载的环境变量前置。
      • 初始化子命令,节点启动命令位于子命令node.Cmd()
    • 节点命令peer/node/node.go
      • 节点启动之前执行common.InitCmd
      • 节点启动命令peer/node/start.go:serve()
        • 检查MSP类型mgmt.GetLocalMSP().GetType()
        • Idemix零知识证明的MSP类型目前是不支持,因此非标准类型MSP直接退出。
      • 生成aclProvideraclmgmt.NewACLProvider
      • Peer操作服务newOperationsSystem,提供版本,健康检查,测试接口访问。
      • platforms相关Registry
      • lsscc.DeployedCCInfoPrivider{}
      • identityDeserializerFabtory
      • OperationsSystem.Start()
      • metricsProvider
      • membershipInfoProvider
      • 初始化ledgermgmt位于core/ledger/ledermgmt/ledger_mgmt.go:initialize()
        • 完成账本操作相关的初始化工作。
      • chaincodeDevMode
        • 链码开发模式重写配置。
      • peer.CacheConfiguration() 配置信息缓存。
      • serverConfig 加载服务端配置
      • NewPeerServer 生成用户节点通信服务。
      • NewDeliverEventsServer 生成传输区块和块事件服务
      • startChaincodeServer 启动链码服务
        • setup local chaincode install path
        • create chaincode specific tls CA
        • start the chaincode specific gRPC listening service
      • startAdminServer 启动admin操作服务默认公用peer节点端口
      • NewEndorserServer 生成背书服务
      • initGossipService 初始化流言服务
      • sccp.DeploySysCCs("", ccp) 部署系统链码
      • NewLifeCycle 初始化生命周期管理服务
      • peer.Initialize 节点初始化
      • registerDiscoveryService 注册节点发现服务
      • LoadPreResetHeight 检查节点账本是否重设
      • RegisterEndorserServer 注册背书服务
      • peerServer.Start() 节点服务启动

流程图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
graph TB
Enter(入口 - `peer/main.go` **) --> Init(加载环境变量)
Init --> NodeCMD(Init Node子命令)
NodeCMD --> PreRun(PreRun `common.InitCmd` *)
PreRun --> RunCheck(检查MSP类型)
RunCheck --> aclProvider(生成ACL控制器)
aclProvider --> platforms(平台环境-Node,Java,Go控制器)
platforms --> DeployedCCInfoPrivider(部署链码控制器)
DeployedCCInfoPrivider --> identityDeserializerFabtory(获取身份检查工厂)
identityDeserializerFabtory --> metricsProvider(指标控制器)
metricsProvider --> ledgermgmt(初始化账本)
ledgermgmt --> serverConfig(加载服务端配置)
serverConfig --> NewPeerServer(生成节点通信服务)
NewPeerServer --> NewDeliverEventsServer(生成区块分发和块事件处理服务)
NewDeliverEventsServer --> startChaincodeServer(启动容器链码服务)
startChaincodeServer --> startAdminServer(启动管理服务)
startAdminServer --> NewEndorserServer(生成背书服务)
NewEndorserServer --> initGossipService(初始化流言服务)
initGossipService --> DeploySysCCs(部署系统链码)
DeploySysCCs --> NewLifeCycle(生成链码生命周期管理)
NewLifeCycle --> peer.Initialize(节点初始化)
peer.Initialize --> registerDiscoveryService(注册节点发现服务)
registerDiscoveryService --> RegisterEndorserServer(注册背书服务)
RegisterEndorserServer --> peerServer.Start(节点启动)