Gopher China Introduction

BlockChain & Microservice

19 July 2018

fengzhide

Introduction

2

2018GopherChina 简介

3

Why GO

25 key words

代码简洁
interface与实现无实际关联

垂直&水平组合
goroutine + channel
4

区块链

5

什么是区块链

区块链是用分布式数据库识别、传播和记载信息的智能化对等网络,也称为价值互联网
区块链不是泡沫,但是今天的比特币可能是泡沫,区块链不是金矿,
区块链是打开数字金融的一个金矿的巨大的工具和应用,是一个数据时代,隐私和安全的解决方案。 
                                            -- 马云
6

区块链的特征

1. hash sha256
2. merkle tree
3. 非对称加密
1. 比特币
2. 以太坊
3. IPFS
7

区块链项目的组成架构

8

数据形式

1. 区块链(prev hash + merkle root + timestamp + nonce)
2. 账本数据存储
9

Merkle Tree

Merkle Tree 可以为二叉树或多叉树
叶子节点记录文件信息,非叶子节点记录其子节点的hash
如图,hash( file1 ) = 1, 2, 3
10

Merkle Tree (insert)

hash( file2 ) = 1, 2, 3, 2
11

共识机制

1. 一致性
2. 正确性
3. 可结束性
1. pow(工作量证明及最长链机制)
2. pos/dpos(股份授权证明机制)
12

pow(工作量证明制)

prev hash: 上一个区块的hash值
merkle root: 当前交易树的根hash值
ts: 当前时间戳
nonce: 随机数

blockchain = prev hash + merkle root + ts   // 组成当前区块链信息
for:
    nonce = rand()                              // 产生随机数
    hashcode = SHA256( blockchain + nonce )     // 进行sha256运算
    pattern = "^0{6}"                           // 匹配前6位都是0
    b = pattern.match( hashcode )               // 检查结果是否匹配
    if b == true: 
        succ

nonce 为工作量证明,矿工挖矿大部分算力就是进行这个
13

pow(工作量证明制)

1. 生成铸币交易,更新Merkle树,获取其根哈希
2. 组装区块头blockchain
3. 根据工作量证明函数,不断进行nonce的哈希碰撞
通过控制pattern来控制难度值,一般按时间来提升难度值
1. 符合工作量证明函数
2. 区块包含的所有交易都合法
3. 最长链机制(防止分叉)
14

dpos (股份授权证明机制)

前提是算力均匀
算力浪费,哈希碰撞除了防篡改,是无意义的
难度不按时间来提升,而是与交易币龄成反比(首富账户有可能支配记账权)
随机下个区块选择(洗牌算法得出一个固定的出块代理)
15

dpos (股份授权证明机制)

1. 见证人可以生产区块
2. 每个持股的人都可以投票选举见证人,由公民民主共识
3. 见证人个数满足:至少一半的参与投票者相信N已经充分去中心化了
4. 另一种方式是竞选,通过交易费用、区块大小等条件参与
每次代理出块需要2/3通过
降低分叉可能性,网络封区后主动同步出块节点
16

智能合约

智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议
1. 执行(执行交易)
2. 验证(验证收到的交易,防篡改)
共识机制的作用:验证区块(链)是否有效
智能合约:执行(交易)/ 验证(交易)
17

智能合约

1. 区块链上的用户进行交易
2. 调用智能合约接口验证交易
3. 验证成功后发布到其他节点
1. 为了确保智能合约不被恶意破坏,每次交易会收取一定手续费(按照交易笔数、交易数据的字节数收取费用)
2. 用户通过私钥自证身份,调用合约
18

智能合约

19

区块链目前存在的问题

1. 软分叉,新节点会拒绝某些交易记账,旧节点认可,当新节点占多数时,区块按照新规则,旧节点由于算力少小,短链被抛弃。软分叉不会产生永久性分叉
2. 硬分叉,新区块只有新节点认可,旧节点不会认为新区块合法,因此会产生两条链
压榨单台机器的最高性能,但不是分布式集群
达到51%算力,就有可能修改账本、阻止别人挖矿
无法真正的匿名、ip地址
20

IPFS (InterPlanetary File System,星际文件系统)

21

IPFS (InterPlanetary File System)

支持目前所有的网络层传输协议
分布式哈希寻址
1. 交换have_list和want_list    
2. 获取数据:产生债务;发送数据:偿还债务(避免‘自私’节点)    
3. 节点间交换账本防止恶意节点
1. 每个节点都存储信息,但最大256k
2. 根据hash可以找到文件的其他节点位置
3. merkle tree可以防篡改
4. 重复内容只会存1份(类似git的hash原理)
5. 类似git,支持version地存储
22

Kademlia DHT

XOR(异或运算),寻找距离最近的节点 
如:hash 110

若本地无法确认最终地址,通过与目标最近的节点继续进行路由寻址
23

Merkle DAG

每个节点都存储信息,但最大256k
支持version地存储(类似git)
24

golang & blockchain

25

微服务

26

异常定位 -> 日志规范化(opentracing)

DLTag          -> 标记日志的功能(sauth/notify)
TraceId/SpanId -> 跨进程requestid
27

线上全链路压测

28

线上全链路压测

1. 流量标识,对压测流量 req header 添加 hitcode
2. 快cache+影子表
3. 写agent模拟操作,系统黑盒(非函数式状态,司机、乘客、天气等)
评估线上压力,适度压测
29

服务迁移

30

服务迁移

31

服务迁移

32

服务迁移

33

Thank you

fengzhide