所以,我们在生产系统中有一个用例,我们可以使用akka流。为了理解akka流是如何提供背压的,我想更深入地了解一下我们的需求。
我们有一个solr集群,它承载了我们的一些数据。接下来,我们有一个play应用程序,它服务于面向客户的前端网站。每个传入的请求最终归结为使用 /sql
solr提供的处理程序。一旦我们从solr获取了整个数据集,我们在变形后将其写回cassandra集群。这可以转化为一个问题,可以用akka流来解决,其中solr流来自 /sql
处理者将是阿克卡人 Source
Cassandra仓库将是 Sink
中间的一切都是习惯性的 Flow
s。
我在研究akka流,了解它是一个React流的实现。最值得注意的是,akka streams提供背压的方式,以确保客户不会被生产商压垮。现在,关于我的用例,我想了解akka是如何提供背压的。
在我看来,Cassandra有一个React流库。因为在我们的例子中它是消费者,所以这个驱动程序将能够向生产者发出信号,告知它将能够接收多少数据。这就意味着,在生产端必须有一个相应的驱动器,可以对这个信号做出React,并控制元素的发射。具体地说,既然我们的例子中的生产者是solr,那么我还必须使用一个响应式的solr驱动程序来从solr获取文档并在应用程序中进行流式处理,这难道不正确吗?然后,当cassandraReact式驱动程序向backpressure发送信号时,该驱动程序将能够控制从solr集群获取文档的速率。这不对吗?
如果真的是这样,那么在生产方使用没有无React驱动程序的akka流会带来什么好处吗?具体来说,有没有其他方式,akka出版商可以提供背压能力,在这种情况下,当司机是不符合React?
1条答案
按热度按时间olqngx591#
对于solr,还有一个来自alpakka项目的完全React式akka流实现,因此使用它作为
Source
将处理反压力,尽管这意味着不使用sql接口来表示查询。另一方面,由于solr-sql接口本质上是一个使用solr的jdbc facade,所以只要定义一个示例,就可以使用alpakka-slick集成
slick.jdbc.JdbcProfile
它使用solr jdbc驱动程序。