Hyperledger Fabric网络快速启动

目录

1、网络服务配置

2、关联的docker-compose-base.yaml

各Peer节点容器设置如下信息。

3、被关联的Peer-base.yaml

4、启动网络

2、完成通道的创建

2.1将节点加入应用通道

 更新锚节点

 2.为什么要创建节点并将其加入应用通道中?


1、网络服务配置

        由于要启动多个网络节点,Hyperledger Fabric采用了容器技术,所以需要一个简化的
方式来集中化管理这些节点容器。我们使用docker-compose这个工具来实现一步到位的节
点容器管理,而且只需要编写相应的配置文件即可。
        Hyperledger Fabric同样提供了docker--compose工具的示例配置文件,该配置文件在
fabric-samples/first-network目录下,文件名称为docker-compose-.cli.yaml,打开这个配置文
件可以看到如下完整内容:

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#

version: '2'

volumes:
  orderer.example.com:
  peer0.org1.example.com:
  peer1.org1.example.com:
  peer0.org2.example.com:
  peer1.org2.example.com:

networks:
  byfn:

services:

  orderer.example.com:
    extends:
      file:   base/docker-compose-base.yaml
      service: orderer.example.com
    container_name: orderer.example.com
    networks:
      - byfn

  peer0.org1.example.com:
    container_name: peer0.org1.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer0.org1.example.com
    networks:
      - byfn

  peer1.org1.example.com:
    container_name: peer1.org1.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer1.org1.example.com
    networks:
      - byfn

  peer0.org2.example.com:
    container_name: peer0.org2.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer0.org2.example.com
    networks:
      - byfn

  peer1.org2.example.com:
    container_name: peer1.org2.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer1.org2.example.com
    networks:
      - byfn

  cli:
    container_name: cli
    image: hyperledger/fabric-tools:$IMAGE_TAG
    tty: true
    stdin_open: true
    environment:
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      #- CORE_LOGGING_LEVEL=DEBUG
      - CORE_LOGGING_LEVEL=INFO
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
    volumes:
        - /var/run/:/host/var/run/
        - ./../chaincode/:/opt/gopath/src/github.com/chaincode
        - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
        - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
        - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
    depends_on:
      - orderer.example.com
      - peer0.org1.example.com
      - peer1.org1.example.com
      - peer0.org2.example.com
      - peer1.org2.example.com
    networks:
      - byfn

        由以上配置信息可以看出,该配置文件指定了网络中各个节点容器(共计6个容器,即1个Orderer、属于2个Orgs组织的4个Peer、1个CLI)的信息。仔细观察会发现,Orderer与各Peer容器都设置了container_name与networks信息;其他信息都由extends指向了base/docker--compose-base.yaml文件。
        CLI容器指定了所代表的Peer节点(CORE_PEER_ADDRESS=peero.orgl.example.
com:7051),通过volumes指定了将系统中的链码、组织结构及证书、生成的配置文件映射
到容器中指定的目录下,且通过depends_on属性指定了所依赖的相关容器。

2、关联的docker-compose-base.yaml

在docker-compose-.cli.yaml配置文件中,由extends.file指向了一个base/docker-compose-
base.yaml的配置文件,该配置文件指定了Orderer节点与Peer节点的主要配置信息。
Orderer节点容器设置如下信息。
1)environment:该部分主要关注如下核心配置信息。

  • ORDERER GENERAL GENESISFILE:指定在Orderer容器中初始区块的所在路径,由volumes中的/channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block指定主机到Docker的映射。
  • ORDERER GENERAL LOCALMSPID:指定当前Orderer容器的唯一MSPID.
  • ORDERER GENERAL LOCALMSPDIR:指定当前Orderer容器的MSP所在路径。
  • ORDERER GENERAL_TLS_ENABLED:是否开启TLS验证。
  • ORDERER GENERAL TLS PRIVATEKEY:指定私钥所在路径。
  • ORDERER GENERAL TLS CERTIFICAT:指定证书所在路径。
  • ORDERER GENERAL TLS ROOTCAS:指定受信任的CA根证书所在路径。

2)working_dir:进入容器后的默认工作目录。
3)volumes:指定系统中的初始区块配置文件、MSP、TLS目录映射到Docker容器中的指定路径下。
4)pots:指定当前节点的监听端口。

