当前位置: 首页 > 知识库问答 >
问题:

流处理引擎的并行性行为

丌官盛
2023-03-14

相反,如果我从web服务器收集数据,为什么不直接使用相同的节点进行事件处理呢?这些操作已经由负载均衡器分布在节点上,我在web服务器上使用负载均衡器。我可以在相同的JVM实例上创建执行器,并将事件从web服务器异步发送到执行器,而不涉及任何额外的IO请求。我还可以监视web服务器中的执行器,并确保执行器处理了事件(至少一次或恰好一次处理保证)。通过这种方式,管理我的应用程序将容易得多,而且由于不需要太多的IO操作,因此与通过网络(也不可靠)将数据发送到另一个节点并在该节点中处理数据的另一种方式相比,它将更快。

很可能我在这里遗漏了一些东西,因为我知道许多公司积极使用Storm,我认识的许多人推荐Storm或其他流处理引擎用于实时事件处理,但我就是不明白。

共有1个答案

和弘博
2023-03-14

我的理解是,使用Storm这样的框架的目标是从应用程序/Web服务器上卸载繁重的处理(无论是CPU绑定、I/O绑定还是两者都绑定),并保持它们的响应。

考虑到每个应用程序服务器可能必须服务大量并发请求,并不是所有请求都与流处理有关。如果应用服务器已经在处理大量事件,那么它可能会对较轻的请求构成瓶颈,因为服务器资源(例如cpu使用、内存、磁盘争用等)已经与较重的处理请求绑定在一起。

如果您需要面对的实际负载没有那么重,或者如果可以通过添加app server实例来简单地处理,那么当然,复杂您的架构/拓扑是没有意义的,这实际上可能会降低整个过程的速度。它实际上取决于您的性能和负载需求,以及您可以在问题上投入多少(虚拟)硬件。像往常一样,基于负载需求的基准测试将有助于做出选择。

 类似资料:
  • 本文向大家介绍处理执行中的并行性类型,包括了处理执行中的并行性类型的使用技巧和注意事项,需要的朋友参考一下 数据并行 数据并行意味着在每个多个计算核心上并发执行同一任务。 让我们举个例子,对大小为N的数组的内容求和。对于单核系统,一个线程将简单地对元素[0]求和。。。[N-1]。但是,对于双核系统,在核0上运行的线程A可以对元素[0]求和。。。[N / 2-1],而在核心1上运行的线程B可以求和元

  • 问题内容: 为什么下面的代码不输出任何输出,而如果我们删除parallel,则输出0、1? 尽管我知道理想情况下应该将限制放在不同的位置,但是我的问题与添加并行处理导致的差异更多有关。 问题答案: 真正的原因是 有序并行 是完整的屏障操作,如文档中所述: 保持并行管道的稳定性是相对昂贵的(要求操作充当一个完整的屏障,并具有大量缓冲开销),并且通常不需要稳定性。 “完全屏障操作”是指必须先执行所有上

  • 根据文档[1],我一直试图在Akka stream中并行化一个流,但由于某些原因,我没有得到预期的结果。 我遵循了留档中列出的步骤,我不认为我错过了什么。然而,我的流的计算都是按顺序一个接一个地发生的。 我错过了什么? [1] https://doc.akka.io/docs/akka/current/stream/stream-parallelism.html 示例输出 我希望看到两个计算同时进

  • ShardingSphere 采用一套自动化的执行引擎,负责将路由和改写完成之后的真实 SQL 安全且高效发送到底层数据源执行。 它不是简单地将 SQL 通过 JDBC 直接发送至数据源执行;也并非直接将执行请求放入线程池去并发执行。它更关注平衡数据源连接创建以及内存占用所产生的消耗,以及最大限度地合理利用并发等问题。 执行引擎的目标是自动化的平衡资源控制与执行效率。 连接模式 从资源控制的角度看

  • 当我使用Spring批处理管理运行长时间运行的批处理作业的多个实例时,它会在达到jobLauncher线程池任务执行程序池大小后阻止其他作业运行。但是从cron中提取多个工作似乎效果不错。下面是作业启动器配置。 Spring批处理管理员Restful API是否使用不同于xml配置中指定的作业启动器?

  • 问题内容: 给出以下代码: 我可以假设’dowork’函数将并行执行吗? 这是实现并行性的正确方法,还是对每个goroutine使用通道并将单独的“ workwork”工人分开更好? 问题答案: 关于GOMAXPROCS,您可以在Go 1.5的发行文档中找到: 默认情况下,Go程序在将GOMAXPROCS设置为可用内核数的情况下运行;在以前的版本中,它默认为1。 关于防止main功能立即退出,您可