IBM openblockchain学习(五)--consensus源码分析
这段时间小编一直忙着找实习,现在开始接着分析了,不好意思让大家久等了。好了,直接上干货。
consensus是blockchain中实现obc peer端一致性的插件,诸位请看
这段时间小编一直忙着找实习,现在开始接着分析了,不好意思让大家久等了。好了,直接上干货。
consensus是blockchain中实现obc peer端一致性的插件,诸位请看
crypto是blockchain中加密技术功能的实现,其中包括了椭圆曲线加密和SHA256等加密算法等,接下来将对其核心部分进行解析。
Ledger是总账簿的意思,也就是blockchain中存储交易记录的部分。其代码包含如下,这块代码量大,可能分析时间会很长,希望读者耐心等待。
openblockchain是IBM开源的blockchain项目,具体安装流程之前已经介绍过,具体请看http://blog.csdn.net/pangjiuzala/article/details/50897819。
配置开发环境
当前开发环境使用varant来运行一个ubuntu镜像,ubuntu中运行着docker容器。
主机->ubuntu->docker。
该模型可以使开发者使用它们自己喜欢的编辑器/操作系统,并且为长期开发的团队提供可控制的环境。
Spark架构采用了分布式计算中的Master-Slave模型。Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点。Master作为整个集群的控制器,负责整个集群的正常运行;Worker相当于是计算节点,接收主节点命令与进行状态汇报;Executor负责任务的执行;Cluster作为用户的客户端负责提交应用,Driver负责控制一个应用的执行。具体如下图
1.什么是 java 序列化, 如何实现 java 序列化?或者请解释 Serializable 接口 接口的作用?
答:我们有时候将一个java 对象变成字节流的形式传出去或者从一个字节流中恢复成一个java 对象,例如,要将java 对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java 对象变成某个格式的字节流再传输,但是,jre 本身就提供了这种支持,我们可以调用OutputStream的writeObject方法来做,如果要让java帮我们做,要被传输的对象必须实现serializable 接口,这样,javac 编译时就会进行特殊处理,编译的类才可以被writeObject方法操作,这就是所谓的序列化。需要被序列化的类必须实现Serializable 接口,该接口是一个mini 接口,其中没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的。
例如,在web 开发中,如果对象被保存在了Session 中,tomcat 在重启时要把Session对象序列化到硬盘,这个对象就必须实现Serializable接口。如果对象要经过分布式系统进行网络传输或通过rmi 等远程调用,这就需要在网络上传输对象,被传输的对象就必须实现Serializable接口。
试想一下,如果有10G数据,或者更多;怎么才能够快速地去重呢?你会说将数据导入到数据库(mysql等)进行去重,或者用java写个程序进行去重,或者用Hadoop进行处理。如果是大量的数据要写入数据库也不是一件容易的事情,首先你需要开发一个程序将数据写入数据库,然后再用数据库的select distinct或者group by进行去重。如果是一次性的工作,这种方式显得就比较笨拙了。那么有没有更好的办法呢?下面记录一下我是怎么从10G数据里面迅速去重的。这里采用shell脚本的方式进行处理。
在⽐特币系统中, 我们⽤公钥加密创建⼀个密钥对, ⽤于控制⽐特币的获取。 密钥对包括⼀个私钥, 和由其衍⽣出的唯⼀的公钥。 公钥⽤于接收⽐特币, ⽽私钥⽤于⽐特币⽀付时的交易签名。
We will introduce more advanced text processing techniques available in MLlib to work with large-scale text datasets.