各Peer节点容器设置如下信息。


1)extends:基本信息来源于哪个文件。
2)environment:指定容器的D、监听地址及端口号、本地MSPID,大体与Orderer中的environment部分相同。
3)volumes:将系统的msp及tls目录映射到容器中的指定路径下。
4)ports:指定当前节点的监听端口。
配置文件信息如下:

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#

version: '2'

services:

  orderer.example.com:
    container_name: orderer.example.com
    image: hyperledger/fabric-orderer:$IMAGE_TAG
    environment:
      - ORDERER_GENERAL_LOGLEVEL=INFO
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
      # enabled TLS
      - ORDERER_GENERAL_TLS_ENABLED=true
      - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
      - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
      - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: orderer
    volumes:
    - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
    - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
    - orderer.example.com:/var/hyperledger/production/orderer
    ports:
      - 7050:7050

  peer0.org1.example.com:
    container_name: peer0.org1.example.com
    extends:
      file: peer-base.yaml
      service: peer-base
    environment:
      - CORE_PEER_ID=peer0.org1.example.com
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:7051
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
      - CORE_PEER_LOCALMSPID=Org1MSP
    volumes:
        - /var/run/:/host/var/run/
        - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
        - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
        - peer0.org1.example.com:/var/hyperledger/production
    ports:
      - 7051:7051
      - 7053:7053

  peer1.org1.example.com:
    container_name: peer1.org1.example.com
    extends:
      file: peer-base.yaml
      service: peer-base
    environment:
      - CORE_PEER_ID=peer1.org1.example.com
      - CORE_PEER_ADDRESS=peer1.org1.example.com:7051
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051
      - CORE_PEER_LOCALMSPID=Org1MSP
    volumes:
        - /var/run/:/host/var/run/
        - ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp
        - ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls
        - peer1.org1.example.com:/var/hyperledger/production

    ports:
      - 8051:7051
      - 8053:7053

  peer0.org2.example.com:
    container_name: peer0.org2.example.com
    extends:
      file: peer-base.yaml
      service: peer-base
    environment:
      - CORE_PEER_ID=peer0.org2.example.com
      - CORE_PEER_ADDRESS=peer0.org2.example.com:7051
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:7051
      - CORE_PEER_LOCALMSPID=Org2MSP
    volumes:
        - /var/run/:/host/var/run/
        - ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp
        - ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls
        - peer0.org2.example.com:/var/hyperledger/production
    ports:
      - 9051:7051
      - 9053:7053

  peer1.org2.example.com:
    container_name: peer1.org2.example.com
    extends:
      file: peer-base.yaml
      service: peer-base
    environment:
      - CORE_PEER_ID=peer1.org2.example.com
      - CORE_PEER_ADDRESS=peer1.org2.example.com:7051
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051
      - CORE_PEER_LOCALMSPID=Org2MSP
    volumes:
        - /var/run/:/host/var/run/
        - ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp
        - ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls
        - peer1.org2.example.com:/var/hyperledger/production
    ports:
      - 10051:7051
      - 10053:7053

3、被关联的Peer-base.yaml

        在base/docker--compose-base.yaml配置文件中,由extends.file指向了一个peer-base.
yaml的配置文件,该配置文件设置了所有Peer容器的基本的共同信息,其核心配置信息
如下。

  • CORE PEER_TLS_ENABLED:指定是否开启TLS验证。
  • CORE PEER GOSSIP_USELEADERELECTION:指定使用选举方式。
  • CORE PEER GOSSIP ORGLEADER:指定是否将当前节点设定为Leader.
  • CORE PEER TLS CERT FILE:指定TLS证书所在路径。
  • CORE_PEER TLS_KEY FILE:指定密钥所在路径。
  • CORE PEER TLS ROOTCERT FILE:指定受信任的CA根证书所在路径。

配置文件完整内容如下:

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#

version: '2'

services:
  peer-base:
    image: hyperledger/fabric-peer:$IMAGE_TAG
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      # the following setting starts chaincode containers on the same
      # bridge network as the peers
      # https://docs.docker.com/compose/networking/
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn
      - CORE_LOGGING_LEVEL=INFO
      #- CORE_LOGGING_LEVEL=DEBUG
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start

