Distributed Systems

1.分布式计算

1.1 分布式计算概念

分布式计算的方法主要包括传统的离线计算、批量计算,还有较新的增量计算和流式计算。离线计算和批量计算侧重于吞吐量,而增量计算和流式计算侧重于实时性。对于物联网等实时性要求较高的行业,增量计算和流式计算有着较大的优势。

1.1.1 分布式计算范式

1.1.1.1 数据收集

数据收集方式包括两种方式。

表示分布式计算集群主动从外部获取数据,比如从Kafka、HBase、HDFS中拉取数据。但是由于分布式计算可能会有回退的情况,需要第三方系统授权回退,比如Kafka的Offset表示消息当前的位置。

表示被动从外部接收数据,需要实现HTTP处理模块。

1.1.1.2 Shuffle机制

Shuffle是任意两节点之间的通信机制,比如把map阶段RDD的数据都抽离出来,然后按照一定规则分发给reduce阶段RDD。Shuffle机制也同样有两种方法,也就是(Pull)和(Push)。顾名思义,拉是下游节点主动拉去上游节点的数据,而推是下游节点被动获取上游节点推送的数据。

1.1.1.3 计算

LongLive

流式计算不同于离线计算,流式计算是一个长进程模式。不同于离线计算的调度方式,不同的消息机制

容错

任务跟踪机制

有状态计算

中间状态的存储方式;容错

分布式挑战

  • 拓展能力
    1. 集群规模的上限是多少,比如最多可以有多少个单集群(利用率也要超过60%)
    2. 计算作业是否可以线性增加
  • 数据倾斜
    1. 用户可以重新定义等价的DAG(DAG全程有向无环图)来避免数据倾斜(牺牲性能),也就是一台设备过慢可能会托慢整个系统的计算
    2. 倾斜带来超时和雪崩,比如节点计算超时,上游节点发送更多的数据到下游造成更加严重的拥塞(所以流控机制非常重要
    3. 数据动态的变化,实时调整
  • 服务化需求
    1. 数据高可靠,数据中间状态的可靠性
    2. 服务可用性,集群扩容、系统代码升级时是否需要停止服务;单节点故障是否会导致整体服务的不可用
  • 通用需求
    1. 多租户管理:鉴权管理,资源隔离
    2. 计量计费、安全体系、运维体系等

增量语义

f(x + delta) = g(f(x),delta)

  • 阿里提出的MRM(Map-Reduce-Merge)

    Map作为Local计算;Reduce作为本批内的Aggregate计算;Merge进行跨批全局聚合操作。

    以WordCount举例,map将单词变成k是单词名,v是1的键值对;Reduce进行求和操作;Merge实现将本次和之前的结果的聚合。

    MRM的M和R兼容传统的Map和Reduce,而Merge实现了将旧的数据和新的数据进行合并。

    void map(BatchInfo batchInfo, Record recore, Emitter<X, Y> emitter){}
    void reduce(X key, List<Y> values, Emitter<Z> emitter){}
    T merge(T oldValue, X key, Z Value, State state, Emitter emitter)()
    

    有状态计算-增量

    加、乘可以实现简单的增量;开方等不可以。可以增量的计算不需要将所有的历史数据都保存,而不可以增量的计算需要保存历史数据。这个时候就需要辅助存储设备,需要考虑到容错、存储等问题。storm和Kinesis系统将状态处理问题抛给了用户(问题是对于用户而言太过复杂),而MillWheel系统则将状态存储在Bigtable(Google技术)中(问题是Bigtable也有吞吐上限)。阿里采用存储与计算合一的方法,

1.1.1.4 Batch

  • Batch是系统跟踪数据和时效性处理的最小单位

  • 一个可以scale的概念,两个极端:

    1. 退化为全量计算
    2. 一条数据处理一次

1.1.1.5 消息机制

  • 消息丢失问题

    1. 消息源头重发

      优点:无故障情况下运行特别流畅

      缺点:DAG大,加剧网络拥堵,错误恢复时间长

    2. 节点内部重发

      优点:错误恢复雪崩问题缓解

      缺点:每一步都要落地

    3. 上述两种方法自动选择(alibaba)

      DAG部分源头重发,部分父亲节点重发

2.分布式存储


欢迎关注我的微信公众号

互联网矿工

funpeefun

Search

    Post Directory