您的位置:首页 > 其它

《什么是流式思维?》读后自认为的精华内容

2017-12-10 22:02 204 查看
背景

什么是流

面向函数流式特点
流式处理的基本要素是-事件

流式思维在大数据架构上应用

流式思维在微观上应用
流式思维巧妙的回避资源争夺问题的体现

流式思维的特点总结
A little bit of progress every dayCome on

背景

最近在学习很好很实用的库:RxJava。就在学习的过程中,偶然的接触到了“流式api”一词,然后对这个词进行搜索。搜索到一篇很棒的文章讲什么是流式思维,进而记录读文章后自认为的精华内容供以后学习理解并分享转载这篇文章什么是流式思维?

什么是流

最先联想到的是“水流”,潺潺不断,流是一种动态过程,如果你想截断水流,最简单的是堵住它,所以,流是不能被堵塞的,也就是非堵塞,只有非堵塞才会形成流。

面向函数流式特点

流式的面向函数思维会更侧重平台制度性的建设,会忽视个体的差异,拥抱个体的大数据量。从这点来说,流式思维更适合进行大数据处理和分析,比如hadoop和Spark。

流式处理的基本要素是-事件

事件是一个一旦发生就不再改变的值对象,每个事件结构基本一样,我们不关心事件内部的规则和状态,而是关心无数个事件的处理,因此事件是一个流式系统的基本要素,有了无数个事件就需要有事件的源和目的,掌握这三点就容易帮助我们理解流式系统。

流式思维在大数据架构上应用

比如Storm这个大数据处理框架,其有几个好像陌生的概念:Spout Tuple Bolt,如果单从字面上理解是“嘴” “元组” “螺栓”等意思,但是你从流式角度去思考就很容易理解,Spout嘴是产生事件流的源,而Tuple元组代表一个个小事件,多个事件就是Tuples了,Tuples代表了事件流,而Bolt代表流过程中一个处理器,如同将两个水管接在一起的接头。

流式思维在微观上应用

流式思维不但可以应用在大数据处理上,也能使用在微观的CPU使用上,前面我们谈到CPU类似红绿灯调度员,调度两条线程(水管)的协调,如果我们采取流式思维,设计出不会交汇的多条水管,那么CPU就不会去做红绿灯这种看似高效率实际是低效率的事情。比如我们在安卓编程中,可以采取如下流式编程:

apiService.login() //后端线程
.getUserData() //后端线程
.saveUserData() //后端线程
.subscribe(Subscriber { //UI线程
void onComplete(){}
void onError(Exception e){}
void onNext(Object o){}
});


我们在这个代码中相当于启动了四条不会交汇的流,实际是四个线程,这四个线程正好利用四核CPU,这样避免了一个CPU做红绿灯。

流式思维巧妙的回避资源争夺问题的体现

比如这里我们会将状态保存到数据库中,数据库操作需要连接池等慢处理:

public void changeChannel(changeCommand cmd){
state = cmd.getState(); //修改当前状态为新的状态
repository.save(state); //这个慢速会成为整个方法处理过程的瓶颈。
}


解决这个问题通过引入流式处理,流式方法的特点是事件流,那么我们这里引入事件:

public void changeChannel(changeCommand cmd){
state = cmd.getState(); //修改当前状态为新的状态
producer.send(changeEvent en); //触发一个changeEvent事件,没有堵塞
}


持续不断地调用changeChannel就会产生持续不断的事件流,在事件流的终点,我们再进行慢速处理,这样不会影响原来的流程,这是在一个水流管道上再分流出一个管道,从而不影响原来水流的操作方式,正如南水北调工程是在长江这个水流中分支出一个通道流向北方。

这种流式处理正是LMAX架构的核心,依靠Disruptor这种管道队列,LMAX能做到每秒处理600万订单的吞吐量,正如设计一个无堵塞的港口,其处理能力只有时间的限制,没有被处理对象数量的限制一样。

上述案例,我们巧妙将慢速的数据库操作转移他处,但是要真正解决数据库的资源争夺,我们还是可以使用流式思维,数据库就不要存储可变的状态数据,因为对同一个数据表记录会存在多个修改的引发的争夺现象,我们只要向数据库或文件中增加新数据,而不是修改原来的数据,永远只是追加Append操作,这种Append是典型的流式操作,我们可以将事件流不断追加到数据库或文件系统等慢速设备上,需要时再通过事件流加载再次播放到指定的状态。这是Event Sourcing/CQRS的基本思路。

总之,流式思维应用在架构设计上大有好处,架构治理如同治水,流式思维类似大禹治水,以疏替堵,顺势而为,面向对象 面向函数 异步编程 并发编程等都只是手段方法而已。

流式思维的特点总结

1、流式擅长处理大数据

2、流式来源是集合而不是个体

3、流式以疏导替代红绿灯式的堵塞

4、流式管道不可交汇,避免拥挤;流式管道可分支,缓解拥挤


================================================================

A little bit of progress every day!Come on!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