澳门美高梅手机网站Hyperledger Fabric 1.0 从零初始(六)——创立Fabric多节点集群

1、前言

微信团队已于前年04月09日标准开源了微信自用的活动端数据库组件
WCDB(WeChat Database),详见《[资讯]
微信正式开源移动端数据库组件WCDB!
》。

WCDB是微信终端的第八个开源项目。至此,微信分享出去的代码包含了热更新(即微信Tinker)、网络基础零部件(详见《循序渐进而至:微信自用的移动端IM互联网层跨平台组件库马尔斯已正式开源》)和数据库(也就是本文所说的WCDB组件),能够说是压箱底的事物都拿了出来。

说起WCDB,它是在WeChat应用程序中动用的全速,完整,易于使用的移动数据库框架,它近来在iOS,MacOS和Android上可用。

Github地址:https://github.com/Tencent/wcdb

Star数量:3312

寄予微信的用户量和对数据库的重度依赖,WCDB直击移动端数据库在iOS和Android平台存在的例外难点。在Android上,由于
SDK 提供的支撑尚可,而且使用 NDK 开发不便,自然接纳系统 API
接口进行开发,提供加密接口、数据迁移、日志重定向和种种跟踪设置等功效。
iOS 意况则有两样:系统提供的CoreData
学费很高、品质一般,并不那么好用,由此进步易用性、保持神速和总体,则是适用于iOS的WCDB设计的重大。

客户端数据库并不是哪些“性感”的技巧,比起前段时间备受关怀的热更新或二〇一八年以来的AI、AR/VR等等,数据库的热度并不高,可是…

本文收录了关于微信移动端数据库WCDB的到如今为止一切细节,假如你有丰富的耐心读完以下内容,相信您便会爱上那套微信开源的化解方案。

