logo资料库

论文研究-基于主题的分布式发布订阅消息系统中负载均衡的设计与仿真 .pdf

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
中国科技论文在线 http://www.paper.edu.cn 基于主题的分布式发布订阅消息系统中负 载均衡的设计与仿真 谢轶,崔毅东** (北京邮电大学软件学院,北京市 100876) 摘要:很多企业应用系统使用的面向大规模分布式计算的发布订阅系统,尤其是基于主题的发布订阅系统, 由于缺少一个完整而灵活的负载均衡机制,无法应对海量的数据和多变的业务场景。本文通过对系统中负 载关键因素的分析,综合已有消息系统的相关研究成果,提出了一种更为灵活的负载均衡机制。这种机制 基于消息代理的实时等待队列长度,使用两种本文设计的算法,在消息层面对消息代理的工作负载进行均 衡。 关键词:分布式;发布/订阅系统;负载均衡 中图分类号:TP31 Design and Simulate of Load Balancing in Distributed Topic-based Publish/Subscribe Messaging System XIE Yi, CUI Yidong (School of Software, Beijing University of Posts and Telecommunications, Beijing 100876) Abstract: Due to the lack of a complete and flexible load balancing mechanism, lots of distributed publish/subscribe systems, especially topic-based ones, fail to deal with massive volumn of data, as well as various business senarios. These distributed publish/subscribe systems have to work with a standalone load balancer, or simply cannot be utilized in some senarios. Based on analysis of key factor of message broker or event broker in the messaging system and research on various kinds of messaging systems as well as related study results, a more flexible mechanism is proposed. Based on the real-time length of waiting queues in message brokers, this mechanism uses two algorithms to accomplish workload balance on the message level. Key words: distributed; publish/subscribe system; load balance 0 引言 发布订阅系统作为一种典型的消息系统,已经广泛应用在大规模分布式应用中,它使进 程间的多对多、异步和松耦合通信成为可能,这使系统能够更好地拆分成不同的模块以提升 重用性,同时可维护性也相应提升。在发布订阅系统中,发布者在不知道订阅者身份、位置 和数量的情况下把信息发布到某个具体的主题;类似的,订阅者在不了解发布者的身份、位 置和数量的情况下订阅到某个具体的主题来获取信息,这种模式可以实现松耦合。 面向大规模分布式计算环境的发布订阅系统采用分布式的系统架构来实现[1],消息代理 是什么补上消息代理可能分布在不同的区域或位置,它们会因为不同的工作负载密度、主题 数量或终端用户的用量模式而出现工作负载分布不均衡。现有系统的负载均衡策略根据已有 的主题数量,确定新出现主题的具体消息代理。当主题的数量较多并且每个主题相关的消息 数量相对平均时,这种策略是很有效的,并且实现十分简单。但是在不同的应用系统中,存 在着一些比较特殊的应用场景,这种粒度较粗的负载均衡策略无法有效地工作,甚至导致系 统无法稳定运行。 作者简介:谢轶(1988-),男,软件设计师,主要研究方向:分布式计算及云计算 通信联系人:崔毅东,(1976-),男,北京邮电大学软件学院副教授,主要研究方向:移动互联网产品工 程、网络测量及服务质量工程、社会网络分析、云计算等. E-mail: cyd@bupt.edu.cn - 1 - 5 10 15 20 25 30 35 40
中国科技论文在线 http://www.paper.edu.cn 基于这种现状,设计并实现了一种新的负载均衡机制,使分布式发布订阅系统可以更好 地适应不同的应用场景。这种新的机制基于消息代理的实时工作负载来分配消息的流向,能 够更细粒度的对负载均衡进行控制,同时免去了系统对独立负载均衡器的依赖。 1 相关工作 在分布式架构下,多个消息代理或事件代理同时对外提供服务,每个消息代理为一定数 量的本地客户服务。基于在消息代理之间是否会有消息的传递,系统架构可以分为集群和 P2P 两种模型。在集群模型中,消息发布之后只会经过一次转发随即便会到达订阅者。而在 P2P 模型中,在到达目的地之前,消息会经过多个消息代理的传递。同时,在 P2P 模型中, 消息代理之间连接关系会经历变化并引起系统拓扑结构的变化,这会导致消息路由的变更。 通常,在集群模型中不会有消息路由的变化,除非消息代理失效并离开系统。 基于订阅模型,发布订阅消息系统可以分为基于主题和基于内容两种[1]。在基于主题的 系统中,发送给订阅者的消息仅仅根据主题组织在一起,而不会尝试对消息的内容进行分析。 相反,基于内容的消息系统会分析消息的内容,以满足来自订阅者的订阅请求。这意味着消 息需要经过一些过滤器的处理才能最终到达订阅者。因此,在基于内容的系统中,订阅会更 为灵活,但反过来消息匹配也给系统带来了更大的负担[2]。同样的原因,基于内容的系统一 般都基于 P2P 模型,而基于主题的系统大多构建在集群模型上。相对于基于内容的系统, 基于主题的系统在实现时会相对难度较小,而且在消息分发上也更为高效。但可以预见的是, 表达能力是基于主题的系统的弱项[3]。 负载均衡策略可以在四个层面进行实现:网络层、操作系统、中间件以及应用层。实际 上,基于主题的消息系统一般采用的策略是使用作为中间件的负载均衡器对工作负载进行均 衡,如由 LinkedIn 开源的 Kafka[4]。在生产环境中使用时,Kafka 一般都需要一个独立的负 载均衡器配合。也有不少系统为了系统的完整性,或对用户更为友好的目的,直接在应用层 实现根据消息代理所服务主题数量的均衡策略,如由 Yahoo!开源的 Hedwig。Hedwig 的性 能和扩展性都极为优秀,但它更适用于主题数量众多且每个主题的消息数量相对平均的场 景。 2 系统设计 45 50 55 60 65 负载均衡方案的目的是将工作负载平均地分布到所有可用的资源上,提高吞吐量,降低 消息传递的延迟,同时减轻节点失效对系统造成的影响。本文设计的负载均衡机制包括对系 统的改进和两个核心算法。本章剩余部分将描述机制在系统结构上的改进,算法会在第三章 详细描述。 70 2.1 主题所有权分割 在基于内容的消息系统中,负载均衡意味着以不同的方式基于不同的策略对订阅者进行 迁移。但这在基于主题的系统中是比较困难的,不能简单地把订阅者从一个消息代理迁移到 另一个上。订阅者只想要收到自己感兴趣的消息,而在基于主题的系统中消息是根据主题组 75 织在一起的。大多数基于主题的系统都有一个主题所有权的问题,即在任意时刻,一个主题 的相关消息只会由一个消息代理最终进行处理,那么这个消息代理拥有这个主题的所有权。 主题所有权一经确定是不会发生改变的,除非人为操作消息代理主动释放所有权抑或节点发 生故障。 - 2 -
中国科技论文在线 http://www.paper.edu.cn 80 85 90 图 1 拆分主题所有权 本文尝试将一个主题的所有权分散到两个或两个以上的消息代理,使得属于同一个主题 的消息能够做到在发布之前,根据服务此主题的所有消息代理的当前工作负载情况,选择其 中一个消息代理作为目的地。 2.2 消息代理的工作负载 本文选择基于消息代理中等待发送的实时消息队列大小,来计算消息代理工作负载。在 一个消息系统中,肩负着消息的接受和分发功能的消息代理是无可争辩的核心组成。而在一 个消息代理中,有两个可能成为性能瓶颈的关键模块。其一为 CPU 的性能:流入消息代理 的消息的速率可能超过其处理消息的速度。发布者越多,这种情况越严重。其二为网卡的性 能:从应用层向外发送消息的速率可能超过网卡的总可用带宽。在 IP 层的队列可能会出现 丢包的情况,致使应用层消息发送流程的停滞。这两种情况在消息代理中都表现为消息队列 中等待处理的消息不断堆积,并导致消息的处理和发送延迟不断增加。当队列中堆积消息的 大小超过了总可用的内存大小,还可能出现消息代理所在系统的不稳定,甚至节点崩溃。因 此消息代理中,等待处理和分发的消息所在的队列长度能够比较准确地反映消息代理工作负 载状况。 95 2.3 分布式协调服务 - 3 -
中国科技论文在线 http://www.paper.edu.cn 图 2 系统结构 最后一个关键点在于如何将路由选择与获得的消息代理工作负载结合起来。如图 2 所 示,本文选择使用一种分布式协调服务[5]来维护所有消息代理当前等待队列的大小。在现有 的大规模分布式系统中,元数据的保存以及并行任务的协调的工作都可以由分布式协调服务 100 来完成,它所保存数据的规模相对系统中实际流转的数据要小很多,同时所具有的分布式特 性也使其能够很好地融合到其他以分布式为核心设计思想的系统中。在本文描述的策略中, 负载均衡的动作发生在消息发布之前。消息代理需要实时地更新分布式协调服务中的相关状 态,而发布者需要以一定的时间间隔不停地检查每个消息代理的工作负载,以确定接下来所 发布消息的目的地。 105 2.4 结语 以上三个改进,使系统在消息层面(message-level),即针对每一条消息进行负载均衡 成为了可能。相对于在主题层面(topic-level)的负载均衡,消息层面的负载均衡更为灵活 和准确,反应也更为迅速。 3 算法描述 本文的设计依赖于两种算法来具体进行工作负载的均衡:均衡因子算法和消息分发算 法。负载因子的计算将与消息发送流程独立开来运行,而消息分发算法将在每次发送消息之 前执行。 3.1 计算均衡因子 计算均衡因子的算法包含以下几个步骤: 1. 以 i1(秒)为时间间隔,累加每个消息代理中等待队列的大小得到 Bn(n>=1), B1 表示 id 等于 1 的消息代理(broker)的累加值。 2. 以 i2(秒)为时间间隔,用 Bn 除以 i 得到 bn,i = i1/i2。b1 表示 id 等于 1 的消息 代理此段时间等待队列大小的均值。 3. 求得 b1,b2,b3……bn 的最大公约数 c,然后计算 Tn = bn/c。 4. 将 bn 与 Tn 的组合按照 Tn 的值进行增序排序,如(b1:5),(b2:1),(b3:3)在 排序之结果为(b2:1),(b3:3),(b1:5)。 5. 在排序结果中,将 Tn 的值取出并将增序改为降序,然后赋值回去。如(b2:1), (b3:3),(b1:5),取出的 Tn 序列为 1,3,5。改为降序之后为 5,3,1。因此, 在这一步操作之后的结果为(b2:5),(b3:3),(b1:1)。 6. bn 对应的 Tn 即为 Ln。Ln 表示 id 为 n(n>=1)的消息代理的均衡因子。 3.2 消息分发 消息分发算法包含以下几个步骤: 1. 将负载因子 L1,L2,L3……Ln 叠加在一起得到 L。 2. 使用一个满足均匀分布的整数随机数发生器,用每次得到的随机数去整除 L,余数 设为 I。 3. 判断 I 与 L1 的大小关系,如果 I 小于 L1,消息发给 id 为 1 的消息代理。否则判断 I 与 L1 加上 L2 的大小关系,如果 I 小于 L1 加上 L2,则消息发给 id 为 2 的消息代 理,否则……以此类推,一条消息只发给一个消息代理,然后算法结束。 110 115 120 125 130 - 4 -
中国科技论文在线 135 4 仿真结果及分析 http://www.paper.edu.cn 为了验证上述机制和算法,本文在 ns2[6] [7]的基础上进行了扩展,并对整个消息系统进 行模拟。由于负载均衡的策略的根本目的在于缩短消息传递的延时并提升系统吞吐量,所以 仿真中主要观测的数据指标为消息的延时。 仿真的基本设置为两个处理能力相同的消息代理共同服务同一个主题,同时发布者以满 140 足泊松分布的时间间隔发布消息。其中一个消息代理还会同时服务另一个主题以模拟负载的 不均衡。 4.1 重载 145 在重载情况下,能够看到负载均衡能够在一定程度上缩短消息从发布者到订阅者的传递 图 3 重载下负载均衡对消息延时的影响 延迟。从局部来看,由于其中一个消息代理的部分处理能力被占用,原本就处于重载的消息 代理中消息队列只会不停增长,这必然导致消息延时不断增长。从整体来看,由于消息到达 速率大于消息处理并发送的速率,即使负载被更好地分配到了两个消息代理中,它们的队列 长度还是一直在增加,消息延时还是在不断增加。 - 5 -
中国科技论文在线 http://www.paper.edu.cn 150 4.2 轻载 图 4 轻载下负载均衡对消息延时的影响 在轻载情况下,负载均衡使消息的传递延时保持在一个比较稳定的范围内抖动,达到了 155 预期的目标。而未使用负载均衡的情况下,由于两个主题叠加之后施加给消息代理的工作负 载仍然超过了其处理能力,导致消息队列不断变长,这使得消息的时延依旧是不断增加。 5 结论 本文针对分布式发布订阅系统,设计了一种基于消息代理实时工作负载状态的负载均衡 机制。通过使用分布式协调服务保存状态信息,发布者在发布消息之前,可以根据从协调服 务获得的负载信息来判断所发布消息的目标消息代理,以此达到实时的消息层面的细粒度工 作负载均衡。经过仿真验证,本文设计的负载均衡确实能够达到缩短消息的传递延时的目的。 160 [参考文献] (References) [1] 马建刚, 黄涛, 汪锦岭, 徐罡, 叶丹. 面向大规模分布式计算发布订阅系统核心技术[J], 软件学报, 2006,17(1):134-147. [2] Eugster P T, Felber P A, Guerraoui R, et al. The many faces of publish/subscribe[J]. ACM Computing Surveys (CSUR), 2003, 35(2): 114-131. [3] Alex King Yeung Cheung and Hans-arno Jacobsen. Load Balancing Content-Based Publish/Subscribe Systems. ACM Transactions on Computer Systems, 2010, 28(4):1-55. [4] Jay Kreps, Neha Narkhede, and Jun Rao. Kafka: a distributed messaging system for log processing[A]. ACM SIGMOD Workshop on Networking Meets Databases[C]. Athens:ACM, 2011. 6-12. [5] Hunt P, Konar M, Junqueira F P, et al. ZooKeeper: wait-free coordination for internet-scale systems[J]. Proceedings of the 2010 USENIX conference on USENIX annual technical conference. 2010, 8: 11-11. [6] Teerawat Issariyakul, Ekram Hossain. Introduction to Network Simulator NS2[M]. United States of America:Springer, 2008. [7] Kevin Fall, Kannan Varadhan. The ns Manual[OL]. [2011]. http://www.isi.edu/nsnam/ns/doc/index.html 165 170 175 - 6 -
分享到:
收藏