Ale*_*ubo 6 mapreduce distributed-computing go
我正在设计一个应用程序,它需要一组分布式处理工作程序,这些工作程序需要异步使用并在特定流程中生成数据.例如:
显然,涉及的不仅仅是三个组成部分.
进一步要求:
这是一种由Storm等面向拓扑的系统解决的数据流.虽然风暴看起来很好,但我持怀疑态度; 它是一个Java系统,它基于Thrift,我都不喜欢它.
我目前倾向于使用AMQP作为数据传输的pub/sub-style方法,使用HTTP作为数据共享/存储的协议.这意味着AMQP队列模型成为公共API - 换句话说,消费者需要知道生产者使用哪个AMQP主机和队列 - 我不是特别高兴,但它可能值得妥协.
AMQP方法的另一个问题是每个组件必须具有非常相似的逻辑:
......以及每个组件需要的许多其他细节.
即使消费者在逻辑上非常简单(想想MapReduce作业,比如将文本分成标记),也有很多样板.当然,我可以自己完成所有这些 - 我非常熟悉AMQP和队列以及其他所有内容 - 并将所有这些包装在一个由所有组件共享的公共包中,但后来我已经在发明框架了.
这类东西是否存在良好的框架?
请注意,我特别询问Go.我想避免使用Hadoop和整个Java堆栈.
编辑:为清晰起见添加了一些要点.
我猜您正在寻找消息队列,例如beanstalkd、RabbitMQ或\xc3\x98MQ(发音为零 MQ)。所有这些工具的本质是它们为 FIFO(或非 FIFO)队列提供推送/接收方法,有些甚至还提供发布/订阅。
\n\n因此,一个组件将数据放入队列中,而另一个组件则读取数据。这种方法在添加或删除组件以及放大或缩小每个组件方面非常灵活。
\n\n这些工具中的大多数已经具有 Go(\xc3\x98MQ 在 Gophers 中非常流行)和其他语言的库,因此您的开销代码非常少。只需导入一个库并开始接收和推送消息。
\n\n为了减少这种开销并避免对特定 API 的依赖,您可以编写一个精简包,它使用这些消息队列系统之一来提供非常简单的推送/接收调用,并在所有工具中使用该包。
\n| 归档时间: |
|
| 查看次数: |
1502 次 |
| 最近记录: |