Akka Stream BackPress 技术(个人处女作啊, Be nice to me^_^)

      问题引入:有一个超大的CSV文件,150 Million条记录,需要调用一个REST接口,从
     欧洲传到美国的服务器上去,如果单线程处理,平均每秒仅仅不到30条/秒,因为网络
     状况是不稳定的,CSV文件的读取速度需要和每行记录的处理速度,以及最终rest请求
     的接受速度相互匹配

      传统解决办法:
     - [ ] 假定有N个处理步骤,包括发送REST请求,也算一个,利用N-1个阻塞队列存放
       中间结果,在不同的步骤中通过线/进程异步存取中间结果,配置不同的同构线层数
       量,队列的长度来控制任务之间的不同的处理速率的矛盾,
       + 配置起来参数多
       + 网络状况不稳定的情况下,参数非常难做到动态可调整,来配合不同时期的网络
         数据
       + 服务器端的连接数与并发数量也不好控制
     - [ ]使用类似Spark/MR的分布式计算框架,在最后的Map里面完成REST请求的发送和
       结果收集
       + 也很难根据rest服务器端的速率调整CSV文件记录的处理和读取参数
     - [ ]其他

     Akka Stream BackPress技术的引入:
     本身Akka Stream 的处理和Unix的管道或者是Spark的RDD transformation很类似,都
     是以数据为核心,顺序的传入一系列能处理这种格式(模型)数据的函数,步骤一函
     数的输出,作为步骤2函数的输入
     最重要的区别改进点在于“AKKA Stream”让使用者不需要再经过各类参数类型的配置,
     来调整数据的各个不同步骤的处理速度,而由Stream框架自动完成,以本引入问题为
     例,就是如果rest请求现在速度慢下来了,倒数第二个步骤到第一个读取CSV步骤的函
     数也会相应的慢下来,相当于每一个步骤都是一个Actor,他除了可以处理数据,完成
     自己的责任外,还能在自己忙的时候通知前面步骤的Actor,"慢点慢点,我这里的工作
     处理不过来了,你给我少安排些活",同一步骤的多个Actor实例(干同样工作的人),
     也可以互相分担工作量(处理的记录数量)

      其他Akka Stream的技术:
     1) Flow : 通过不同的条件控制不同的数据流结构,可以有分支,过滤,负载均衡路由的不同

        的配置,有点类似pentaho DI的编码版本


简单示例代码 :


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值