4、启动网络

        所有有关Hyperledger Fabric网络环境所需文件创建且配置完成之后(组织结构及身份证书、初始区块文件、通道交易配置文件及锚节点更新配置文件),就可以启动网络。

下面使用已安装的docker-.compose工具,通过其命令来方便地启动Hyperledger Fabric网络的所有节点:

sudo docker-compose -f docker-compose-cli.yaml up -d

sudo docker-compose -f docker-compose-cil.yaml up -d 是一个命令行指令,用于在使用Docker Compose管理容器化应用程序时启动服务。

这个命令的不同部分解释如下:

  • sudo: 这是一个Linux或Unix系统上的特权命令,用于以超级用户(root)的身份执行后续的命令。它可能需要管理员权限才能运行。
  • docker-compose: 这是一个命令行工具,用于通过一个配置文件(通常是docker-compose.yaml或类似的文件)定义和管理多个Docker容器组成的应用程序。它简化了容器编排和部署过程。
  • -f docker-compose-cil.yaml: 这是一个选项,用于指定要使用的 Docker Compose 配置文件的路径。在这个例子中,配置文件名为 docker-compose-cil.yaml
  • up: 这是一个docker-compose命令,用于启动应用程序中定义的服务。它会根据配置文件创建和启动相应的容器。
  • -d: 这是一个选项,表示在后台运行容器。即使您关闭了终端窗口,容器也会继续运行。

所以,sudo docker-compose -f docker-compose-cil.yaml up -d 命令会读取 docker-compose-cil.yaml 配置文件,并根据其中定义的服务启动相应的容器。这些容器将在后台运行,以便可以继续进行其他操作而不影响它们的运行。

 使用docker ps 命令,查看到6个节点都启动了。

2、完成通道的创建

概念:通道,是将一个大的网络划分成不同的私有“子网”,划分之后的多个子网可以称为多通道。

作用:通道提供一种通信机制,能够将Peer和Orderer连接在一起,形成一个具有保密性的通信链路(虚拟),从而实现对分布式账本数据的隔离。

要加入通道,每个节点都要有自己的通过MSP获得的身份标识。

具体步骤:

1、进入通过docker-compose-cli.yaml配置文件指定的CLI容器

执行如下Docker命令进入指定的CLI容器中(后续操作都在该CLI容器中执行):

sudo docker exec -it cli bash

  • sudo: 它是一个 Linux/Unix 系统中的命令,用于以超级用户权限运行后续的命令。如果当前用户没有足够的权限执行 Docker 相关操作,可以使用 sudo 命令来获取临时的超级用户权限。

  • docker: 这是 Docker 引擎的命令行客户端工具。它用于与 Docker 守护进程通信,并执行与容器和镜像相关的操作。

  • exec: 这是 Docker 命令行客户端的一个子命令,用于在运行中的容器中执行命令。

  • -it: 这是 docker exec 命令的选项之一,用于指定交互式终端和标准输入流(stdin)连接到容器的 TTY(终端)。

  • cli: 这是容器的名称或 ID。cli 在这里代表要执行命令的目标容器。

  • bash: 这是要在容器中执行的命令。bash 是一个常见的 Unix/Linux 命令行解释器,通过执行 bash 命令,我们可以在容器内启动一个交互式的命令行 shell。

如果命令执行成功,则命令提示符会变为如下类似内容(代表成功进人CLI容器):

其中,@符号后面的内容根据不同的设备会显示不同的内容。
2、创建应用通道

  1. 检查环境变量是否正确设置:
echo $CHANNEL_NAME

        2.设置环境变量

export CHANNEL_NAME=mychannel

注意:设置的通道名称必须与创建通道交易配置文件时指定的通道名称相同。

        3.创建通道

peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile  /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

下面是对该命令中各部分的解释:

  • peer: 这是 Hyperledger Fabric 的命令行客户端工具,用于与 Fabric 网络进行交互并执行相应操作。

  • channel create: 这是 peer 命令的子命令,用于在 Fabric 网络中创建一个新的通道。

  • -o orderer.example.com:7050: 这是指定要连接的排序服务节点(orderer)的地址和端口号。在这个例子中,使用的是 orderer.example.com 地址和 7050 端口。

  • -c $CHANNEL_NAME: 这是指定要创建的通道的名称。$CHANNEL_NAME 是一个变量,表示通道名称可以根据实际情况进行替换。

  • -f ./channel-artifacts/channel.tx: 这是指定通道配置文件的路径和文件名。channel.tx 文件包含了有关通道的配置信息,例如组织、锚节点等。

  • --tls: 这是启用 TLS(传输层安全)连接的选项。通过使用 TLS,可以保证通信的安全性。

  • --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem: 这是指定用于验证通信的 TLS CA(证书颁发机构)文件的路径和文件名。在这里,使用 /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem 文件进行验证。

