3 回答
TA贡献1836条经验 获得超5个赞
因为 Go 有 CSP 通道,我建议 Go 提供了一个特殊的机会来实现一个简单、简洁但完全通用的并行框架。应该可以用更少的代码比大多数现有框架做得更好。Java 和 JVM 不可能有这样的东西。
它只需要使用可配置的 TCP 传输来实现通道。这将包括
写入通道端 API,包括一些用于读取端的预期服务器的通用规范
一个读取通道端API,包括监听端口配置和支持
select
编组/解组胶水以传输数据 - 可能是编码/gob
这种框架的成功验收测试应该是使用通道的程序应该可以跨多个处理器分割,但仍保持相同的功能行为(即使性能不同)。
Go 中有很多现有的传输层网络项目。值得注意的是ZeroMQ ( 0MQ ) ( gozmq , zmq2 , zmq3 )。
TA贡献1798条经验 获得超7个赞
我知道您想避免使用 Hadoop+Java,但与其花时间开发自己的框架,不如看看Cascading。它为底层 MapReduce 作业提供了一个抽象层。
维基百科上最好的总结,它 [级联]遵循“源-管道-接收器”范式,其中从源捕获数据,遵循执行数据分析过程的可重用“管道”,其中结果存储在输出文件或“接收器”中. 管道的创建独立于它们将处理的数据。一旦绑定到数据源和接收器,它就被称为“流”。这些流可以组合成一个“级联”,并且进程调度程序将确保给定的流在其所有依赖项都得到满足之前不会执行。管道和流可以重复使用和重新排序以支持不同的业务需求。
您可能还想看看他们的一些示例,日志解析器、日志分析、TF-IDF。
TA贡献1852条经验 获得超7个赞
我猜你正在寻找一个消息队列,比如beanstalkd、RabbitMQ或ØMQ(发音为 zero-MQ)。所有这些工具的本质是它们为 FIFO(或非 FIFO)队列提供推送/接收方法,有些甚至提供发布/订阅。
因此,一个组件将数据放入队列,另一个组件读取。这种方法在添加或删除组件以及放大或缩小每个组件方面非常灵活。
大多数这些工具已经有 Go(ØMQ 在 Gophers 中非常流行)和其他语言的库,所以你的开销代码很少。只需导入一个库并开始接收和推送消息。
为了减少这种开销并避免对特定 API 的依赖,您可以编写一个瘦包,它使用这些消息队列系统之一来提供非常简单的推送/接收调用,并在您的所有工具中使用这个包。
- 3 回答
- 0 关注
- 196 浏览
添加回答
举报