共计 1336 个字符,预计需要花费 4 分钟才能阅读完成。
简介
有时候咱们的零碎次要是对输出的数据进行解决和转换,这些解决和转换是相互独立的,在这种状况下,输出的数据通过转换之后被放到指定的输入中去。
在日常的工作中,咱们会常常遇到这种数据处理的工作,那么对于这样的工作咱们就能够采纳数据流架构。
数据流架构
在理论工作中的流有很多种,最常见的就是 I / O 流,I / O 缓冲区,管道等。不同的组件或者模块通过这些流进行连贯。数据的流向能够是带有循环的拓扑图,没有循环的线性构造或者树形构造等。
数据流架构的次要目标是实现重用和不便的批改。它实用于在程序定义的输出和输入上进行一系列定义明确的独立数据转换或计算,例如编译器和业务数据处理应用程序。一般来说有三种根本的数据流构造。
程序批处理
程序批处理是最常见也是最根底的数据流架构。数据作为一个整体,会通过一个一个的处理单元,在上一个处理单元解决完结之后,才会进入到下一个处理单元。
咱们看下程序批处理的流程图:
数据被作为一个整体,从一个处理器传到另外一个处理器。次要通过临时文件进行交互。每个处理器的输入被作为下一个处理器的输出,通过一次次的数据处理,最终失去要得的后果。
程序批处理的长处是每个解决都是独立的,他们进行组合失去一个整体的程序解决架构。
当然毛病就是不能并行,只能串行执行,吞吐量也不够。各个处理器之间只通过两头文件进行交互,交互水平不高。
管道和过滤器
程序批处理中各个处理器的性能差别比拟大,通常来说他们是不同的零碎。如果在同一个零碎中解决数据流工作,那么就须要用到管道和过滤器。
java 8 引入了 stream 和管道的概念。一个汇合能够转换成 stream,通过对 stream 的操作,能够对整个数据流进行变换,最终失去想要的后果。
这种办法强调间断组件对数据的增量转换。在这种办法中,数据流由数据驱动,整个零碎能够合成为数据源、过滤器、管道和数据接收器等组件。
模块之间的连贯是数据流,它是先进 / 先出的缓冲区,能够是字节流、字符流或任何其余类型的此类流。这种架构的次要长处在于它的并发和增量执行。
这种模式下,最重要的组件就是过滤器,过滤器是独立的数据流转换器。它转换输出数据流的数据,对其进行解决,并将转换后的数据流写入管道以供下一个过滤器解决。它以增量模式工作,一旦数据通过连贯的管道达到,它就会开始工作。
上图中的数据从管道登程,通过一个个的过滤器,最终失去解决过后的后果。
过滤器有两种类型,别离是主动型过滤器和被动型过滤器。主动型过滤器能够被动从管道中拉取数据,并将解决过后的数据推出。这种模式次要用于 UNIX 管道。而被动型过滤器则是负责接管管道推入的数据。
这种模式的长处是能够提供高并发和高吞吐量。毛病就是不适宜动静交互。
流程管制
还有一种模式,既不是批量解决也不是管道模式,他是依据输出内容的不同,来管制不同的执行流程。相似于咱们程序中应用的判断语句。
总结
下面咱们介绍了几种数据流的架构形式,心愿大家可能喜爱。
本文作者:flydean 程序那些事
本文链接:http://www.flydean.com/07-data-flow-architecture/
本文起源:flydean 的博客
欢送关注我的公众号:「程序那些事」最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!