写点什么

架构师训练营 1 期 - 第 十四周总结(vaik)

用户头像
行之
关注
发布于: 2021 年 01 月 08 日
架构师训练营 1 期 - 第 十四周总结(vaik)

本周概要

首先介绍了大数据平台架构:从大数据应用的挑战到大数据平台架构如何落地,从数据采集,到数据处理,再到处理结果展示整个过程中的技术实现与要点说明,介绍了淘宝,美团,滴滴的大数据平台架构。

第二部分重点讲解了区块链技术,区块链的本质,技术解决哪些问题,以及区块链的发展。

大数据平台架构

大数据技术应用的挑战

海量数据处理,必然导致计算速度不是很快,即使规模不大的数据集进一行一次简单的计算,MapReduce 也可能需要几分钟,Spark 快些,也至少需要数据秒时间,而现在的互联网应用一般都需要毫秒级至少 1 秒内响应,对大数据技术应用来说,这是一个挑战。

大数据平台架构折分

一般大数据平台架构拆分三个阶段

  • 数据采集

  • 数据处理

  • 数据输出或展示

数据采集与导入

要将应用程序的数据或日志同步到大数据系统中,根据数据源来采用不同的导入系统,数据库导入一般用 Sqoop,日志同步使用 Flume,打点采集的数据经过格式转换后通过 Kafka 等消息队列进行传递,像日志,爬虫产生的数据需要进行大量的清洗,转化处理才能导入到大数据系统并有效使用。

  • Sqoop 导入导出数据库数据

  • Canal 实时导入 MySQL 数据

  • Flume 从日志导入数据

  • Flume 级联部署

  • Flume 分布式部署

  • 前端埋点采集数据

  • 网络爬虫收集外部数据

数据处理

数据处理是大数据存储与计算的核心,数据同步系统导入的数据存储在 HDFS.MapReduce,Hive,Spark 等计算任务读取 HDFS 上的数据进行计算,再将计算结果写入 HDFS。

MapReduce,Hive,Spark 等进行的计算处理被称作离线计算,HDFS 存储的数据称为离线数据。

除了离线计算,还有一些场景,数据规模比较大,但要求处理的时间却比较短。这种场景称为大数据流式计算,通常用 Strom,Spark Steaming 等流式大数据引擎来完成,可以秒级甚至毫秒级时间内计算完成。

数据输出与展示

大数据处理完成后,可以通过 Sqoop 这样的工具将数据导到应用系统的数据库,以便展示计算统计的结果,分析数据。

大数据平台 Lamda 架构原型

淘宝大数据平台

淘宝大数据平台导出数据

美团大数据平台

滴滴实时大数据平台

物联网大数据平台


区块链技术

区块链技术的本质

  1. 为什么比特币造就了区块链技术?

  2. 区块链技术用了什么办法,解决了什么问题?

  3. 区块链技术有什么用?

比特币
  • 构建一个无中心、去信任的交易系统

  • 《比特币:一个点对点的电子现金系统》

交易

记账者可以使用发起者的公钥对签名进行验证,保证交易是真正发起者提交的,而不是其他人伪造的交易。

区块链

将交易放入区块,将区块构成单向链表,即区块链,以避免双花。

工作量证明

比特币要求计算出来的区块 Hash 值必须具有一定的难度,比如 Hash 值的前几位必须

是 0。具体做法是在区块头部引入一个随机数 nonce 值,记账者通过修改这个 nonce 值,

不断碰撞计算区块 Hash 值,直到算出的 Hash 值满足难度要求。

工作量证明可以极大增加区块链伪造的成本,除非发动 51%攻击

矿工

比特币系统为每个计算出区块 Hash 的记账者赠送一定数量的比特币。这个赠送不是交

易,而是凭空从系统中产生的,这其实就是比特币的发行机制。

当“矿工们”为了争夺比特币,争相加入“挖矿”大军时,比特币区块链就变成一个分

布式账本了。

矿工为比特币的发行支付了代价,某种程度保证了比特币的价值

以太坊(Ethereum)

