Fabric 基本概念

1.区块链介绍

区块链之所以引来关注是因为比特币开源项目,尤其是比特币价值的飙升,让大家开始关注数字货币以及相关技术。那么区块链究竟是什么?

1.1 区块链定义

狭义上,区块链是一种以区块为基本单位的链式数据结构,区块中利用数字摘要对之前的交易历史进行校验。

广义上,区块链指代这些基于区块链结构实现的分布式记账技术。

1.2 具体特征

  • 去中心化。由于使用分布式核算和存储,体系不存在中心化的硬件或管理机构。
  • 开放性。系统是开放的,除了交易各方的私有信息被加密外,区块链的数据对所有人公开,任何人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息高度透明。
  • 自治性。区块链采用基于协商一致的规范和协议使得整个系统中的所有节点能够在去信任的环境自由安全的交换数据。
  • 信息不可篡改。一旦信息经过验证并添加至区块链,就会永久的存储起来,除非能够同时控制住系统中超过51%的节点,否则单个节点上对数据库的修改是无效的,因此区块链的数据稳定性和可靠性极高。
  • 匿名性。由于节点之间的交换遵循固定的算法,其数据交互是无需信任的。

1.3 分类

当前根据参与者类型,主要分为以下三类:

  • 公有链,任何人都可以参与使用和维护,参与者多为匿名。典型的如比特币和以太坊区块链,信息是完全公开的。

  • 私有链,由集中管理者进行管理限制,只有内部少数人可以使用,信息不公开。

  • 联盟链,介于两者之间,由若干组织一起合作维护一条区块链,该区块链的使用必须是带有权限的限制访问,相关信息会得到保护,典型如超级账本项目。

接下来,将重点介绍联盟链超级账本fabric项目。

2. 超级账本Fabric项目

超级账本(Hyperledger)项目是全球最大的开源企业级分布式账本平台。

在 Linux 基金会的支持下,超级账本项目吸引了包括 IBM、Intel、Cisco、DAH、摩根大通、R3、甲骨文、百度、腾讯等在内的众多科技和金融巨头的参与贡献,以及在银行、供应链等领域的应用实践。

作为最早加入到超级账本项目中的顶级项目,Fabric 由 IBM、DAH 等企业于 2015 年底提交到社区。项目在 Github 上地址为 https://github.com/hyperledger/fabric

该项目的定位是面向企业的分布式账本平台,创新的引入了权限管理支持,设计上支持可插拔、可扩展,是首个面向联盟链场景的开源项目。

2.1 Fabric特性

  • 解耦了原子排序环节与其他复杂处理环节,消除了网络处理瓶颈,提高可扩展性;
  • 解耦交易处理节点的逻辑角色为背书节点(Endorser)、确认节点(Committer),可以根据负载进行灵活部署;
  • 加强了身份证书管理服务,作为单独的Fabric CA项目,提供更多功能;
  • 支持多通道特性,不同通道之间的数据彼此隔离,提高隔离安全性;
  • 支持可拔插的架构,包括共识、权限管理、加解密、账本机制都模块,支持多种类型;
  • 引入系统链码来实现区块链系统的处理,支持可编程和第三方实现。

2.2 Fabric架构

超级账本 Fabric 的整体架构如下图所示。

Fabric 为应用提供了 gRPC API,以及封装 API 的 SDK 供应用调用。应用可以通过 SDK 访问 Fabric 网络中的多种资源,包括账本、交易、链码、事件、权限管理等。应用开发者只需要跟这些资源打交道即可,无需关心如何实现。其中,账本是最核心的结构,记录应用信息,应用则通过发起交易来向账本中记录数据。交易执行的逻辑通过链码来承载。整个网络运行中发生的事件可以被应用访问,以触发外部流程甚至其他系统。权限管理则负责整个过程中的访问控制。账本和交易进一步地依赖核心的区块链结构、数据库、共识机制等技术;链码则依赖容器、状态机等技术;权限管理利用了已有的 PKI 体系、数字证书、加解密算法等诸多安全技术。底层由多个节点组成 P2P 网络,通过 gRPC 通道进行交互,利用 Gossip 协议进行同步。

2.3 核心概念与组件

超级账本 Fabric 采用了模块化功能设计,整体的功能模块结构如下图所示。

超级账本 Fabric 面向不同的开发人员提供了不同层面的功能,自下而上可以分为三层:

  • 网络层:面向系统管理人员。实现 P2P 网络,提供底层构建区块链网络的基本能力,包括代表不同角色的节点和服务 ;
  • 共识机制和权限管理:面向联盟和组织的管理人员。基于网络层的连通,实现共识机制和权限管理,提供分布式账本的基础 ;
  • 业务层:面向业务应用开发人员。基于分布式账本,支持链码、交易等跟业务相关的功能模块,提供更高一层的应用开发支持。

