ldd-Daniel / blockchain

bubi blockchain is a mature, stable, high performance block chain implementation, it has been running on https://www.bumeng.cn for years.

Home Page:http://www.bubi.cn

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status CircleCI Build status

简介

布比区块链由布比(北京)网络技术有限公司发起并研发,旨在推动区块链技术的发展与应用。目前布比区块链正被应用于商业积分、电子券、预付卡、游戏装备、保险卡单、证券化资产等领域。

  • 去中心化 采用P2P分布式存储,没有中心化的管理节点,可根据实际需求配置若干个验证节点,所有的验证节点具备相同的权利,整个系统的数据块由所有验证节点来共同维护。
  • 安全 数据经过验证节点之间达成共识然后添加至区块链,一旦添加至区块链就会永久存储而且不可篡改,单个节点对数据的修改是无效的。
  • 高效 此版本通过优化数据结构,关键路径多线程并发,多机分布式计算hash,异步写入数据库等方法,使得性能提高明显,普通PC节点可以达3000TPS。集群节点性能更高。
  • 稳定 布比区块链已经商用于布萌数字资产平台一年多,目前(2017年5月7日)累积用户数1013万,周新增用户数14万,周新增交易数110万。
  • 开放 通过公开的API可查询区块链数据,也可根据实际需求修改布比区块链源码。
  • 可移植 使用标准C++开发,支持windows,linux等各种平台

架构

布比区块链节点支持分布式部署,以满足高性能,高可靠需求。每个节点至少需要有一个bubi node,即一个bubi进程和一个SQL数据库组成。Bubi node支持横向扩展,以满足高可靠需求。Slave cluster为可选组件,用来分担bubi node的计算,支持动态扩展。Big data mining 为可选组件,可做大数据分析和挖掘。可参考如下部署图。

Balance server 为可选服务,这取决于用户以何种方式使用bubi底层服务。 Reserve proxy或Endpoint map是为了将底层服务部署到广域网。如果部署在云平台,需要在控制台做端口映射即可。 如果部署到自建服务器上,需要在网关做端口映射或部署一个反向代理服务。

系统交互

布比底层提供了多种接口,提交交易接口推荐使用SDK方式,这种提交为异步提交,结果会分阶段的通知给应用,比如CONFIRM,PENDING,COMPLETE或者FAILURE。另外可以使用WEB接口提交至bubi 或者slave。 查询请求只能发送到bubi进程。图中的PUB,SUB是ZMQ中的发布订阅模式,PUSH,PULL为任务模式,可以清晰的看到bubi,slave,sdk,monitor之间的通信方式。 Monitor与监控中心采用websocket模式,有利于实时告警。

模块

下图描述了bubi和slave内部的主要模块,以及重点模块间的交互。黄色的模块中含有线程,灰色的为外部持久化文件。为了提高性能,减少交易峰值时IO对性能的影响,设计上考虑了异步写入数据库的功能。蓝色为SDK或者使用者,与bubi通信采用web和MQ两种方式。

交易流程

下图描述了交易的处理流程。slave不是必须的,如果没有slave,bubi会自己做验签工作。

编译

Build on Ubuntu 14.04

  • 安装依赖

    sudo apt-get install automake autoconf libtool g++ cmake libidn11-dev

    手动安装oracle jdk

  • 编译 ./configure make

  • 一键编译

    进入build/linux目录,执行build.sh

Build on Windows with VS2013

使用vs2013打开项目文件 build/win32/bubi.vs12.sln 编译

测试

在test目录下的4peers-without-slave_test.sh 和4peers-with-slave_test.sh,分别用 于部署四个节点带slave和不带slave的测试。带slave的节点配置文件位于test/env/4peers-with-slave/peeri-with-slave目录下,不带slave的节点配置文件位于test/env/4peers-without-slave/peeri-without-slave目录下,i是节点标记1到4。

以test/env/4peers-with-slave/peer1-with-slave目录为例:

bin 存放可执行文件

confg 存放配置文件,bubi.json 是bubi的配置文件,slave.json 是slave的配置文件,可根据实际情况修改配置。bubi.json中db的用户名密码配置需与postgresql安装时设置一致。

log 默认存放日志文件,可以在bubi.json中配置

data 默认存放key-value db数据文件,可在bubi.json中配置

执行test/4peers-without-slave_test.sh启动四个节点不带slave

执行test/4peers-with-slave_test.sh启动四个节点带slave

Copyright © 2016 Bubi Technologies Co., Ltd

About

bubi blockchain is a mature, stable, high performance block chain implementation, it has been running on https://www.bumeng.cn for years.

http://www.bubi.cn

License:Apache License 2.0


Languages

Language:C++ 60.9%Language:C 22.4%Language:Python 7.5%Language:Java 5.6%Language:Roff 1.7%Language:Objective-C 1.6%Language:Makefile 0.1%Language:Protocol Buffer 0.1%Language:Shell 0.0%Language:PHP 0.0%Language:Pascal 0.0%Language:Batchfile 0.0%Language:M4 0.0%Language:HTML 0.0%