深入浅出计算机组成原理
徐文浩
bothub创始人
立即订阅
13019 人已学习
课程目录
已完结 62 讲
0/4登录后,你可以任选4讲全文学习。
入门篇 (5讲)
开篇词 | 为什么你需要学习计算机组成原理?
免费
01 | 冯·诺依曼体系结构:计算机组成的金字塔
02 | 给你一张知识地图,计算机组成原理应该这么学
03 | 通过你的CPU主频,我们来谈谈“性能”究竟是什么?
04 | 穿越功耗墙,我们该从哪些方面提升“性能”?
原理篇:指令和运算 (12讲)
05 | 计算机指令:让我们试试用纸带编程
06 | 指令跳转:原来if...else就是goto
07 | 函数调用:为什么会发生stack overflow?
08 | ELF和静态链接:为什么程序无法同时在Linux和Windows下运行?
09 | 程序装载:“640K内存”真的不够用么?
10 | 动态链接:程序内部的“共享单车”
11 | 二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?
12 | 理解电路:从电报机到门电路,我们如何做到“千里传信”?
13 | 加法器:如何像搭乐高一样搭电路(上)?
14 | 乘法器:如何像搭乐高一样搭电路(下)?
15 | 浮点数和定点数(上):怎么用有限的Bit表示尽可能多的信息?
16 | 浮点数和定点数(下):深入理解浮点数到底有什么用?
原理篇:处理器 (18讲)
17 | 建立数据通路(上):指令+运算=CPU
18 | 建立数据通路(中):指令+运算=CPU
19 | 建立数据通路(下):指令+运算=CPU
20 | 面向流水线的指令设计(上):一心多用的现代CPU
21 | 面向流水线的指令设计(下):奔腾4是怎么失败的?
22 | 冒险和预测(一):hazard是“危”也是“机”
23 | 冒险和预测(二):流水线里的接力赛
24 | 冒险和预测(三):CPU里的“线程池”
25 | 冒险和预测(四):今天下雨了,明天还会下雨么?
26 | Superscalar和VLIW:如何让CPU的吞吐率超过1?
27 | SIMD:如何加速矩阵乘法?
28 | 异常和中断:程序出错了怎么办?
29 | CISC和RISC:为什么手机芯片都是ARM?
30 | GPU(上):为什么玩游戏需要使用GPU?
31 | GPU(下):为什么深度学习需要使用GPU?
32 | FPGA和ASIC:计算机体系结构的黄金时代
33 | 解读TPU:设计和拆解一块ASIC芯片
34 | 理解虚拟机:你在云上拿到的计算机是什么样的?
原理篇:存储与I/O系统 (17讲)
35 | 存储器层次结构全景:数据存储的大金字塔长什么样?
36 | 局部性原理:数据库性能跟不上,加个缓存就好了?
37 | 高速缓存(上):“4毫秒”究竟值多少钱?
38 | 高速缓存(下):你确定你的数据更新了么?
39 | MESI协议:如何让多核CPU的高速缓存保持一致?
40 | 理解内存(上):虚拟内存和内存保护是什么?
41 | 理解内存(下):解析TLB和内存保护
42 | 总线:计算机内部的高速公路
43 | 输入输出设备:我们并不是只能用灯泡显示“0”和“1”
44 | 理解IO_WAIT:I/O性能到底是怎么回事儿?
45 | 机械硬盘:Google早期用过的“黑科技”
46 | SSD硬盘(上):如何完成性能优化的KPI?
47 | SSD硬盘(下):如何完成性能优化的KPI?
48 | DMA:为什么Kafka这么快?
49 | 数据完整性(上):硬件坏了怎么办?
50 | 数据完整性(下):如何还原犯罪现场?
51 | 分布式计算:如果所有人的大脑都联网会怎样?
应用篇 (5讲)
52 | 设计大型DMP系统(上):MongoDB并不是什么灵丹妙药
53 | 设计大型DMP系统(下):SSD拯救了所有的DBA
54 | 理解Disruptor(上):带你体会CPU高速缓存的风驰电掣
55 | 理解Disruptor(下):不需要换挡和踩刹车的CPU,有多快?
结束语 | 知也无涯,愿你也享受发现的乐趣
免费
答疑与加餐 (5讲)
特别加餐 | 我在2019年F8大会的两日见闻录
FAQ第一期 | 学与不学,知识就在那里,不如就先学好了
用户故事 | 赵文海:怕什么真理无穷,进一寸有一寸的欢喜
FAQ第二期 | 世界上第一个编程语言是怎么来的?
特别加餐 | 我的一天怎么过?
深入浅出计算机组成原理
登录|注册