(本文同步发布于:http://www.52im.net/thread-932-1-1.html

4:创制Fabric多节点集群

2、WCDB简介

WCDB是一个高速、完整、易用的活动数据库框架,基于 SQLCipher,匡助iOS、macOS 和
Android。微信高级工程师何俊伟代表:“开源只是故事的始发,我们仍会频频对
WCDB
做革新,包罗更易用的接口、更好的习性、更高的可信赖性。这么些立异最终也会闻风不动地在微信使用。”

WCDB(WeChat
DataBase)是微信官方的活动端数据库组件,致力于提供一个高速、易用、完整的移位端存储方案。

它含有多个模块:

WCDB-iOS/Mac;

WCDB-Android;

数据库损坏修复工具WCDBRepair。

更加多介绍,详见《[资讯]
微信移动端数据库组件WCDB即将开源!
》。

4.1、配置表明

首先可以依据官方Fabric自带的e2e_cli列子中的集群方案来生成大家温馨的集群,与案例差别的是大家须要把容器都分配到差别的服务器上,相互之间通过互连网来进展通信,网络创设形成后则展开连锁的channel和chaincode操作。

小编近期提请了五台服务器,所有的服务器均是依据上述e2e_cli环境营造与测试步骤配置。布置之中四台服务器运行peer节点,别的一台服务器运行orderer节点,为其他八个节点提供order服务。

虚拟机具体参数如下表所示:

名称

ip

节点标识

节点Hostname

Organization(组织机构)

Server1

10.130.116.8

orderer

orderer.example.cn

Orderer

Server2

10.130.116.9

sp0

peer0.org1.example.cn

Org1

Server3

10.130.116.10

sp1

peer1.org1.example.cn

Org1

Server4

10.130.116.25

sp2

peer0.org2.example.cn

Org2

Server5

10.130.116.27

sp3

Peer1.org2.example.cn

Org2

 

 

3、面对五光十色的iOS数据库技术,WCDB为啥自己造了个轮子?

对此iOS开发者来说,数据库的技巧选型一贯是个让人讨厌的题材。由于Apple提供的CoreData框架救经引足,使得开发者们纷纭将眼光投向开源社区,寻找更好的积存方案。

对此微信也是如此。数据库是微信内最基础的组件之一,音讯收发、联系人、朋友圈等等业务都离不开数据库的接济。为了满意须要,大家也对现有方案做了对待研讨后发觉,发现已有方案都不可以满意微信的渴求,于是WCDB应运而生。

详见:《微信移动端数据库组件WCDB连串(一)-iOS基础篇

4.2、生成公私钥、证书、创世区块等

公私钥和证件是用以Server与Server之间的长治通讯,其余要开创channel并让别的节点参预channel就必要创世区块,那一个不可或缺文件都足以通过一个指令生成,并且官方已经付诸了本子,在如下目录中的文件:

/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/ generateArtifacts.sh

使用generateArtifacts.sh生成证书和config.tx,具体执行命令如下:

bash generateArtifacts.sh mychannel

那里开创了5台服务器,在随机一台服务器的该目录下进行此项命令即可,将会转变八个目录,它们各自为channel-artifacts和crypto-config,四个目录的结果和意义如下视图:

 澳门美高梅手机网站 1

在上述目录里的文件用于orderer成立channel,它们依照configex.yaml的布局生成。

 澳门美高梅手机网站 2

 在上述目录里有orderer和peer的评释、私钥和用来通讯加密的tls证书等公事,它通过configex.yaml配置文件生成。

 

4、数据库损坏难题,WCDB都提供了怎么方案?

长久以来SQLite
DB都有毁损难题,从Android、iOS等活动系统,到Windows、Linux
等桌面系统都会现出。由于微信所有信息都保留在DB,服务端不保留备份,一旦破坏将导致用户信息被清空,显著无法接受。

WCDB (WeChat Database),致力于解决 DB
损坏导致数据丢失的题材,提供修复工具组合套拳。

微信团队发布的相关小说如下:

微信移动端数据库组件WCDB种类(二) —
数据库修复三板斧

微信团队原创分享:微信客户端SQLite数据库损坏修复实施

4.3、配置多服务器

依据4.2的方案,以及在此以前所述的gopath目录等配备方案,大家假如所有的服务器都遵守该文档的配置来操作,所有服务器都有Fabric源码且目录为

/opt/gopath/src/github.com/hyperledger/fabric

 

 大家在Server1上实施如下命令生成构建Fabric网络所需的积极分子讲明等必备材料:

bash generateArtifacts.sh mychannel

 

 如4.2中所述,该命令只需在里面某一台服务器上运行一遍即可,别的服务器无需重复运行。

在运行该命令的服务器/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli目录下会生成channel-artifacts和crypto-config目录,需求把它们拷贝到其它服务器相同的e2e_cli目录下,如果在其他服务器中早已存在该目录,则先把此目录删除。

当所有服务器都有同一个channel-artifacts和crypto-config目录后,接下去就开首布局compose文件。

 

5、固然是很复杂的询问,也得以由此一行代码达成:WCDB怎么着确保易用性?

WCDB通过WINQ抽象SQLite语法规则,使得开发者可以告别字符串拼接的胶水代码。通过和接口层的ORM结合,使得纵然是很复杂的查询,也足以经过一行代码完毕。并凭借IDE的代码提醒和编译检查的特征,大大升级了支出功能。同时还内建了反注入的护卫。

虽说WINQ在贯彻上应用了C++11特性和模版等,但在选择进度并不须求涉及。对于熟识SQL的费用,只需根据本能即可写出SQL对应的WINQ语句。最终落得增长WCDB易用性的目标。同时,基于C++的贯彻也使得WINQ在质量可以期待。

详见:《微信移动端数据库组件WCDB系列(三) —
WINQ原理篇

4.4、设置peer0.org1.example.com节点的docker-compose文件

e2e_cli中提供了几个yaml文件,我们可以依据docker-compose-cli.yaml文件创立,具体可实施如下命令:

cp docker-compose-cli.yaml docker-compose-peer.yaml

 

接下来修改docker-compose-peer.yaml,去掉orderer的布局,只保留一个peer和cli,因为大家要多级安插,节点与节点从前又是经过主机名通讯,所以须求修改容器中的host文件,也就是extra_hosts设置,修改后的peer配置如下:

1 peer0.org1.example.com:
2     container_name: peer0.org1.example.com
3     extends:
4       file:  base/docker-compose-base.yaml
5       service: peer0.org1.example.com
6     extra_hosts:
7      - "orderer.example.com:10.130.116.8"

 

 同样,cli也亟需可以和一一节点通信,所以cli上边也急需添加extra_hosts设置,去掉无效的器重,并且去掉command这一行,因为我们是每个peer都会有个照应的客户端,也就是cli,所以自己只必要去手动执行四遍命令,而不是活动运行。修改后的cli配置如下:

 1 cli:
 2     container_name: cli
 3     image: hyperledger/fabric-tools
 4     tty: true
 5     environment:
 6       - GOPATH=/opt/gopath
 7       - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
 8       - CORE_LOGGING_LEVEL=DEBUG
 9       - CORE_PEER_ID=cli
10       - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
11       - CORE_PEER_LOCALMSPID=Org1MSP
12       - CORE_PEER_TLS_ENABLED=true
13       - 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
14       - 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
15       - 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
16       - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
17     working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
18     volumes:
19         - /var/run/:/host/var/run/
20         - ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go
21         - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
22         - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
23         - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
24     depends_on:
25       - peer0.org1.example.com
26     extra_hosts:
27      - "orderer.example.com:10.130.116.8"
28      - "peer0.org1.example.com:10.130.116.9"
29      - "peer1.org1.example.com:10.130.116.10"
30      - "peer0.org2.example.com:10.130.116.25"
31      - "peer1.org2.example.com:10.130.116.27"

 

 在3.2示范单机情势下,4个peer会映射主机不一致的端口,可是大家在多机安插的时候是不必要映射分歧端口的,所以须求修改base/docker-compose-base.yaml文件,将具有peer的端口映射都改为同样的:

1 ports: 
2   - 7051:7051 
3   - 7052:7052 
4   - 7053:7053

 

 

6、WCDB Android有怎么样的性状效益?

Android 由于接口跟系统大概一致,相信咱们都对比熟稔,不熟练用法也足以到
Android Developer
官网看一下。不过,我们也有一些特色效益和优化我们也许不不难注意到,
例如加密接口、数据迁移、全文检索分词器与动态ICU加载、日志重定向与特性监控、优化Cursor完结,现在就独自拿出以来说。

有关小说如下:

微信移动数据库组件WCDB(四) — Android
特性篇

挪动端IM实践:Android版微信怎么着大幅升高交互品质(一)

运动端IM实践:Android版微信怎么着大幅升级交互质量(二)

4.5、设置peer1.org1.excmple.com节点的docker-compose文件

与peer0.org1.example.com节点compose文件配置一样,可是须要将起动的容器改为peer1.org1.example.com,并且添加peer0.org1.example.com的IP映射,对应的cli中也改成对peer1.org1.example.com的借助。这是修改后的peer1.org1.example.com上的配备示范:

 1 peer1.org1.example.com:
 2     container_name: peer1.org1.example.com
 3     extends:
 4       file:  base/docker-compose-base.yaml
 5       service: peer1.org1.example.com
 6     extra_hosts:
 7      - "orderer.example.com:10.130.116.8"
 8      - "peer0.org1.example.com:10.130.116.9"
 9 
10   cli:
11     container_name: cli
12     image: hyperledger/fabric-tools
13     tty: true
14     environment:
15       - GOPATH=/opt/gopath
16       - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
17       - CORE_LOGGING_LEVEL=DEBUG
18       - CORE_PEER_ID=cli
19       - CORE_PEER_ADDRESS=peer1.org1.example.com:7051
20       - CORE_PEER_LOCALMSPID=Org1MSP
21       - CORE_PEER_TLS_ENABLED=true
22       - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt
23       - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key
24       - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt
25       - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
26     working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
27     volumes:
28         - /var/run/:/host/var/run/
29         - ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go
30         - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
31         - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
32         - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
33     depends_on:
34       - peer1.org1.example.com
35     extra_hosts:
36      - "orderer.example.com:10.130.116.8"
37      - "peer0.org1.example.com:10.130.116.9"
38      - "peer1.org1.example.com:10.130.116.10"
39      - "peer0.org2.example.com:10.130.116.25"
40      - "peer1.org2.example.com:10.130.116.27"

与上述类似,可以重复设置peer0.org2.example.com及peer1.org2.example.com节点compose配置文件。

 

7、为了让开发者更快上手,WCDB为开源做了哪些改变?

Android 和 iOS
的数据库在有了跨平台组件的想法和实践经验,思考难题更加多从方案通用性的方向考量。为了更好地共享成果,Android
与 iOS 数据库组件 WCDB
经过重构后退出各自的工作逻辑,变成一个独立的,专注的,可拓宽的零件,最终以开源的款式与大家蒙受。

详见:《微信WCDB进化之路 –
开源与伊始

4.6、设置order节点的docker-compose文件

与创立peer的部署文件类似,大家也复制一个yaml文件出来举行改动:

cp docker-compose-cli.yaml docker-compose-orderer.yaml

orderer服务器上大家只须求保留order设置,其他peer和cli设置都得以去除。orderer可以不设置extra_hosts。

以下是order
compose的布局示范:

1 orderer.example.com:
2     extends:
3       file:   base/docker-compose-base.yaml
4       service: orderer.example.com
5     container_name: orderer.example.com

 

 

本章节及前边的一章可以直接参阅:Fabric
1.0的多机计划
,在这位助教的博客里写的很是了解,而且自己也是参照那篇博客来形成多机多节点自动计划方案的,只是手动调配及后续操作在网上基本上并未可供参考的中文内容,需求查阅官网文档来逐步完毕。

8、写在终极

读到那儿,相信您早就可以感受微信WCDB团队的用功和专业:“希望可以持续优化WCDB,将以此难题解决到极致。多年后再提起客户端数据库,不须求引起其余热度和探究,用WCDB就解决了。”

眼下微信开源的门类已兑现内外部同步,Github上的革新最后也会稳如泰山的在微信支付中利用。由此,希望您可以提议issue和PR,微信会因你更好。(原文链接:点此进入&version=12020010&nettype=WIFI&fontScale=100&pass_ticket=FqFBD5KxVchOleHtAfBZmh08sa8gxqBl8lbU4IAK4k7R%2FFPqFGNlXSVzMcStEuSu))

