Akka 设计Reactive System架构指南(A-Z翻译系列)Part2

第二部分 使用Reactive Streams,Akka Streams, Akka HTTP, and Alpakka将工作负载流化(Streaming)

最受欢迎的Akka OSS模块之一出现于几年前,它就是Akka Streams。基于
Reactive Streams,Lightbend与Netflix,Oracle,Pivotal等公司的工程师共同发起,使得Reactive Streams可以处理带背压(backpressure)的数据流。类似TCP, 背压可以防止生产者给下游的消费者过载的数据以至于无法处理。

Reactive Streams and Akka Streams

figure11.png

在图11中,左边是Reactive Stream(Java9),包括一个发布者,一个订阅者和一个处理器。在jdK9中,不倾向于直接使用这些组件,而是作为streaming的基础单元。Akka Streams构建于Reactive Streams标准之上,额外添加了更多的功能。

在图11的右边,Akka Steams使用的术语是sources, sinks, 和 flows。对应Java的publisher, subscriber, 和 processor。 它们的功能是类似的,Akka Streams基于湾光公司 Akka团队和OSS社区的经验,在flow这一块添加了功能。Akka Streams 提供了对于函数式编程人员很熟悉的功能,例如filter, fold, 和 map。这些方法支持在流中flow环节进行数据的转换。

Akka Streams, Akka HTTP, 和Alpakka

figure12.png

Akka HTTP 构建于Akka Streams之上, Akka Streams天然适合于HTTP请求转换到HTTP响应的场景(见图12). 转换发生在steam的Flow模块中,此模式同样适合websocket,使用Akka Stream或Akka HTTP在消息进入或者送出的时候进行处理。

对于企业集成,可以选择另一项目Alpakka,采用响应式(Reactive)的,基于Akka Streams方案,代替Apache Camel。 和Camel社区版类似,开源社区大力构建了不同的连接器,用来将背压(backpressure)能力带到传统的Camel端点。
例如,以维基百科图像为来源,Alpakka能够“丰富数据” 并推送到各种连接器,例如Amazon S3, Apache Kafka或者Microsof Azure存储队列。

连接器列表:


connects.png

Alpakka用简洁的代码提供了强大的能力,背后使用 Akka Streams和Akka actors,避免直接处理底层内部控制。使用Akka Streams,更多的用函数式编程处理事物流,数据流过不同的函数来进行不同的转换操作。

总结

› Reactive Streams旨在为流负载提供背压(backpressure)能力,避免生产者或消费者过载。
› Akka Streams 是Reactive Streams的实现,提供了一系列的流程处理转换。
› 基于Akka Streams, Akka HTTP和Alpakka具备背压(backpressure)能力。作为Akka生态系统的一部分,提供了弹性的HTTP服务和企业集成功能。

你可能感兴趣的:(Akka 设计Reactive System架构指南(A-Z翻译系列)Part2)