SRE如何实施数据处理流水线
读书笔记(SRE:Google运维解密):第25章 数据处理流水线release/blogv2/dist/pc/img/original.png github_37320188 2020-11-14 13:46:05 release/blogv2/dist/pc/img/articleReadEyes.png 11 release/blogv2/dist/pc/img/tobarCollect.png 收藏
分类专栏: 读书笔记(SRE:Google运维解密) 文章标签: 运维
版权
[*]经典的数据处理方式是通过一个程序读取输入,执行某种模式变换,然后输出新的数据。一般来说,这种程序由类似于Cron的某个周期性的调度程序控制。这种设计模式被称为数据流水线(data pipeline)。经典的数据处理方式是通过一个程序读取输入,执行某种模式变换,然后输出新的数据。一般来说,这种程序由类似于Cron的某个周期性的调度程序控制。这种设计模式被称为数据流水线(data pipeline)。
[*]简单流水线设计模式与大数据
[*]对大数据进行周期性的或者是持续性的变形操作的程序通常被称为“简单的,单相流水线”(simple,one-phasepipeline)
[*]由于大数据与生俱来的海量级别和处理的高复杂度,这种程序通常会被串联起来执行,一个程序的输出作为另外一个程序的输入。这种编排方式有很多种原因,但是最常见的原因是,这样设计有助于理解系统的逻辑,但是这在系统效率方面并不一定是最优方案。将这样构建的程序称为多相流水线(multiphase pipeline),因为整个链条中的每一个程序都是一个独立的数据处理单元。
[*]周期性的数据流水线非常实用,例如MapReduce和Flume
周期性的数据流水线模型是非常脆弱易坏的。工作进程数量、运行周期、分块处理技术,以及其他参数仔细调校过后,整个流水线的性能可能很稳定。但是随着数据量的自然增长等种种变化会对整个系统造成压力,导致各种各样的问题出现。这种问题包括任务运行超时、资源耗尽,某些分块处理卡住导致整体运维压力上升等。
[*]完成整个流水线要依赖于整个流水线中性能最差的分块的完成。
这一块印象深刻,类比编译器编译语言脚本时,扫描脚本之后,构建执行树。执行树中有各种操作,有单线程或多线程,有线程池构成执行多个分块任务等等。假定是在并发线程池任务结束之后程序脚本执行完成,那么执行时间最长的分片任务就决定了程序脚本执行何时结束。
[*]分布式环境中周期性数据流水线的缺点:
[*]惊群效应
[*]摩尔负载模式:指两个或者更多的流水线任务同时运行时,某些执行过程重叠,导致它们同时消耗某个共享资源。
对于一个每天运行一次的流水线来说,几个小时的启动延迟可能是可以接受的。但是随着执行频率的增高,每次执行之间的最小时间很快会与平均启动延迟持平,这就使得周期性数据流水线的执行延迟有了一个下限。超过这个阈值继续减少任务执行的间隔周期只会造成更多的问题而不能让任务执行得更快。实际造成的问题和所使用的批处理调度策略有关。例如,新的执行可能会在集群调度器上累积,因为前一次运行还没有结束。更糟糕的是,正在执行的、马上就要结束的运行可能会由于下一次执行马上就要开始而被杀掉,加速运行的操作反而会造成整个流水线完全停滞。
页:
[1]