2.1将节点加入应用通道

应用通道所包含组织的成员节点可以加入通道中:

peer channel join -b mychannel.block

 参数说明:

  • join —— 将当前Peer节点加入应用通道中。
  • -b —— 指定当前节点要加入/连接至哪个应用通道。

 成功后界面如下:

 更新锚节点

使用Org1的管理员身份更新锚节点配置:

peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

 使用Org2的管理员身份更新锚节点配置:

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
root@ac15c364fb7f:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

 2.为什么要创建节点并将其加入应用通道中?

        创建应用通道交易配置文件,可以指定创建的应用通道中可以有哪些组织加入及指定相应的权限;网络上的每个交易都需要在一个指定的通道中执行;在通道中,交易必须通过通道的认证和授权。要加入一个通道的每个节点都必须有自己的通过MSP获得的身份标识,用于鉴定每个节点在通道中的是什么节点和服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/34162.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

『赠书活动 | 第十三期』《算力经济:从超级计算到云计算》

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 『赠书活动 | 第十三期』 本期书籍:《算力经济:从超级计算到云计算》 赠书规则:评论区:点赞|收…

SFP6012-ASEMI代理MHCHXM(海矽美)二极管SFP6012

编辑:ll SFP6012-ASEMI代理MHCHXM(海矽美)二极管SFP6012 型号:SFP6012 品牌:MHCHXM(海矽美) 封装:TO-247AB 恢复时间:≤75ns 正向电流:30A 反向耐压&a…

基于Python的电影票房爬取与可视化系统的设计与实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

FlutterUnit 已上架 iOS,暗色模式全面支持

theme: cyanosis 一、FlutterUnit 的全平台支持 FlutterUnit 是我的一个开源项目,基于 Flutter 构建的一个 全平台 应用程序。现在很荣幸地宣布: FlutterUnit 已经上架 iOS 的 App Store ,自此主流的几大平台均已提供体验。 项目地址: https://github.co…

Java中常见的线程池以及ThreadPoolTaskExecutor和ThreadPoolExecutor

线程池的基本组成: 线程管理器:用于创建并管理线程池,负责线程池的创建、销毁以及任务的添加。 工作线程:线程池中的线程,负责执行任务,没有任务时处于等待状态。 任务接口:每个任务必须实现的…

B051-cms06-退出 回车登录 登录拦截 记住我 SVN

目录 注销功能实现1.找到退出按钮修改请求路径2.后端删除Session并跳转到登录页面 回车登录功能登陆拦截1.编写登录拦截器2.配置拦截器 记住我后端实现页面实现 取消记住我后端实现页面实现 注销功能实现 1.找到退出按钮修改请求路径 header.jsp <% page language"j…

Linux上安装matlab

首先需要下载文件&#xff0c;微人大正版软件下载里有 然后直接点击&#xff0c;就可以就可以安装&#xff0c;不需要使用挂载命令&#xff0c;然后使用 ./install就可以进行安装了&#xff0c;这里记住是得登录自己的人大邮箱&#xff0c;否则无法激活&#xff0c;然后修改安…

LeetCode·每日一题·2490. 回环句·模拟

作者&#xff1a;小迅 链接&#xff1a;https://leetcode.cn/problems/circular-sentence/solutions/2325227/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-x65e/ 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 著作权归作者所有。商业转载请联系作者获得授权&#xff0…

MySQL 主从复制与读写分离

概念 主从复制与读写分离的意义 企业中的业务通常数据量都比较大&#xff0c;而单台数据库在数据存储、安全性和高并发方面都无法满足实际的需求&#xff0c;所以需要配置多台主从数据服务器&#xff0c;以实现主从复制&#xff0c;增加数据可靠性&#xff0c;读写分离&#x…