下一代智能合约和去中心化应用平台

Ethereum(以太坊)是一个平台和一种编程语言,使开发人员能够建立和发布下一代分

布式应用。Ethereum 可以用来编程,分散,担保和交易任何事物:投票,域名,金融交

易所,众筹,公司管理,合同和大部分的协议,知识产权,还有得益于硬件集成的智能

资产。

能过以太坊,十分钟发行自己的数字货币

Facebook 的数字货币 Libra

Libra 是一种稳定币

Libra 是一种许可型区块链

联盟链技术 HyperLedger

联盟链技术 Tairuem

https://github.com/taireum/go-taireum

兼容以太坊生态体系

更安全的区块链网络通信协议

更高效的记账共识算法

更易用的运维管理工具

Taireum 重构以太坊
  • 重构了以太坊的 P2P 网络通信模块,使其需要进行安全验证得到联盟许可才能加入新节

  • 点进入当前联盟链网络。

  • 重构了以太坊的共识算法,只有经过联盟成员认证授权的节点才能打包区块,打包节点

  • 按序轮流打包,无需算力证明。

  • 开发了联盟共识控制台 CCC(Consortium Consensus Console),方便对联盟链进行

  • 运维管理,联盟链用户只需要在 Web Console 上就可以安装部署联盟链节点,投票选举

  • 新的联盟成员和区块授权打包节点。

Taireum 技术架构

Taireum 复用了以太坊的智能合约模块,并对共识算法和网络通信模块进行了重构改造,

重新开发了联盟共识控制台,从而使其适用于企业级联盟链应用场景

Taireum 联盟共识控制台

联盟共识控制台是 Taireum 为联盟链运维管理开发的 web 组件,企业可以使用联盟共

识控制台方便地部署联盟链运行节点,管理联盟成员和授权节点打包区块。每个参与联

盟链的企业节点都部署自己独立的联盟共识控制台,出于安全目的,每个企业节点的联

盟共识控制台彼此独立,互不感知,他们通过调用联盟共识智能合约对联盟管理事务进

行协商,以达成共识

联盟共识智能合约是 Taireum 联盟链的宪法

联盟链创立者节点的联盟共识控制台第一次部署成功联盟共识智能合约的时候,将该合

约的地址发给共识算法模块,共识算法在封装区块头的时候将合约地址写入区块头的

miner 中。

即使联盟成员节点部署的联盟控制台彼此独立互不通信,只需要获得区块链,就能得到

联盟共识智能合约地址

Taireum 区块头

miner 中记录联盟共识智能合约地址

extraData 记录经过椭圆曲线加密的区块打包者地址信息,其他节点通过解密得到打包节

点地址并验证该地址是否有权限打包节点。

nonce 记录一个 magic code "0xcaffffffffffffff",表示该区块获得了共识合约地址并写入当

前区块(其他区块 nonce magic code 为 "0x00ffffffffffffff")。

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 资产共享联盟中的应用探索
Tairuem 区块链在酒店班车的应用探索
Tairuem 区块链在酒店分销平台的应用设想

技术创新案例

一个电影搜索引擎案例
  • 倒排索引文件

  • 加权词频排序算法

  • 源码

https://github.com/itisaid/sokeeper Web 应用

https://github.com/itisaid/cmdb 爬虫、倒排索引构建

  • 汉语处理组件包(汉语分词)

https://github.com/hankcs/HanLP

一个智能助理机器人案例

https://github.com/zhihuili/robot



技术专家与管理

成为专家

技术等级体系(金字塔)
德雷福斯模型
德雷福斯模型的启示

一个人不会因为工作经验增加就自动成为专家,只有非常少的人能成为专家专家不一定做得更好,但一定做得更轻松。

大部分人终其一生停留在高级新手阶段,而阻碍他继续发展的一个重要原因就是:他不知道自己是一个高级新手。

如何在工作中成长,成为技术专家

勇于承担责任,在悬崖边思考。

在实践中保持技能,1 万小时定律。

警惕银弹陷阱,关注问题场景。

最重要的是在工作中实践

