Akka Streams [4]: Flow Control

Akka Streams 提供了丰富的流量控制功能来处理各种生产者和消费者的速度不匹配情况。流量控制包括了 backpressure(回压),缓存,阀门,以及溢出策略等。本文首先介绍了 async boundary(异步边界)的概念,然后给出了各种流量控制的用例。

Akka Streams [3]: Operator Composition

一个 Stream 通常会有多个处理环节。往下,每个处理环节可以分解为更细的处理步骤。往上,每个处理环节也可以看成是更大的处理环节的一部分。因此 Stream 处理会有不同层次的抽象。多个 Stream 的处理流程或者不同的抽象层次会共享一些处理功能,处理模块必须可以按照业务需要进行组合。强大、灵活的模块组合是 Akka Streams 最重要的功能之一。本文介绍了基本的线性组合以及给出相应代码例子。

Akka Streams [2]: Basic Concepts

Akka Streams 是基于 Akka Actor 的反应式流处理 (reactive stream processing) 开源库。Akka Streams 库不仅提高了丰富的流数据处理功能,更为重要的是其提供了具有分形组合 Fractal Composition 能力的 Graph DSL,让开发者可以定制组合任意拓扑形状和功能的模块。设计和实现具有分形组合功能的 API 实现绝非易事,在最初的几年里 Akka Streams 的开发者重写了六遍才成为我们今天看到的样子。参见 Reactive Streams, j.u.concurrent, & beyond!, 23 分 20 秒的视频。另一个贡献者 Kerr 告诉我实际是重写了七遍。其强大灵活的功能让初学者也容易发生见树不见林的情况。解锁的钥匙和学习其它复杂软件系统一样:建立清晰的概念,了解其基本实现机制,外加从简到繁的反复编码。本文试着对 Akka Streams 的一些主要概念给出定义,解释其背后的设计理念与实现机理,并在此基础上写出 Akka Streams 版的 Hello World 程序。

Akka Streams [1]: Why and What

随着分布式应用的普及,Akka Streams 成为 Akka 生态里面很受欢迎的开源库。作为一个程序员,做任何一个决定之前都会问三个问题:为什么(why)? 是什么 (what)?怎么做 (how)?作为 Akka Streams 系列文章的第一篇,本文尝试从应用层面回答 Akka Streams 的 why 和 how 的问题,并在最后给出一个具体例子,眼见为实。