首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流处理体系结构

流处理体系结构
EN

Stack Overflow用户
提问于 2018-11-22 08:10:37
回答 2查看 290关注 0票数 7

我正在设计一个系统,其中有一个主要的对象流,并且有多个工作人员,从这个对象产生一些结果。最后,有一些特殊的/唯一的工作人员(从图论的角度来说是一个“接收器”),它接受所有的结果,并将它们处理到某个被写入到某个DB的最终对象。

工人有可能依赖于其他工人的结果(因此,等待他们的结果)。

现在,我面临着几个问题:

  1. 可能是一个工人比另一个人慢得多。你是怎么处理的?增加更多的较慢类型的工人(=缩放)?(可能是动态的)
  2. 假设W_B依赖于W_A,如果W_B由于某种原因而关闭,那么流将停止,系统将停止工作。所以我想让系统绕过这个工人,不知怎么的。
  3. 此外,最终员工如何决定何时对结果集进行操作?假设它有A和B的结果,但没有C的结果,它可能是C下降了,或者现在它非常慢。它怎么能做出决定呢?

值得一提的是,它不是一个实时应用程序,而是一个离线处理系统(即您可以访问DB并修改记录),但同时,它必须以“较高的速度”处理相对较多的对象。

关于技术,

我正在用Java开发这个系统,但我并不局限于特定的技术。

如果你能帮我完成系统的总体设计,我会很高兴的。

非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2018-11-22 08:33:21

正如Peter所说,它实际上取决于用例。不过,也有一些一般性意见:

  1. 如果一个工作人员比另一个工作者慢,可能会创建更多的这种类型的实例;例如Kubernetes允许动态节点创建,Kafka允许划分一个主题,以便多个实例可以读取并处理它。
  2. 如果B依赖于A,而A下降了,B就不能工作,仅此而已。也许重新启动A?也许你可以定期做一次健康检查。
  3. 如果最终员工需要A、B和C的结果,那么如果没有C,它将如何处理?如果可以,它可以存储A和B的结果,安装一个计时器,如果没有C已经到达,则继续。
票数 4
EN

Stack Overflow用户

发布于 2018-11-24 10:18:53

一些额外的想法:

  1. 如果您的意思是说整个应用程序的某些子任务比其他任务执行得更快,那么将应用程序分割成一个好主意,这样每个工作人员都能做一些事情--换句话说,分享快速工作和分担缓慢工作。但是如果你想说有些机器比其他机器慢,那么你可以在慢机器上运行更少的工人,在更快的机器上运行更多的工人,以便平衡事物,使每个工人拥有大致相同的资源。
  2. 您可能希望在工作人员之间使用某种持久的队列将您的体系结构解耦。
  3. 在超时和重新启动的情况下使用心跳是很常见的。

分布式流处理很快就变得非常复杂。如果您在上面构建一个提供高可用性和一次性语义的流处理框架,您的生活就会轻松得多。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53426418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档