00:00
好,这一节呢,我们来讲解一下telegraph的架构,那么telegraph呢,它是典型的pipeline架构,那么这种架构呢,它普遍采用责任链设计模式的思想,那么这种思想呢,其实就是啊,最核心的就是在这个链子上,那么它呢,其实是把我们程序一长串的处理逻辑呢啊,拆分成由一个一个组件来共同合作来完成的一个处理逻辑,那么这样的一个设计呢,它最大的好处就是实现了这个逻辑呢可复用性,呃,假如说呢,我现在要重新写一个这个工作逻辑。啊,那么他这两段呢,这两段诶可能都是一样的,只不过最后一段呢,它的逻辑上呢有些差距,那么这个时候呢,呃,其实我们的这个就可以通过组件组合的方式啊,只需要在实现一个新的组件就可以了啊前面两个组件保留啊,这样呢就是实现了我一来呢是实现了我这个代码的灵活性,二来呢就是让我可以更方便的拓展整个框架的能力。
01:01
呃,那么现在呢,我们还是把这个重心放在telegraph上,Telegraph呢,它其实使用的叫pipeline架构,这种pipeline架构呢,其实在很多多线程编程的程序里面都有体现啊,它和这个责任,它这个和仅仅是责任链模式之外呢啊,它其实还要干什么呢?它其实在组件和组件之间还要用到一种叫管道的数据结构,其实是一个啊先进先出的队列,那么上游的组件呢,它把数据呢生产到这个管道里面来,然后下游的组件呢,从管道里面拉取数据来处理,呃,你这样看一个局部呢,其实有点像一个生产者与消费者模式,但是当这个呃组建很多之后呢,它组成一个pipeline,诶组成一个流水线,那么这个时候呢,我们就称这个叫做pipeline架构,那么很多这个多线程编程里面呢,会把这种方式叫做啊pipeline的一个啊设计模式,实际上这也是合理的啊,那么一般来说呢,这种pipeline的架构呢,它除了啊你在这个呃运行。
02:02
呢,需要去组织这些组件和组件之间的关系,那么你一般来说呢,啊,还会包含一个运行时的上下文来统筹全局的一些啊,各个组件共用的参数。共用的一些东西,它都会放在这个呃程序的上下文里面,呃,那么这种在为什么说是在这个呃多线程程序里面常见的啊,是因为可能在处理某些事情之后呢,啊处处理这个逻辑的某一部分,那需要加大它的资源啊,需要去做一些异步处理,那么这个时候呢,我们说啊,组件和组件之间的松耦合,下游的组件呢,根本就不用管上游的组件啊是几个线程几个线程在跑,那么他呢,只管从这个管道里面呢,拿数据来处理,只要这里面有呃组件B呢,啊就会拿这个数据来处理,处理完之后塞给组件C啊那么这是呃,为什么说pipeline架构是多线程编程模编程里面的这个常见的一种啊架构或者说是设计模式。
03:01
那么好,接下来呢,我们就看一下telegraph它是怎么实现这个pipeline架构的,其实telegraph呢,它内部包含四类组件,也就是输入插件,处理插件,聚合插件和输入插件,而且呢,这四类组件啊,四类插件呢,它必须按照这个顺序来进行组合,也就是说必须得是先有输入插件诶,再有处理插件,然后再有聚合插件,最后呢是输出插件,那么聚合插件能不能跑到处理插件前面呢?那么在telegraph的这个架构里面是不可以的啊,处理插件必须得在聚合插件的前面。那么接下来呢,我们还记得这个telegraph呢,它允许你在一个配置文件里面声明多个input output组件,那么我们就来看一下这个telegraph呢?它是如何组织这些组件之间互相传值的,也就是他内部到底是怎样的一个工作流。啊首先呢,我们可以看到,就是按照这个图理来说啊,啊所有的input组件呢,就是你可以说明多个input组件,但是所有的input组件呢,它最后会把啊这个数据全部放到同一个管道里面,然后processor这个阶段呢,因为processor这个呃插件呢,它是可可有可无的,如果有的话啊,那么他就会把这个数据。
04:19
放到这个这个第一个processor啊,我们要手动说明这个order,然后第一个processor呢,它会从这个管道里面拿到数据,然后接着就放给自己下游的这个管道,然后process之间呢,也是用管道连接,最后呢输出到尾部的这个管道,然后如果说呢,你这个工作流里面。有聚合组件,那么聚合组件呢,会从这个管道里面拉取数据。如果说你有两个aggregator啊,两个聚合组件,那么聚合组件呢啊,这个数据呢,它其实会删除到所有的这个聚合组件里面,也就是说我们说的复制,然后其余,然后原始数据呢,会直接往这个管道里面发一份,之后呢,这个aggregator呢,将聚合后的数据再发到管道里面啊是这样,然后最后这个输出的管道会将自己里面的数据再删出到所有的as po组件里面,也就是说一样还是复制,比如说我这个地方写到file对吧,我这个地方写的芒果DB,然后我这个地方写的1PLUS DB,这个管道里面的数据呢,会复制给这三个输出啊,所以说你这芒果DB里面1PLUS DB,还有这个file里面的放在最后都是一样的数据啊,这就是telegraph的一个,呃,工作流。
05:31
那这个工作流的逻辑呢,实际上就是我们telegraph它给写死的,就是它的框架逻辑啊,除了这个processor之间的order呢,可以进行一个啊,人为的设定这些大的这几个这几块啊,不同颜色区别开的这几块的这个先后顺序我们是不能改变的,另外就是所有input组件往哪个管道来放数据,这个逻辑我们也是不能改变的,这都是telegraph框架为我们写死的啊,除非呢,你拿着这个框架的源码去做二次开发。
06:03
呃,这呢,就是我们一个,呃,Telegraph的一个架构,那么从性能角度上来看呢,啊,就是每一个组件啊,不管是input也好,Processor也好,还是aggregator或者out output这个组件啊,不管是哪一个组件也好啊,它都是一个,呃对我们来说呢,你可以理解为一个携程,或者说是用户线程,或者就是轻量级线程,也就是每一个组件它都是一个轻量级线程啊对我们来说的话,这就是有三个线程往这一个管道里面写东西,对吧?然后下游会有一个一个线程的处理器啊,来处理这个数据。这就是telegraph的一个架构实现。
我来说两句