工作任务要明确,具体产出是什么?结果如何衡量?用 OKR 管理工作目标

工作任务要有适当难度,摘跳起来够得着的苹果。

任务过程中积极接受各种反馈,针对反馈采取行动。

允许自己犯错误。

彼得定律

在一个成熟有效的组织中,当一个员工在其岗位能够出色完成工作,就会得到晋升,被提拔到更高一级职位。如果在这个职位,他能够继续出色完成工作,就会继续得到晋升,直到他晋升到某个职位以后,无法出色完成工作为止。

结论:在一个层级组织中,每个员工都会趋向于晋升到他所不能胜任的职位。

推论:一个成熟的组织中,所有的职位都被不能够胜任它的人承担着。

当一个人位于他不能胜任的职位上时,他必须投入全部的精力才能有效完成工作,这个职位也被称作这个人的彼得高地。一个处于彼得高地的人,精疲力尽于他手头的工作,就无法再进行更进一步的思考和学习,他的个人能力提升和职业进步都将止步于此。

软件开发技术的第一性原理

用第一性原理分析一个新技术的来龙去脉

• 这个技术的核心关键点是什么?要解决的问题是什么?

• 过往有没有类似的技术?核心设计是否相通?

• 这些问题应该使用何种模式解决?

不要去学习软件如何使用,而是去猜测软件如何设计
  • 5 分钟阅读 Hello World 级的文档和 Demo

  • 30 分钟做个 Hello World ,体验一下

  • 2 个小时阅读关键设计文档和代码

  • 如果我来开发这个软件,将如何设计、关键技术点如何处理。

架构师的三板斧

设计文档

没有软件设计文档就没有软件设计

• 让自己停一下,思考下软件的设计,有没有更好的方案。

• 给软件开发的合作者、维护者提供一些必要资料。

UML 软件建模设计

• 部署图 描绘系统整体蓝图

• 组件图 描述系统模块关系

• 类图 关键类的设计和领域模型

• 用例图 功能与场景

• 活动图 泳道图,逻辑与流程

• 时序图 参与对象之间的调用关系

• 状态图 复杂对象的状态变迁

设计模式

低耦合、高内聚

• 是软件设计的核心驱动力和目标

设计原则

• 开闭、依赖倒置、里氏替换、单一职责、接口隔离、最小知识

设计模式

  • 工厂、适配器、策略、观察者、组合、模板方法、装饰

开发框架

  • Spring、Mybatis、反应式

架构模式

分布式架构

• 分布式缓存、消息队列、负载均衡

• 分布式关系数据库、NoSQL、搜索引擎

• 分布式一致性 ZooKeeper

微服务架构

  • 领域驱动设计、服务复用与中台化

  • 微服务框架与 PRC

大数据架构

• 大数据平台架构

• 数据采集与分析

• 数据推荐与智能化

解决问题

问题发现模式

人们经常会把解决方案当作问题的定义,而解决方案往往来自口才最好的那个人(或者最有权威的那个人)。

绝大多数人只知道自己要执行的解决方案,而不知道自己面对的问题是什么。

问题 = 期望 - 体验

处理关系优先于解决问题。太多的问题被人们的适应能力忽略掉了,直到有人解决了这些问题。

问题提出模式

如果某人能够解决问题,而他自己却感受不到问题,那么就让他感受一下。

如果你想解决一个问题,试试『让情况变得更糟』(亡羊补牢)

把『我的问题』表述成『我们的问题』

给上司提封闭式问题,给下属提开放式问题

直言有讳

批评而不是责难,对事不对人。

问题解决模式

你没有解决问题,你只是用另一个问题代替这个问题。

解决问题之前先想想这是谁的问题 ,你要取悦谁。

许多时候你不需要提出解决方案,你只需要提醒问题的存在。

以赞成的方式表示反对。

把『我的问题』变成『你的问题』

把『他的问题』变成『我的问题』

适当的逃避问题(这个 idea 非常好,让我们组织一个会议好好讨论一下)

