从0开始学大数据
李智慧
同程艺龙交通首席架构师,前Intel大数据架构师,《大型网站技术架构》作者
立即订阅
14333 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么说每个软件工程师都应该懂大数据技术?
免费
预习模块 (3讲)
预习 01 | 大数据技术发展史:大数据的前世今生
预习 02 | 大数据应用发展史:从搜索引擎到人工智能
预习 03 | 大数据应用领域:数据驱动一切
模块一 Hadoop大数据原理与架构 (7讲)
04 | 移动计算比移动数据更划算
05 | 从RAID看垂直伸缩到水平伸缩的演化
06 | 新技术层出不穷,HDFS依然是存储的王者
07 | 为什么说MapReduce既是编程模型又是计算框架?
08 | MapReduce如何让数据完成一次旅行?
09 | 为什么我们管Yarn叫作资源调度框架?
10 | 模块答疑:我们能从Hadoop学到什么?
模块二 大数据生态体系主要产品原理与架构 (7讲)
11 | Hive是如何让MapReduce实现SQL操作的?
12 | 我们并没有觉得MapReduce速度慢,直到Spark出现
13 | 同样的本质,为何Spark可以更高效?
14 | BigTable的开源实现:HBase
15 | 流式计算的代表:Storm、Flink、Spark Streaming
16 | ZooKeeper是如何保证数据一致性的?
17 | 模块答疑:这么多技术,到底都能用在什么场景里?
模块三 大数据开发实践 (8讲)
18 | 如何自己开发一个大数据SQL引擎?
19 | Spark的性能优化案例分析(上)
20 | Spark的性能优化案例分析(下)
21 | 从阿里内部产品看海量数据处理系统的设计(上):Doris的立项
22 | 从阿里内部产品看海量数据处理系统的设计(下):架构与创新
23 | 大数据基准测试可以带来什么好处?
24 | 从大数据性能测试工具Dew看如何快速开发大数据系统
25 | 模块答疑:我能从大厂的大数据开发实践中学到什么?
模块四 大数据平台与系统集成 (6讲)
26 | 互联网产品 + 大数据产品 = 大数据平台
27 | 大数据从哪里来?
28 | 知名大厂如何搭建大数据平台?
29 | 盘点可供中小企业参考的商业大数据平台
30 | 当大数据遇上物联网
31 | 模块答疑:为什么大数据平台至关重要?
模块五 大数据分析与运营 (5讲)
32 | 互联网运营数据指标与可视化监控
33 | 一个电商网站订单下降的数据分析案例
34 | A/B测试与灰度发布必知必会
35 | 如何利用大数据成为“增长黑客”?
36 | 模块答疑:为什么说数据驱动运营?
模块六 大数据算法 (6讲)
37 | 如何对数据进行分类和预测?
38 | 如何发掘数据之间的关系?
39 | 如何预测用户的喜好?
40 | 机器学习的数学原理是什么?
41 | 从感知机到神经网络算法
42 | 模块答疑:软件工程师如何进入人工智能领域?
智慧写给你的寄语 (1讲)
所有的不确定都是机会——智慧写给你的新年寄语
结束语 (2讲)
结束语 | 未来的你,有无限可能
第2季回归丨大数据之后,让我们回归后端
从0开始学大数据
登录|注册

04 | 移动计算比移动数据更划算