不是吧,交换机坏了你还只会这么排查?

又见面了&#xff0c;我的网工朋友 上次给你分享了交换机和路由器的对接上网配置案例&#xff0c;还记得吗&#xff1f; 今天这篇&#xff0c;和你聊聊交换机接口故障。 接口故障这件事&#xff0c;对咱们网工来说其实算是家常便饭了。 工作到现在&#xff0c;你复盘一下&a…

实战:求年月日时间前后遇到的坑和解决方式

这里写目录标题 前言正确实例&#xff1a;错误实例&#xff1a; 需求 前言 这周接到一个时间转换任务需要处理&#xff0c;本来没什么问题&#xff0c;后来完成后发现时间有偏差&#xff0c;又重写了一遍代码&#xff0c;感觉很有记录必要性&#xff0c;希望看过的小伙伴可以避…

计算机网络——数据链路层

序言 问&#xff1a;数据链路层在现在的社会起到什么作用&#xff1f; 答&#xff1a;数据链路层在现在的社会起到关键性作用&#xff0c;比如&#xff1a;数据传输和通信&#xff1b;网络连接和互联互通&#xff1b;错误检测和纠正&#xff1b;媒体访问控制&#xff1b;网络性…

启动一个qemu虚拟机

安装qemu&#xff1a; 编译内核&#xff1a; 编译rootfs&#xff1b; 启动&#xff1a; qemu-system-x86_64 -kernel ./linux-4.14.320/arch/x86_64/boot/bzImage -hda ./busybox-1.36.1/rootfs.img -append "root/dev/sda consolettyS0" -nographic 效果图&am…

【Tensorflow object detection API + 微软NNI】图像分类问题完成自动调参,进一步提升模型准确率!

1. 背景&目标 利用Tensorflow object detection API开发并训练图像分类模型&#xff08;例如&#xff0c;Mobilenetv2等&#xff09;&#xff0c;自己直接手动调参&#xff0c;对于模型的准确率提不到极致&#xff0c;利用微软NNI自动调参工具进行调参&#xff0c;进一步提…

Cisco Catalyst 8000 Series Edge Platforms, IOS XE Release Dublin-17.11.01a ED

Cisco Catalyst 8000 Series Edge Platforms, IOS XE Release Dublin-17.11.01a ED Cisco Catalyst 8000 边缘平台系列 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-catalyst-8000/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&…

国企一面会问什么?

前言&#xff1a; \textcolor{Green}{前言&#xff1a;} 前言&#xff1a; &#x1f49e;快秋招了&#xff0c;那么这个专栏就专门来记录一下&#xff0c;同时呢整理一下常见面试题 &#x1f49e;部分题目来自自己的面试题&#xff0c;部分题目来自网络整理 国企注重的和私企会…

AI实战营第二期 第七节 《语义分割与MMSegmentation》——笔记8

文章目录 摘要主要特性 案例什么是语义分割应用&#xff1a;无人驾驶汽车应用&#xff1a;人像分割应用&#xff1a;智能遥感应用 : 医疗影像分析 三种分割的区别语义分割的基本思路按颜色分割逐像素份分类全卷积网络 Fully Convolutional Network 2015存在问题 基于多层级特征…

多元回归预测 | Matlab基于灰狼算法(GWO)优化混合核极限学习机HKELM回归预测, GWO-HKELM数据回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于灰狼算法(GWO)优化混合核极限学习机HKELM回归预测, GWO-HKELM数据回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 …

[游戏开发][Unity]出包真机运行花屏(已解决)

花屏真机截屏 原因 原因是启动项目时的第一个场景没有相机是 Skybox或者SolidColor模式&#xff0c;我的启动场景只有一个UI相机&#xff0c;且Clear Flags是DepthOnly 解释&#xff1a; https://blog.csdn.net/yanchezuo/article/details/79002318

三、1如何运用设计原则之SOLID原则写出高质量代码?

你好我是程序员雪球。接下来我们学习一些经典的设计原则。其中包括SOLID&#xff0c;KISS&#xff0c;YAGNI&#xff0c;DRY&#xff0c;LOD等。其实这些设计原则从字面意思理解并不难。但是“看懂”和“会用”是两回事&#xff0c;而“用好”就难上加难了。 先来了解SOLID原则…