9、附录:更加多QQ、微信技术小说

[1] 有关QQ、微信的技巧小说:

微信客户端团队老总技术访谈:如何入手客户端质量监控和优化

微信后台基于时间序的海量数据冷热分级架构设计实践

微信团队原创分享:Android版微信的重合之困与模块化实践之路

微信后台团队:微信后台异步音讯队列的优化提高实施分享

微信团队原创分享:微信客户端SQLite数据库损坏修复实施

腾讯原创分享(一):怎么样大幅进步活动网络入手机QQ的图形传输速度和成功率

腾讯原创分享(二):如何大幅缩减移动互连网下APP的流量消耗(下篇)

腾讯原创分享(二):怎么着大幅减小移动互联网下APP的流量消耗(上篇)

微信马尔斯:微信内部正在接纳的网络层封装库,即将开源

根据而至:微信自用的活动端IM网络层跨平台组件库马尔斯已正式开源

开源libco库:单机千万连接、支撑微信8亿用户的后台框架基石
[源码下载]

微信新一代通讯安全解决方案:基于TLS1.3的MMTLS详解

微信团队原创分享:Android版微信后台保活实战分享(进度保活篇)

微信团队原创分享:Android版微信后台保活实战分享(网络保活篇)

Android版微信从300KB到30MB的技能形成(PPT讲稿)
[附件下载]