如果你不填老师想要的答案,你就是个傻瓜(一个管理者想要什么样的下属,就会带出什么样的下属)。

如果明天早上所有困扰你的问题都消失了,你打算干什么?

问题不重要未来才重要

聚焦目标,而不是问题,不是所有问题都需要解决,不是所有问题都要分析清楚才能解决。

关注问题解决后发生什么,不要关注问题是如何发生的。

多问自己:我到底想要什么;少问自己:我究竟有什么问题。

技术管理

交际

创建舒适的工作环境,让员工有更好的积极性、创造性去解决问题


交际的目的不仅仅是对人友好,装出一副好好先生的样子

• 交际建立良好的氛围

• 交际为彼此合作建立容错的空间和缓存的余地

• 处理困难问题的时候,如果必须承受负面的代价,交际关系越好,承受能力越高

• 强大的工作关系是合作和变革的发动机


如何建立强大的工作关系?

  • 积极合作的心态

  • 关注他们的思考讲话方式,用对方舒适的方式沟通

  • 快速简明清晰,让对方认可你的领导力,但是不要刻意展示自己智慧

  • 简单

  • 以对对方有效的方法为基础

  • 承诺,承担自己的责任

  • 放弃做救世主的幻想

  • 合作

  • 慢一点,顺其自然

  • 演变优于剧变


即使说一些无意义的话“天气不错”,也可以营造积极的对话氛围。

赞美:感谢大家准时到场。

谢谢玛丽为我们准备的材料

情景

了解情景:

• 讨论问题之前,先讲讲你自己吧,你在这里多久了?

• 你确切的职责是什么?

• 你的发展路径是什么?

• 你觉得你的优势是什么?

• 可以的话,聊聊你的生活吧

• 你认为问题是什么导致的?

传递一个信息,你关注的不是他的问题,而是他这个人,你尊重并欣赏他。

目标

没有目标,就无法成功

• 公司目标是第一位的,公司目标优于个人目标,对个人有利而对公司不利的目标最后也会事与愿违。

• 如果你想更快升职,就让自己的目标和公司的目标一致。

• 尊重员工的目标,不做伤害员工的事。

• 快乐的员工对公司贡献更多,公司对员工好,员工就对公司好。


给员工设定的目标必须有效

• 目标必须现实可行,不是越多越好,越难越好。

• 具体目标要用可见行为描述,忌模糊不清。要准时 -> 八点开始工作,加班完成这个项目 ->完成这个项目再回家。

• 从小目标开始,努力实现大目标。从容易的事情做起。

(自己的、下属的、部门的、公司的)目标是什么?如何达成目标?什么是实现目标的一小步?

资源

出了问题可能并不是人有问题或者资源不足,可能是方法不对头。

不要回头看问题,往前找方法。

可能并不是资源不足,可能是资源未被合理使用,没有充分挖掘。

人在压力之下,可能会忘记自己知道的事。

评估

完美是一种幻象

• 如果令你满意是 10,你现在处于几?3。你觉得现在的状况和以前有什么不同,哪些改善?还有什么吗?如果想做一些最小的改进,你觉得要做的事情是什么?做到这些事,需要多久?两周。如果做到这些事, 你觉得会处于几?5。约两周以后再次开会。

有效性评估:

• 一个会议进行途中,如果 10 代表达到你的期望,现在是几?如果是 0,如何让会议有用?如果是 3,我们得到了什么?

积极性评估:

• 如果 0 表示没有任何动力做事,10 表示竭尽所能,我们现在是几?

导师

关注未来而不是过去,我们对过去无能为力。

解决方案属于未来。

如果突然出现一个奇迹,你苦恼的问题不见了,你下一步会做什么?

赞美

大多数时候,赞美并不充足

• 不要假装赞美

• 谢谢你昨天的加班,我们如期完成任务

• 谢谢你的建议,我们节约了成本

赞美不是奉承

• 奉承会有反效果,让人们不知道公司的标准和目标是什

赞美与批评并不矛盾


用户头像

行之

关注

还未添加个人签名 2018.09.18 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 1 期 - 第 十四周总结(vaik)