架构师训练营第十四周课程笔记及心得
第一课:
大数据平台架构:
大数据平台的挑战:
大数据计算的海量分布式计算方案,必然导致计算速度不是很快,即使在一个规模不太大的数据集上进行一次简单计算,MapReduce 也可能需要几分钟,Spark 快一点,也至少需要数秒的时间。互联网产品处理用户请求,通常需要毫秒级的响应,也就是说,要在 1 秒内完成计算,大数据计算必然不能实现这样的响应要求。但是互联网应用又需要使用大数据,实现统计分析、数据挖掘、关联推荐、用户画像等一系列功能。
如何才能弥补互联网和大数据之间的差异呢?
大数据平台的架构:
数据的采集与导入:
将应用程序产生的数据和日志等同步到大数据系统中,由于数据源不同,这里的数据同步系统实际上是多个相关系统的组合。数据库同步通常用 Sqoop,日志同步可以选择 Flume,打点采集的数据经过格式化转换后通过 Kafka 等消息队列进行传递。
不同的数据源产生的数据质量可能差别很大,数据库中的数据也许可以直接导入大数据系统就可以使用了,而日志和爬虫产生的数据就需要进行大量的清洗、转化处理才能有效使用。
数据库的导入:
数据库批量导入组件 Sqoop:
mySQL 数据库实时导入:
日志导入组件 Flume:
基本架构:
Flume 级联部署:
Flume 分布式集群:
前段买点采集:
网络爬虫收集数据:
数据处理:
这部分是大数据存储与计算的核心,数据同步系统导入的数据存储在 HDFS。MapReduce、Hive、Spark 等计算任务读取 HDFS 上的数据进行计算,再将计算结果写入 HDFS。
MapReduce、Hive、Spark 等进行的计算处理被称作是离线计算,HDFS 存储的数据被称为离线数据。在大数据系统上进行的离线计算通常针对(某一方面的)全体数据,比如针对历史上所有订单进行商品的关联性老掘,这时候数据规模非常大,需要较长的运行时间,这类计算就是离线计算。
除了离线计算,还有一些场景,数据规模也比较大,但是要求处理的时间却比较短。比如淘宝要统计每秒产生的订单数,以便进行监控和宣传。这种场景被称为大数据流式计算,通常用 Storm、Spark Steaming 等流式大数据引擎来完成,可以在秒级甚至毫秒级时间内完成计算。
数据的输出与展示:
大数据计算产生的数据还是写入到 HDFS 中,但应用程序不可能到 HDFS 中读取数据,所以必须要将 HDFS 中的数据导出到数据库中。数据同步导出相对比较容易,计算产生的数据都比较规范,稍作处理就可以用 Sqoop 之类的系统导出到数据库。
这时,应用程序就可以直接访问数据库中的数据,实时展示给用户,比如展示给用户关联推荐的商品。淘宝卖家的量子魔方之类的产品,其数据都来自大数据计算产生。
除了给用户访问提供数据,大数据还需要给运营和决策层提供各种统计报告,这些数据也写入数据库,被相应的后台运营和管理人员访问,查看数据报表,看业务是否正常。
大数据平台 Lanmda 架构原型:
淘宝大数据平台:
淘宝大数据平台导入导出数据:
美团大数据架构:
滴滴大数据平台:
物联网平台:
第二课:
区块链技术的本质:
三个问题:
为什么是比特币造就了区块链技术?
区块链技术用什么办法,解决了什么问题?
区块链技术有什么用?
数字货币的挑战:
数字货币的发行不是问题,问题是如何保证数字货币安全,获得信任。
如何相信数字货币是有价值的,即发行安全。
如何相信货币交易是安全的。
比特币的解决方案:
构建一个无中心、去信任的交易系统。
《比特币:一个点对点的电子现金系统》
交易:
记账者可以使用发起者的公钥对签名进行验证保证交易是真正发起者提交的,而不是其他人伪造的交易。
区块链:
将交易放入区块,将区块构成单向链表,即区块链,以避免双花。
工作量证明:
比特币要求计算出来的区块 Hash 值必须具有一定的难度,比如 Hash 值的前几位必须是 0。具体做法是在区块头部引入一个随机数 nonce 值,记账者通过修改这个 nonce 值,不断碰撞计算区块 Hash 值,直到算出的 Hash 值满足难度要求。工作量证明可以极大增加区块链伪造的成本,除非发动 51%攻击。
矿工:
比特币系统为每个计算出区块 Hash 的记账者赠送一定数量的比特币。这个赠送不是交易,而是凭空从系统中产生的,这其实就是比特币的发行机制。当“矿工“们为了争夺比特币,争相加入“挖矿”大军时,比特币区块链就变成一个分布式账本了。矿工为比特币的发行支付了代价,某种程度保证了比特币的价值。
第三课:
区块链:以太坊
以太坊(Ethereum):下一代智能合约和去中心化应用平台
Ethereum(以太坊)是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用。Ethereum 可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理,合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产。
例子:十分钟发行自己的数字货币
contract TokenERC20 {
string public symbol;
uint256 public totalSupply;
mapping (address => uint256) public balanceOf;
function _transfer(address _from, address _to, uint _value) internal {
balanceOf[_from] -=_value;
balanceOf[_to] += _value;
}
}
Facebook 的数字货币 Libra:
Libra 是一种稳定币
Libra 是一种许可型区块链
联盟链技术 HyperLedger:
联盟链技术 Taireum
https:/lgithub.com/taireum/go-taireum
兼容以太坊生态体系,更安全的区块链网络通信协议,更高效的记账共识算法,更易用的运维管理工具
以太坊应用于企业级开发存在的问题:
在准入机制上,使用以太坊构建的区块链网络允许任何节点接入,也意味着区块数据是完全公开的,而大多数企业级的应用场景则要求仅联盟成员接入网络,非成员拒绝入网,并且数据也仅供联盟成员访问,对非联盟成员保密。
在共识算法上,以太坊使用工作量证明(PoW)的方式对区块打包进行算力证明,除非恶意节点获取了以太坊整个网络 51%的计算能力,否则无法篡改伪造区块数据,保证区块数据安全可靠。但是工作量证明需要花费巨大的计算资源进行算力证明,造成算力极大浪费,也影响了区块链的交易吞吐能力。联盟链场景下,由于各个参与节点是经过联盟认证的,背后有实体组织背书,所以在区块打包的时候不需要进行工作量证明,大大减少算力浪费,提高交易吞吐能力。
在区块链运维管理上,以太坊作为公有链,节点之间通过 P2P 协议自动组网,无需运维管理。而联盟链需要对联盟成员进行管理,对哪些节点可被授权打包区块也需要进行管理,以保证联盟链的有效运行。
Taireum 技术架构:
Taireum 复用了以太坊的智能合约模块,并对共识算法和网络通信模块进行了重构改造,重新开发了联盟共识控制台,从而使其适用于企业级联盟链应用场景。
Taireum 俩门共识控制台:
联盟共识控制台是 Taireum 为联盟链运维管理开发的 web 组件,企业可以使用联盟共识控制台方便地部署联盟链运行节点,管理联盟成员和授权节点打包区块。每个参与联盟链的企业节点都部署自己独立的联盟共识控制台,出于安全目的,每个企业节点的联盟共识控制台彼此独立,互不感知,他们通过调用联盟共识智能合约对联盟管理事务进行协商,以达成共识。
联盟共识智能合约是 Taireum 联盟链的宪法:
联盟链创立者节点的联盟共识控制台第一次部署成功联盟共识智能合约的时候,将该合约的地址发给共识算法模块,共识算法在封装区块头的时候将合约地址写入区块头的 miner 中。
即使联盟成员节点部署的联盟控制台彼此独立互不通信,只需要获得区块链,就能得到联盟共识智能合约地址。
Taireum 区块头:
miner:记录联盟共识智能合约地址。
extraData:记录经过椭圆曲线加密的区块打包者地址信息,其他节点通过解密得到打包节点地址并验证该地址是否有权限打包节点。
nonce:记录一个 magic code "fxcafffffff,表示该区块获得了共识合约地址并写入当前区块(其他区块 nonce magic code 为"000fffffffff )。
Difficulty:当前打包者是否为合法顺序打包者。
Taireum 联盟新成员许可入网:
Taireum 重构了以太坊的 P2P 通信模块,只有在许可列表中的节点才允许和当前联盟成员节点建立连接,其他的连接请求在通信层就会拒绝,保证联盟链的安全和私密性。许可列表即 Taireum 成员列表,通过前述的联盟共识智能合约管理。P2P 通信模块通过联盟共识控制台调用智能合约,获得联盟成员列表,检查连接请求是否合法。
Taireum 联盟新成员许可入网流程∶
新成员下载 Taireum,启动联盟共识控制台,然后在联盟共识控制台启动 Taireum 节点,获得节点 enode url。
将 enode url 及其他公司信息提交给当前联盟链某个成员,该成员通过联盟共识智能合约发起新成员入网申请。
联盟其他成员通过智能合约对新成员入网申请进行投票,得票数符合约定后,新成员信息被记入成员列表。
新成员节点通过网络连接当前联盟链成员节点,当前成员节点 P2P 通信模块读取智能合约成员列表信息,检查新成员节点 enode url 在成员列表中,同意建立连接,新成员节点开始下载区块数据。
Taireum 记账共识算法 TCE:
Tce 共识算法引擎,对联盟投票选出的授权打包节点排序,轮流进行区块打包
联盟成员通过联盟共识智能合约投票选举授权打包区块的节点(在合约创建的时候,创建者,即联盟链创始人默认拥有打包区块的权限)
Tce 共识算法通过联盟共识控制台访问智能合约,获得授权打包区块的节点地址列表,并排序。
检查父区块头的 extraData,解密取出父区块的打包者签名,查看该签名是否在授权打包节点地址列表里,如果不在就返回错误。
根据当前区块的块高(block number ),对授权打包区块的节点地址列表长度取模,根据余数决定对当前区块进行打包的节点,如果为当前节点,就进行区块打包,并把区块头难度系数设为 2,如果非当前节点,随机等待一段时间后打包区块,并把区块头难度系数设为 1。尽量使当前节点打包的区块被加入区块链,同时又保证当前打包节点失效的情况下,其他节点也会完成区块打包的工作。
Taireum 在 P2P 资产共享联盟中的应用探索:
Taireum 区块链再酒店班车的应用探索:
Taireum 区块链再酒店分销平台的应用设想:
第四课:
创新案例分享:
https://github.com/itisaid/sokeeper
Web 应用
https://github.com/itisaid/cmdb
爬虫、倒排索引构建
https:/lgithub.com/zhihuili/robot
https://github.com/hankcs/HanLP
第五课:
学习成果自测,见课件
版权声明: 本文为 InfoQ 作者【Airs】的原创文章。
原文链接:【http://xie.infoq.cn/article/1af58787050212e02aa1c2a18】。未经作者许可,禁止转载。
评论