52 | 设计大型DMP系统(上):MongoDB并不是什么灵丹妙药

徐文浩 2019-09-02
如果你一讲一讲跟到现在,那首先要恭喜你,马上就看到胜利的曙光了。过去的 50 多讲里,我把计算机组成原理中的各个知识点,一点一点和你拆解了。对于其中的很多知识点,我也给了相应的代码示例和实际的应用案例。
不过呢,相信你和我一样,觉得只了解这样一个个零散的知识点和案例还不过瘾。那么从今天开始,我们就进入应用篇。我会通过两个应用系统的案例,串联起计算机组成原理的两大块知识点,一个是我们的整个存储器系统,另一个自然是我们的 CPU 和指令系统了。
我们今天就先从搭建一个大型的 DMP 系统开始,利用组成原理里面学到的存储器知识,来做选型判断,从而更深入地理解计算机组成原理。

DMP:数据管理平台

我们先来看一下什么是 DMP 系统。DMP 系统的全称叫作数据管理平台(Data Management Platform),目前广泛应用在互联网的广告定向(Ad Targeting)、个性化推荐(Recommendation)这些领域。
通常来说,DMP 系统会通过处理海量的互联网访问数据以及机器学习算法,给一个用户标注上各种各样的标签。然后,在我们做个性化推荐和广告投放的时候,再利用这些这些标签,去做实际的广告排序、推荐等工作。无论是 Google 的搜索广告、淘宝里千人千面的商品信息,还是抖音里面的信息流推荐,背后都会有一个 DMP 系统。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入浅出计算机组成原理》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(12)

  • 胖头小C
    SSD硬盘好处是读写更快,但是使用寿命不长,在Kafka经常擦除情况下,机械盘更耐用,经济,而且是顺序读写,机械盘也是很快的,综合还是机械盘更好

    作者回复: 👍

    2019-09-02
    13
  • 随心而至
    1.重视底层知识,核心知识,万丈高楼平地起。
    2.使用场景。没有一招鲜,吃遍天的技术。
    3.要有量级的概念。kv数据库,数据管道,数据仓库,就根本不是一个量级的事情,每个量级都应该有自己的最优方案。

    刚工作一年多一点,不对之处请老师指出
    2019-10-24
    3
  • 逍遥法外
    看的真过瘾
    2019-09-02
    3
  • leslie
    以下是个人对此的理解:希望老师可以在下节课把这节课的答案公布。
    分成两部分分别阐述个人对此的理解
    一.机械硬盘
    机械硬盘的好处是寿命:不过机械硬盘的问题在于速度,不同的机械硬盘有不一样的特性,即使用机械硬盘也要选择缓存偏大且读性能较好的蓝盘。由于kafka是充分利用缓存,毕竟kafka只是消息队列-只是中间件,我们不可能把数据放在kafka中,还是会使用的NOSQL数据库,故而其实际需求是对读性能要求较高的存储设备。
    二.SSD
    SSD读写性能比其实是相对固定的:无论是哪个厂商,其实最终发现这是一个定值;有能力其实SSD确实是一个不错的选择。不过我们在讨论SSD的寿命时其实忽略了一个问题,什么操作影响SSD的寿命?SSD存在的硬件条件和场景是什么?
    1.SSD的寿命问题:其实这个问题就像早期说液晶屏一样,额定寿命大概是3年左右,其实大多数实际情况都在5年左右;真正影响SSD寿命的不是读,而是写,这个问题其实机械硬盘同样有。
    2.SSD存在的硬件条件是什么:服务器、PC;现在一台PC或者服务器基本上5-6年就各种硬件出现问题,SSD如果使用场景和HDD类似其实寿命是几乎一样的;我们不太可能在服务器都出问题的情况下还去使用使用吧。我自己笔记本电脑是单双硬盘:不过由于市场提供的尺寸不一样,大小略有区别,使用场景几乎完全一样,都各自有一个300G的空间跑虚机做测试,目前已经使用了4年多了,性能和4年前没区别,唯一的区别是当时HDD的代价是SSD的一半左右;现实中服务器的使用也就不超过5-6年,此时其实主板、电源、CPU的散热系统已经基本出问题且厂家和市场都没有相应可换的硬件配件了。
    综上所述:故而个人觉得Kafka场景其实资金允许的情况下还是SSD,因为它的坏处其实传统硬盘同样有,这是我们不能回避HDD的硬件问题去说SSD的问题。即使使用HDD其实我们还是要选取读性能强于写性能且缓存偏大的硬盘,况且其实SSD的读写速度方面同样是读方面更好。严重写>读的场景下其实HDD的损坏速度同样非常快,只不过硬件代价低一些而已,但是耗时同样高许多。
          期待老师的下节课:谢谢老师的教诲。

    作者回复: 小小的一个纠错,从原理的角度,HDD并不存在反复读写会导致寿命的问题。

    不过在实际使用中,其实HDD的损坏率也并不低,而且损坏出现的情况随机性比较大。

    实战中核心考虑的因素其实是成本,需要根据实际的应用场景,核算一下总体的成本。而且需要考虑到对应配置了CPU,比如用PCI-E接口,SSD硬盘的顺序读写能到2Gb/s,但是总的带宽有限可能又装不了10块盘。然后CPU和内存在单个机器中的价格占比也需要考虑,最后会是一个总和硬件拥有和维护成本的评估。这个问题并没有一个标准答案。

    2019-09-04
    1
  • 许童童
    我觉得没有必要使用SSD,Kafka主要利用PageCache来提高系统写入的性能,而且Kafka对磁盘大多是顺序读写,在磁盘上提高IOPS,并不能显著的提升Kafka的性能。

    作者回复: 👍的确Kafka用SSD的必要性不大。

    2019-09-02
    1
  • 阿卡牛
    满满的干货,我先干为敬
    2019-09-02
    1
  • webmin
    Kafka使用SSD硬盘:
    好处:
    Kafka是顺序追加写,比较适合SSD硬盘的特性;
    坏处:
    Kafka的落盘数据类似于日志,顺序追加写SSD比机械硬盘没有太多的优势,再者擦写太频繁SSD硬盘有擦写寿命,使用SSD的性价比不如机械硬盘。

    作者回复: 👍 优缺点找的很对,最后的选择我们一般会从综合成本来考虑。

    2019-09-02
    1
    1
  • 刘冲
    数据仓库可以用elasticsearch
    2019-11-22
  • David Xing
    👍
    2019-10-16
  • 活的潇洒
    工作中一直在用MongoDB但是并没有想过它不适合那些场景、今天老师从底层原理给我们刨析了个究竟

    day52 笔记:https://www.cnblogs.com/luoahong/p/11510567.html
    2019-09-15
  • 吴宇晨
    成本的问题ssd顺序读速度能更快,但是价格贵了很多,还有大概kafka主要读写是利用pagecache

    作者回复: 👍其实机器数量一上来,成本就成为架构设计的最重要的考虑因素之一了。

    2019-09-02
  • 鱼向北游
    不差钱可以用ssd呀 ssd的顺序写速度更快
    但是 kafka这种应该会频繁擦写 ssd的寿命扛不住
    对于存档 hdd普遍容量大 存档成本低 组raid价格也便宜
    对于和ssd顺序读写的性能差距 可以用扩大partition数量来做些弥补
    怎么感觉说到底最后是钱的问题呢

    作者回复: 👍哈哈,你抓到关键了。

    这个还真是钱的问题,从2019年的应用场景来看,SSD的确还没有太大必要。从数据量的角度,搞很多块HDD已经可以满足目前的高并发的需求了,从成本上和使用寿命也比SSD更划算了。

    但是SSD和几年前比已经便宜了很多了,而且在PCI-E接口普及的情况下,顺序读写速度比起HDD也能拉开差距了,所以逐步我们也看到业界开始直接用SSD来部署Kafka也变得比较常见了。

    2019-09-02
收起评论
12
返回
顶部