菜鸟系列Fabric——Fabric 基本概念(1)的更多相关文章

  1. 菜鸟系列docker——docker基本概念(1)

    docker基本概念 1.准备 这里先介绍容器技术,后续再介绍docker.docker是容器的一种,除docker以外,还存在coreos.不过在当前趋势下容器和docker基本上可以划为等号了. ...

  2. 开心菜鸟系列----函数作用域(javascript入门篇)

      1 <!DOCTYPE html>   2 <html>   3 <script src="./jquery-1.7.2.js"></ ...

  3. 开心菜鸟系列----变量的解读(javascript入门篇)

                       console.info(         console.info(window['weiwu'])          console.info(window. ...

  4. faster-rcnn系列原理介绍及概念讲解

    faster-rcnn系列原理介绍及概念讲解 faster-rcnn系列原理介绍及概念讲解2 转:作者:马塔 链接:https://www.zhihu.com/question/42205480/an ...

  5. 原创】Java并发编程系列2:线程概念与基础操作

    [原创]Java并发编程系列2:线程概念与基础操作 伟大的理想只有经过忘我的斗争和牺牲才能胜利实现. 本篇为[Dali王的技术博客]Java并发编程系列第二篇,讲讲有关线程的那些事儿.主要内容是如下这 ...

  6. 菜鸟系列Fabric——Fabric 网络架构介绍(4)

    Fabric 网络架构介绍 1. 网络架构介绍 如图所示,fabric网络架构主要包含客户端节点.CA节点.Peer节点.Orderer节点这几个部分.并且fabric架构是安装组织来进行划分当,每个 ...

  7. 菜鸟系列Fabric——Fabric 动态添加组织(7)

    Fabric 网络动态添加组织 1.环境准备 如果存在fabric网络环境可不执行,若不存在可以安装下列进行准备 下载fabric-sample,fabric https://github.com/h ...

  8. 菜鸟系列Fabric源码学习—orderer服务启动

    Fabric 1.4 orderer 服务启动流程 1.提要 orderer提供broadcast和deliver两个服务接口.orderer节点与各个peer节点通过grpc连接,orderer将所 ...

  9. 菜鸟系列Fabric源码学习 — 区块同步

    Fabric 1.4 源码分析 区块同步 本文主要从源码层面介绍fabric peer同步区块过程,peer同步区块主要有2个过程: 1)peer组织的leader与orderer同步区块 2)pee ...

随机推荐

  1. c++实例之通讯录管理系统之清空联系人功能(七)

    #include<iostream> using namespace std; constexpr auto MAX = ; //联系人结构体 struct Person { string ...

  2. jquery scroll()方法 语法

    jquery scroll()方法 语法 作用:当用户滚动指定的元素时,会发生 scroll 事件.scroll 事件适用于所有可滚动的元素和 window 对象(浏览器窗口).scroll() 方法 ...

  3. python 中type和object的关系

    转自:https://segmentfault.com/a/1190000008938763 学习python的同学都知道这么几句话 object类是所有新式类的父类. type是所有类的类. 那么t ...

  4. $\LaTeX$数学公式大全6

    $6\ Binary\ Operation/Relation\ Symbols$$\ast$ \ast$\star$ \star$\cdot$ \cdot$\circ$ \circ$\bullet$ ...

  5. Android开源界面库--ResideMenu用法

    网上关于ResideMenu用法的教程很多,但基本上全是从Github上copy下来的,Gitbub上给出的了对应的demo,但是由于我的IDE原因吧,demo一直导入不成功.为此自己又捣鼓了一翻,终 ...

  6. Spring Cloud Feign声明式服务调用(转载)+遇到的问题

    转载:原文 总结: 1.pom添加依赖 2.application中填写正确的eureka配置 3.启动项中增加注解 @EnableFeignClients 4.填写正确的调用接口 通过原文使用Fei ...

  7. GitHub:Youtube

    ylbtech-GitHub:Youtube 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. https://github.com/youtube 2.   ...

  8. GNU项目

    目标在于建立一个完全相容于UNIX的自由软件环境.发展GNU系统的计划,最早由理查德•斯托曼在1983 年启动,它是自由软件基金会最早致力的目标.最近一个GNU系统版本,是于2011年4月1日释出的G ...

  9. 代码实现:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名

    package com.loaderman.test; import java.io.File; import java.io.FileReader; import java.util.Scanner ...

  10. SQL学习(八)日期处理

    不同数据库中,针对日期处理的函数不同 Oracle中常用日期函数 (1.sysdate: 获取当前系统时间 如: select sysdate() ----返回当前时间,包括年月日 时分秒 (2.to ...