李智慧 2018-11-06
大数据技术和传统的软件开发技术在架构思路上有很大不同,大数据技术更为关注数据,所以相关的架构设计也围绕数据展开,如何存储、计算、传输大规模的数据是要考虑的核心要素。
传统的软件计算处理模型,都是“输入 -> 计算 -> 输出”模型。也就是说,一个程序给它传入一些数据也好,它自己从某个地方读取一些数据也好,总是先有一些输入数据,然后对这些数据进行计算处理,最后得到输出结果。
但是在互联网大数据时代,需要计算处理的数据量急速膨胀。一来是因为互联网用户数远远超过传统企业的用户,相应产生了更大量的数据;二来很多以往被忽视的数据重新被发掘利用,比如用户在一个页面的停留时长、鼠标在屏幕移动的轨迹都会被记录下来进行分析。在稍微大一点的互联网企业,需要计算处理的数据量常常以 PB 计(1015Byte)。
正因为如此,传统的计算处理模型不能适用于大数据时代的计算要求。你能想象一个程序读取 PB 级的数据进行计算是怎样一个场景吗?一个程序所能调度的网络带宽(通常数百 MB)、内存容量(通常几十 GB )、磁盘大小(通常数 TB)、CPU 运算速度是不可能满足这种计算要求的。
那么如何解决 PB 级数据进行计算的问题呢?
这个问题的解决思路其实跟大型网站的分布式架构思路是一样的,采用分布式集群的解决方案,用数千台甚至上万台计算机构建一个大数据计算处理集群,利用更多的网络带宽、内存空间、磁盘容量、CPU 核心数去进行计算处理。关于分布式架构,你可以参考我写的《大型网站技术架构:核心原理与案例分析》这本书,但是大数据计算处理的场景跟网站的实时请求处理场景又有很大不同。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《从0开始学大数据》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(74)

  • ASCE1885
    无状态服务的主要好处是服务间无需同步状态或者数据,便于扩缩容。

    作者回复: 是的

    2018-11-06
    65
  • 不求
    针对于思考题的一些思考:
    分布式架构的原则:尽量使用无状态的服务,不同服务实例之间不共享状态,也就是不持有数据。。。

    这个问题我是这样考虑的,什么是无状态的服务?为什么需要它?它是在怎样的情况下出现的?

    这个应该是分布式架构的设计者在考虑架构的可扩展行(伸缩性)的时候设计出来的这样一个针对于服务的一个要求或者是标准(也就是原则);

    所以我想说,这个问题太“应试”了,就像您的课程一样,之前都是顺着从无到有的一个顺序给我们讲解,我听的很爽,真的是爽,突然来了一个这样的反逻辑的“应试”问题,我有点懵。

    再多说一点,好像国内的教育太“应试”的原因也有是过于拆解概念,然后对概念进行逻辑行考核验证;所以我们上学时都挺会考试的,都在应付这个逻辑,而忽略了真正的学识,一个从无到有的东西,它是如何被创造出来的,它为什么会被创造出来,它还有没有改善的余地。也是“应试”环境下的学生创造力越来越差的原因吧,更多的花费在了逻辑推理上。

    老师,若有冒昧,还请批评指正,感谢🙏

    作者回复: 思考深入👍🏻

    2018-11-07
    26
  • jon
    移动数据的成本高且一台机器负载不了,所以用计算找数据的方式,让数据平均分布在集群中,把软件包发生到各台机器上并行对相对较小的数据计算,计算结果再合并起来。
    无状态的原因是程序包可以负载均衡的分发到任何最优的节点进行计算,计算时宕机了也可以在另一台创新计算,各个节点都是一样的环境
    2018-11-06
    12
  • 高国君
    互联网使用无状态服务的原则,主要目的是为了实现服务的低耦合高内聚的目标。一旦低耦合高内聚,服务就可以动态伸缩(放/换哪个机器上都可以运行),同时,也引申出另外一个要求:如何实现服务的发现、编排、调度?这就涉及一些微服务框架了。
    对于大数据,如果不是无状态服务,那弹出一个服务,还要调它依赖的服务,那么这个处理过程,会有非常多非必要的开销,也有非常多的隐患。譬如,被调用的服务怎么保证面对大量请求时的处理性能和可用性?所以,大数据的计算或存储,必须用一个无状态服务。
    对于它的处理逻辑:就是先把计算模型先设计好,之后,在先抓数据源,并分片后处理成任务。任务调用计算模型,生成计算结果。这样,任务分片后,被放入了一个分布式环境中执行,就实现了分布式计算。
    2018-11-15
    10
  • 陈柏林
    每台服务器原本都不带有程序,但是调度服务器为处理服务器分发任务之后,处理服务器就执行任务并检查是否有该程序,没有就下载,下载之后从指定路径中读取数据进行处理,处理好之后统一存放处理结果,大概的执行流程是这样吗?

    作者回复: 是的

    2018-11-07
    4
  • 没有枫树的枫林
    有点抽象,能举例子说明一下什么是无状态的什么是有状态的吗?移动计算不就是那个节点都进行相同的计算吗?是说计算过程需要依赖其他节点的数据叫有状态?

    作者回复: 大数据的分布式都是有状态的,这个无状态是网站架构里的无状态应用,抱歉思考题跳跃有点大。

    关于无状态应用可以参考我的《大型网站技术架构》这本书

    2018-11-07
    3
  • 五岳寻仙
    刚接触这个领域,认知还比较浅显。我觉得成千上万的机器之间通信会很耗费时间,无状态能保证减少机器之间的耦合,提高效率。

    作者回复: 即使有状态的服务器,也尽量做到share nothing,尽少通信,不然n对n通信,通信量巨大

    2018-11-06
    3
  • 苏锐 | JuiceFS
    在 hadoop 提出的年代是百兆网卡为主,所以搬数据会出现网络带宽的瓶颈。今天,万兆网卡已经成为标配,data locality 已经没那么重要了吧,请教李老师。同时,下发计算,scale-out 的能力会受 data node 数量的限制,Facebook 等厂商开始实践存储与计算分离的架构,计算资源更容易在大任务执行时去临时扩展。希望和李老师探讨
    2018-11-13
    1
    2
  • 老男孩
    期待后面的文章。无状态的服务是内聚的低耦合的,同一个用户的请求可以被分发到不同服务节点上进行处理。伸缩自如。

    作者回复: 是的

    2018-11-06
    2
  • 公号-代码荣耀
    无状态服务有利于提升分布式系统的可伸缩性。

    作者回复: 是的

    2018-11-06
    2
  • 丶请叫我七七丿。
    大数据引擎根据集群里不同服务器的计算能力,在每台服务器上启动若干分布式任务执行进程,这些进程会等待给它们分配执行任务....
    请问:分布式任务执行程序是指什么?

    作者回复: 继续学习,会有答案~

    2019-01-08
    1
  • 贝特
    无状态,主要是为了可靠性和扩缩容。
    可靠性体现在如果集群中单个节点故障后,其他节点能无缝接管比此节点的数据,而不需要实时做同步。
    扩缩容和可靠性类似,单节点坏掉就是缩容的一个特殊场景,扩容体现在增加节点后也不需要做状态和数据同步。

    作者回复: 是的

    2018-11-11
    1
  • cellardoor
    无状态的好处:
    1,伸缩性更好,应用之间无需同步状态,方便伸缩。
    2,幂等,应用服务器之间都是对等的,请求落在哪里都可以得到相同的响应。
    3,可用性更好,有状态,意味着有数据丢失的可能,在某些情况下,状态不一致容易造成可怕的结果。
    4,性能好,应用服务器之间无需同步,减少对资源的浪费;

    作者回复: 赞

    关于2幂等,应用服务器无状态,但是应用服务器依赖的数据库或者其他服务器可能有状态,无状态的应用服务器也无法幂等了。需要看情况。

    2018-11-06
    1
  • yangsanity
    最近在自学一些大数据的组件,有个问题想请问一下老师,在不改写sqoop源码的情况下,有没有什么好的方法避免数据倾斜?
    2018-11-06
    1
  • 公号-代码荣耀
    无状态服务有利于提升分布式系统的可伸缩性。

    作者回复: 是的

    2018-11-06
    1
  • 星辰
    【自问自答】什么是无状态服务?无状态服务的好处是什么?无状态服务有没有缺点?
    2018-11-06
    1
  • John Lau
    無狀態服務可以免除需要同步狀態的情況,系統可以跟據情況把計算自由分發到不同的機器上,而不用考慮同步問題。實現起來也會簡單很多。
    但我有個問題:現實場景就是有很多時候需要有狀態,有沒有系統的思考方法,把需要狀態的工作方式,改寫成不需要狀態的工作方式?

    作者回复: 状态委托给其他服务器,缓存或者数据库。
    有状态是逻辑需要,可以委托出去,但是很难不要状态。

    2018-11-06
    1
  • 摘星星种星星
    不同服务实例处理结果必须一致,不然用户请求买个A商品,结果一号服务给他买了A商品,二号服务给他买了B商品,谁都得崩溃。
    无状态可能是指,例如:用户请求购买一件商品,服务实例只关注自己所需处理的信息,处理完成就继续下一笔,不记录用户状态,用户权限验证,交易成功或者异常等情况,交给专门处理这些任务的服务。
    2019-11-21
  • xiong
    无状态的服务,更容易支持并发or 并行,也就更容易水平扩容,提高服务整体的吞吐量。
    2019-11-12
  • dany
    你这哪里是从0开始啊,没有头绪啊
    2019-10-30
收起评论
74
返回
顶部