Otter源代码解析(五)

全部文档索引:

Otter源代码解析(一): http://eyuxu.iteye.com/blog/1941894

Otter源代码解析(二) : http://eyuxu.iteye.com/blog/1942518

Otter源代码解析(三): http://eyuxu.iteye.com/blog/1942519

Otter源代码解析(四): http://eyuxu.iteye.com/blog/1942521

Otter源代码解析(五): http://eyuxu.iteye.com/blog/1942522

Otter源代码解析(六): http://eyuxu.iteye.com/blog/1942549

Otter源代码解析(七): http://eyuxu.iteye.com/blog/1942578

Otter源代码解析(八): http://eyuxu.iteye.com/blog/1942780

Otter源代码解析(九): http://eyuxu.iteye.com/blog/1942786

扫描二维码关注公众号,回复: 696130 查看本文章

Node的SETL过程都比较复杂,挺难理解的,几个过程的通讯使用的是基于管道的架构(这个设计还是挺赞的,很多架构设计的思想实际上是来源于其它方面的,甚至是非技术的思维,所以架构师应该多读书,多读各种类型的书)一个过程处理完之后将数据写入管道(PipeLine),下一个步骤则从对应的管道读取。

在读具体的SETL的调度之前,读者需要首先去了解Otter的官方文档对于SETL的说明(https://github.com/alibaba/otter ),对于其中已经提到的内容,本文不会重复说明。

简要说明下PipeLine,设计的也比较简洁:



 

PipeLine主要的操作就是Put/Get,对于S-->E、T-->L,还有节点内部的处理,可以使用基于Memory的PipeLine,对于远程的节点数据传输(比如E-->T的跨节点传输),使用的是RPC或者Http,这里面需要注意的几个事项,图中已经做了说明:

1. 数据传输实际上是Pull的模式,并不是Push的模式,即数据准备好以后等待另外一端需要的时候再传输;

2. 数据的序列化采用的是ProtoBuf(https://code.google.com/p/protobuf/),也可以做加密传输,但是使用的Key是Path,一般性的安全需求可以满足,但是如果传输的数据是非常敏感的,还是用专线的好;

3. 压缩也是在Pipe这一层做掉的,具体就不展开了。

猜你喜欢

转载自eyuxu.iteye.com/blog/1942522