码迷,mamicode.com
首页 > 编程语言 > 详细

xor算法在storm可靠性中的应用

时间:2015-12-26 13:12:17      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

1、先看一下数学中的异或

    异或xor是一个数学运算符。它应用于逻辑运算。异或符号为“^”。

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0(同为0,异为1),

既然相同的对象XOR操作,结果是0,那么有这样一个公式,

A xor B…xor B xor A = 0,其中每一个操作数出现且仅出现两次。

2、storm可靠性的机制

    storm中有一个系统级别的组件是acker,acker追踪从spout发射出的流ID(msgId)在每一个task中生成的tuple是否完成。spout或者bolt在处理完tuple后,都会告诉acker我已经处理完了该源tuple(如tupleId=1),如果emit一个tuple的话,同时会告诉acker我发射了一个tuple(如tupleId=2),如果在大量的高并发的消息的情况下,传统的在内存中跟踪执行情况的方式,内存的开销会非常大,甚至内存溢出。acker巧妙的利用了xor的机制,只需要维护一个msgId的标记位即可,处理方法是acker在初始的时候,对每个msgId初始化一个校验值ack-val(为0),在处理完tuple和emit tuple的时候,会先对这两个个值做xor操作,生成的中间值再和acker中的当前校验值ack-val做xor生成新的ack-val值,当所有的tuple都处理完成都得到确认,那么最后的ack-val自然就为0了(因为每一个tuple,从emit到ack都是经过两次xor操作,所以最后的结果为0可以由上面的那个公式可以验证出来)。

   见下图:

   技术分享

xor算法在storm可靠性中的应用

标签:

原文地址:http://www.cnblogs.com/thinkpad/p/5077763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!