基于 Golang channel 的 pipeline(一)

栏目: Go · 发布时间: 6年前

内容简介:业务中,有很多处理流程,涉及到多个环节,其中很多环节是相同的。通过使用 pipeline,好处:感谢 (myntra)[github.com/myntra/pipeline] 的项目,思路类似,区别:

需求

业务中,有很多处理流程,涉及到多个环节,其中很多环节是相同的。

通过使用 pipeline,好处:

  • 分离了业务与流程处理,业务代码只是给一个输入,处理并产生一个输出。
  • pipeline 中打印执行过程日志,方便定位问题点,发现瓶颈。
    • 当前执行到哪一个步骤了?
    • 程序卡在哪个环节了?
    • 一次处理耗时多少?
    • 哪个步骤的 channel 满了?
  • 通过并发执行某些环节来提高效率
  • 批量处理数据库操作
  • 每个步骤的代码易于测试

思路

感谢 (myntra)[github.com/myntra/pipeline] 的项目,思路类似,区别:

  • 每个 Step 执行时,会首先创建输出的 out channel ,从输入的 in channel 里面读取数据。
func (s *Step) Exec(in chan interface{}) chan interface{} (
    out := make(chan interface{}, 100)
    
    go func() {
        // call 业务处理函数
    }()
    
    return out
)
  • 业务的执行函数输入和输出的参数都是 interface{}
func (s *BusinessProcessor) Process(in interface{}) interface{} {
    // process
    
    return result
}

流程

pipeline 简单时序图:

基于 Golang channel 的 pipeline(一)

pipeline framework

代码

pipeline

遗留问题

  • 某个 Step 处理失败,停止整个 pipeline,这个逻辑在很多业务中都存在,可以添加到 pipeline 中。
  • 支持停止。
  • 支持 Step 并发执行。
  • 支持批处理,有些环节需要向数据库插入大量数据,批量处理效率会高很多。

reference


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入浅出数据分析

深入浅出数据分析

Michael Milton / 李芳 / 电子工业出版社 / 2009 / 88.00元

《深入浅出数据分析》以类似“章回小说”的活泼形式,生动地向读者展现优秀的数据分析人员应知应会的技术:数据分析基本步骤、实验方法、最优化方法、假设检验方法、贝叶斯统计方法、主观概率法、启发法、直方图法、回归法、误差处理、相关数据库、数据整理技巧;正文以后,意犹未尽地以三篇附录介绍数据分析十大要务、R工具及ToolPak工具,在充分展现目标知识以外,为读者搭建了走向深入研究的桥梁。 本书构思跌宕......一起来看看 《深入浅出数据分析》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码