微信团队原创分享:Android版微信从300KB到30MB的技巧形成

微信技术首席营业官谈架构:微信之道——大道至简(演说全文)

微信技术高管谈架构:微信之道——大道至简(PPT讲稿)
[附件下载]

什么样解读《微信技术经理谈架构:微信之道——大道至简》

微信海量用户私自的后台系统存储架构(视频+PPT)
[附件下载]

微信异步化改造进行:8亿月活、单机千万连接背后的后台解决方案

微信朋友圈海量技术之道PPT
[附件下载]

微信对网络影响的技能试验及分析(随想全文)

一份微信后台技术架构的计算性笔记

架构之道:3个程序员成就微信朋友圈日均10亿发表量[有视频]

火速裂变:见证微信强大后台架构从0到1的夜长梦多历程(一)

迅猛裂变:见证微信强大后台架构从0到1的演进历程(二)

微信团队原创分享:Android内存泄漏监控和优化技术计算

完美总计iOS版微信升级iOS9赶上的各类“坑”

微信团队原创资源混淆工具:让您的APK立减1M

微信团队原创Android资源混淆工具:AndResGuard
[有源码]

Android版微信安装包“减肥”实战记录

iOS版微信安装包“减肥”实战记录

移动端IM实践:iOS版微信界面卡顿监测方案

微信“红包照片”背后的技术难点

移步端IM实践:iOS版微信小视频成效技术方案实录

运动端IM实践:Android版微信怎样大幅进步交互质量(一)

移步端IM实践:Android版微信如何大幅升高交互品质(二)

活动端IM实践:已毕Android版微信的智能心跳机制

移步端IM实践:WhatsApp、Line、微信的心跳策略分析

活动端IM实践:谷歌(Google)音讯推送服务(GCM)商量(来自微信)

移步端IM实践:iOS版微信的多设备字体适配方案商量

信鸽团队原创:一起度过 iOS10
上音信推送(APNS)的坑

>>更多同类文章……

[2] 有关QQ、微信的技能故事:

技术往事:创业初期的腾讯——16年前的春季,哪个人动了中国首富马化腾的代码

技能往事:史上最全QQ图标变迁进度,追寻IM巨人的演进历史

技巧往事:“QQ群”和“微信红包”是怎么来的?

付出往事:深度讲述2010到2015,微信一路风雨的背后

支出往事:微信千年不变的那张闪屏图片的来头

支付往事:记录微信3.0版背后的故事(距微信1.0公布9个月时)

一个微信实习生自述:我眼中的微信支付协会

>>越多同类文章……

(本文同步揭橥于:http://www.52im.net/thread-932-1-1.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注