基于半同步半异步和管道过滤器模式的服务器设计方法

文档序号:6623067阅读:425来源:国知局
基于半同步半异步和管道过滤器模式的服务器设计方法
【专利摘要】本发明提供一种基于半同步半异步和管道过滤器模式的服务器设计方法,所述方法包括:步骤1、将所述半同步层设计成包括复数个数据处理模块;步骤2、将管道过滤器模式应用到半同步层的数据处理模块中;步骤3、将所述复数个数据处理模块通过一链表顺序地链接在一起;步骤4、将二进制指数退避策略应用到所述客户端的应用层中。采用本设计方法后,整个服务器体系将具备以下优点:系统的并发性得到了很大的提高,且具有良好的扩展性;可以动态添加或者删除数据处理模块,使数据处理更具高效性、灵活性;可以通过二进制指数退避策略有效缓解服务器压力,同时也提高了服务器的运行能力。
【专利说明】基于半同步半异步和管道过滤器模式的服务器设计方法

【技术领域】
[0001] 本发明涉及一种服务器设计方法,特别涉及基于半同步半异步和管道过滤器模式 的服务器设计方法。

【背景技术】
[0002] 随着信息技术的不断发展,新兴的电脑,手机及各种媒体终端也不断涌现,这也使 如何让这些不同的终端相互通信与协作成为一个挑战。网络服务器作为分布式应用的核心 部件,其设计的好坏将直接影响到整个分布式应用的性能。虽然目前已经有一些较为成熟 的设计模式已被应用到网络服务器中,并在一定程度上提高了服务器的性能,比如半同步 半异步模式等,但当前使用的网络服务器仍然存在有这样或者那样的问题,这些网络服务 器的结构和缺点如下:
[0003] (1) -个客户端连接一个线程/进程的网络服务器
[0004] 如图1所示,图中每一虚线框内的曲线均代表一个线程/进程;在该网络服务器模 型中,当一个新的网络连接请求到达的时候,一个新的线程/进程将被创建并与这个新的 网络连接请求关联。这个新创建的线程/进程不仅要负责建立新的连接,接收网络连接上 的数据,而且要负责处理网络数据,发送处理结果到客户端,处理中间出现的各种错误及关 闭网络连接。所以该服务器模型存在以下缺点:a、业务逻辑和网络逻辑没有被分离开来,两 者之间会相互影响,这也会增加系统出错的概率;b、当大量的网络连接请求同时到达时,将 会创建与网络连接请求数目相同的线程,这会占用大量的系统资源,在最坏情况下可能会 导致系统瘫痪;c、业务逻辑和网络逻辑之间存在耦合,一旦业务逻辑发生变化,系统需要进 行较大改动,这会增加系统维护的难度;d、如果所有的线程是在同一个进程中创建的,当其 中任何一个线程出错,整个应用程序就会发生崩溃; e、进程间会发生频繁通信,这会耗费 大量的系统资源,导致系统性能低下。
[0005] (2)基于线程池的网络服务器
[0006] 如图2所示,图中虚线椭圆代表一个线程池,虚线椭圆内的一条曲线代表一个线 程;该模型中,在网络连接请求到达之前,网络服务器便会创建固定数目的线程等待网络连 接请求的到达,当网络连接请求到达的时候,网络服务器就从线程池中选择一个空闲的线 程来处理该网络连接请求。在该模型中,线程池中线程的数量是固定的,且一个线程可以在 不同时间,为不同的网络连接提供服务,同时这种网络服务器只会占用固定的系统资源,不 会给系统带来过大的负荷,但是它的缺点是:当并发的网络连接请求数目大于线程池中线 程数目的时候,它将不能同时处理所有的网络连接请求,这会使一些网络连接请求被阻塞 一定时间。
[0007] (3)基于领导者跟随者的网络服务器
[0008] 基于领导者跟随者的网络服务器提供了一个高效的并发模型,其中多个线程轮流 共用一组事件源,以便及时发现活跃的网络连接并处理它们。但是这种模型中没有使用消 息队列,因此这种服务器不能同时处理大量的并发网络连接请求。
[0009] (4)基于半同步半异步设计模式的网络服务器
[0010] 如图3所示,基于半同步半异步设计模式的网络服务器分为三个层次,从上往下 分别是半异步层,排队层和半同步层。在半异步层使用单个线程来监听网络端口并建立网 络连接;在排队层使用一个队列来缓冲已经建立的连接;在半同步层用一个线程池来处理 网络连接请求,这样设计可以将网络逻辑和业务逻辑分离开来,同时,排队层的存在也可以 将大量的连接缓冲一段时间,避免了网络连接的丢失和阻塞。但是这种网络服务器也存在 以下缺点:a、当业务逻辑比较复杂的时候(比如要处理较复杂的网络应用协议),半同步层 的线程池策略不够灵活;b、并发层次比较单一;c、不能动态的增加和减少业务处理逻辑模 块。


【发明内容】

[0011] 本发明要解决的技术问题,在于提供一种基于半同步半异步和管道过滤器模式的 服务器设计方法,通过使用管道过滤器模式与数据处理模块的线程池相结合的方式来设计 服务器的半同步层,并可动态添加或删除数据处理模块,增加了系统的并发性、灵活性,且 具有良好的扩展性。
[0012] 本发明是这样实现的:基于半同步半异步和管道过滤器模式的服务器设计方法, 所述基于半同步半异步模式的服务器包括半异步层、排队层及半同步层,所述半异步层接 收客户端的网络连接数据后,便将网络连接数据通过所述排队层传递给所述半同步层,所 述方法包括以下步骤:
[0013] 步骤1、将所述半同步层设计成包括复数个数据处理模块,且每一所述数据处理模 块均包括一线程池以及一与之关联的消息队列;
[0014] 步骤2、将管道过滤器模式应用到半同步层的数据处理模块中,利用管道过滤器模 式将一个复杂的任务分解为复数个连续的分任务,并将每一所述分任务均交由一对应数据 处理模块进行处理,处理的最终结果则通过所述排队层及半异步层返回给客户端。
[0015] 进一步的,所述方法还包括如下步骤:
[0016] 步骤3、将所述复数个数据处理模块通过一链表顺序地链接在一起,且每个数据处 理模块均对应链表上的一个节点,同时该链表还支持数据处理模块的添加或删除。
[0017] 进一步的,所述方法还包括如下步骤:
[0018] 步骤4、将二进制指数退避策略应用到所述客户端的应用层中。
[0019] 进一步的,所述步骤2具体为:将管道过滤器模式应用到半同步层的数据处理模 块中,利用管道过滤器模式将一个复杂的任务分解为复数个连续的分任务,当一个数据处 理模块的线程池从自身的消息队列中取出数据,并处理完一个分任务后,得到的处理结果 将被放入下一个相邻的数据处理模块的消息队列中,该相邻的数据处理模块的线程池又会 对下一个分任务进行处理,得到的处理结果又将被放入下一个相邻的数据处理模块的消息 队列中,如此循环执行下去,直到经过最后一个数据处理模块处理后,将得到一个最终结 果,该最终结果又将通过所述排队层及半异步层返回给客户端。
[0020] 进一步的,所述数据处理模块的添加或删除具体为:当要添加一个数据处理模块 时,首先创建一个新的数据处理模块,然后对链表进行加锁,最后调用链表插入函数将数据 处理模块插入到链表中,并将锁释放;当要删除一个数据处理模块时,则先对链表进行加 锁,然后调用链表删除函数将要删除的数据处理模块从链表中删除,之后将锁释放。
[0021] 进一步的,所述二进制指数退避策略步骤如下:
[0022] ①定义初始化网络连接超时时间,即第一次网络连接超时时间t ;
[0023] ②定义进行一次网络连接失败后,需要重新尝试进行网络连接的次数η ;
[0024] ③设定新的网络连接超时时间等于前一次网络连接超时时间乘以Ν,且Ν大于零;
[0025] ④若网络连接成功,则将数据发送到网络;若尝试了 η次网络连接后仍然失败,则 生成一个数据连接失败的错误并报告给上层应用。
[0026] 本发明具有如下优点:1、可以并发的发送、接收及处理数据,具有良好的可扩展性 及并发性;2、可以动态的添加或删除数据处理模块,具有较强的灵活性;3、在客户端的应 用层采用了二进制指数退避策略,可以有效缓解服务器压力,并提高整个服务器的运行能 力。

【专利附图】

【附图说明】
[0027] 下面参照附图结合实施例对本发明作进一步的说明。
[0028] 图1为现有技术中一个客户端连接一个线程或进程的网络服务器体系结构图。
[0029] 图2为现有技术中基于线程池的网络服务器体系结构图。
[0030] 图3为现有技术中基于半同步半异步模式的网络服务器体系结构图。
[0031] 图4为管道过滤器模式的一典型模型示意图。
[0032] 图5为本发明服务器的体系结构图。
[0033] 图6为本发明中添加数据处理模块的流程图。
[0034] 图7为本发明服务器运行流程图。

【具体实施方式】
[0035] 请参照图4至图7所示,一种基于半同步半异步和管道过滤器模式的服务器设计 方法,所述基于半同步半异步模式的服务器包括半异步层、排队层及半同步层,所述方法包 括以下步骤:
[0036] 步骤1、将所述半同步层设计成包括复数个数据处理模块,且每一所述数据处理模 块均包括一线程池以及一与之关联的消息队列;
[0037] 步骤2、将管道过滤器模式应用到半同步层的数据处理模块中,利用管道过滤器 模式将一个复杂的任务分解为复数个连续的分任务,当一个数据处理模块的线程池从自身 的消息队列中取出数据,并处理完一个分任务后,得到的处理结果将被放入下一个相邻的 数据处理模块的消息队列中,该相邻的数据处理模块的线程池又会对下一个分任务进行处 理,得到的处理结果又将被放入下一个相邻的数据处理模块的消息队列中,如此执行下去, 直到经过最后一个数据处理模块处理后,将得到一个最终结果,该最终结果又将通过所述 排队层及半异步层返回给客户端。其中,管道过滤器模式的一典型模型如图4所示,所述典 型模型包括一数据源、第一过滤器、第二过滤器及处理结果槽,所述数据源通过第一管道连 接所述第一过滤器,该第一过滤器通过第二管道连接所述第二过滤器,所述第二过滤器又 通过第三管道连接所述处理结果槽,且在该模型中的数据传输需要满足以下要求:所述数 据源的输出必须与所述第一过滤器的输入兼容,所述第一过滤器的输出必须与所述第二过 滤器的输入兼容,所述第二过滤器的输出必须与所述处理结果槽的输入兼容;本发明就是 通过将该管道过滤器模式应用到半同步层的数据处理模块中,实现对复杂任务的分解及处 理,从而提高系统的并发性。
[0038] 如图5所示,将管道过滤器模式应用到半同步层的数据处理模块后,网络服务器 的每个层次职责如下 :
[0039] 半异步层:使用一个线程或线程池来监听网络端口,等客户端网络连接请求到达 时,便建立网络连接,并将获取的网络连接数据放入网络套接字队列(排队层)中;
[0040] 排队层:负责缓冲网络连接数据,提供半异步层与半同步层之间的通信,使半异步 层与半同步层之间解耦。
[0041] 半同步层:将排队层的网络连接数据分解成复数个(这里用自然数N表示)连续 的分任务并对各分任务进行处理,之后将最终结果返回给客户端。例如图5中,线程池A从 自己的消息队列A中取出数据并对一个分任务进行处理后,相应的处理结果就会被放入下 一个相邻的消息队列B中供线程池B继续进行处理,线程池B处理完一个分任务后,相应的 处理结果又会被放入下一个相邻的消息队列中供对应的线程池取出继续处理;接下来的线 程池都会对各自的分任务进行处理,并将相应处理结果放入下一个相邻的消息队列中,直 到经过最后一个线程池N处理后,放入消息队列N的最终结果将被返回给客户端。
[0042] 优选的,所述方法还包括如下步骤:
[0043] 步骤3、将所述复数个数据处理模块通过一链表顺序地链接在一起,且每个数据处 理模块均对应链表上的一个节点,同时该链表还支持数据处理模块的添加或删除,当要添 加一个数据处理模块时,首先创建一个新的数据处理模块,然后对链表进行加锁以保证同 一时刻只有一个线程操作链表,最后调用链表插入函数将数据处理模块插入到链表中,并 将锁释放;当要删除一个数据处理模块时,则先对链表进行加锁,然后调用链表删除函数将 要删除的数据处理模块从链表中删除,之后将锁释放。其中,所述数据处理模块均处于闲置 状态、活跃状态、不活跃状态、运行状态中的一个状态,且各状态间的转换过程如下:当创建 一个新的数据处理模块时,该数据处理模块处于空闲状态;当获得锁并将新创建的数据处 理模块插入链表时,该数据处理模块便由空闲状态变为活跃状态;当释放锁时,该数据处理 模块便由活跃状态变为运行状态,在进行处理数据时,该数据处理模块仍处于运行状态;当 为了将另一个新创建的数据处理模块插入链表而获取锁时,该数据处理模块便由运行状 态变为活跃状态;当暂停数据处理时,该数据处理模块便由运行状态变为不活跃状态;当 恢复数据处理时,该数据处理模块便由不活跃状态变为运行状态。
[0044] 如图6所示,该链表包括链表头、节点a、节点b及节点c,我们要在节点a与节点 b对应的数据处理模块之间添加一个新的数据处理模块;首先创建一个新的数据处理模块 (该新的数据处理模块对应的节点为新模块节点);然后对整个未获得锁的链表加锁以保 证同一时刻只有一个线程操作链表;最后调用链表的插入函数将新模块节点插入到节点a 与节点b之间(在链表断开时可以创建一个临时指针指向节点b),即将新的数据处理模块 插入到节点a与节点b对应的数据处理模块之间,同时将锁释放,这样一个新的数据处理模 块就添加完成了。
[0045] 其中,将所述复数个数据处理模块通过一链表顺序地链接在一起,主要是因为当 前的分布式应用要处理各种复杂的业务逻辑和解析多种应用层协议,而传统的静态数据处 理显得不够灵活和高效,例如,当我们想要添加或删除一些数据处理模块时,我们必须先停 止整个系统,然后重新编写整个数据处理流程或做大量的改变以及重新编译源代码获得可 执行文件,这不仅会花费大量的时间,且会让系统变得不稳定。而使用一个链表将所有的 数据处理模块顺序地链接在一起后,我们就可以在不停止整个系统运行的情况下进行数据 处理模块的添加或者删除,这大大增加了系统的灵活性,且添加或删除一个数据处理模块 不是一个非常频繁的操作,并经常在凌晨进行(网络服务器的维护和升级一般都在凌晨进 行),因此,在添加或者删除过程中持有的系统开销也是可以接受的。
[0046] 优选的,所述方法还包括如下步骤:
[0047] 步骤4、将二进制指数退避策略应用到所述客户端的应用层中。所述二进制指数退 避策略的具体实施步骤如下:
[0048] ①使用参数initialDelayTime定义初始化的网络连接超时时间,即第一次网络 连接超时时间t ;
[0049] ②使用参数NumberOfReconnect定义进行一次网络连接失败后,需要重新尝试进 行网络连接的次数η ;
[0050] ③设定新的网络连接超时时间等于前一次网络连接超时时间乘以Ν,其中Ν大于 零;
[0051] ④若网络连接成功,则将数据发送到网络;若尝试η次网络连接后仍然失败,则生 成一个数据连接失败的错误并报告给上层应用。
[0052] 之所以使用二进制指数退避策略,是因为在网络通信系统中,可能存在多个客户 端同时向网络服务器发起网络连接请求,但是网络服务器的处理能力又是有限的,为了防 止网络服务器承载过多的连接请求,我们在客户端应用层使用了二进制指数退避策略,从 而缓解了网络服务器的压力。
[0053] 具体实施例:
[0054] 如图7所示,图中黑色实心圆圈代表网络端口;空心圆圈代表节点;虚线椭圆代表 线程池;包含多个小矩形的矩形框代表消息队列。该网络服务器使用一个单独的线程来监 听网络端口,且每一个数据处理模块都拥有独立的线程池和消息队列来处理网络信息和缓 冲处理结果,实现各个线程池之间的解耦。每个线程池中线程的数量可以根据具体情况来 指定,设计完成后,网络服务器的运行过程如下:
[0055] (1)客户端向网络服务器发起网络连接请求,在网络连接建立后便向服务器发送 数据;
[0056] (2)网络服务器监听指定端口的线程,在收到网络连接请求以后便建立网络连接, 并将建立好的网络连接(建立好的网络连接在系统中实际为一个socket)放入输入队列;
[0057] (3)半异步层的线程池从输入队列中取出一个socket连接并调用select函数在 该socket上等待网络事件的发生。其中,select函数可以同时等待多个socket连接上的 网络事件,在select的机制中还提供了 fd_set的数据结构,它实际上是一个long类型的 数组,每一个数组元素都能与一个socket连接关联起来(关联的工作由程序员完成),当调 用select函数时,由内核根据10状态修改fd_set的内容,用此来通知调用了 select函数 的进程哪一个socket连接上有网络事件发生;当网络数据到达时,线程会接收并处理网 络数据,同时得到一个处理结果;
[0058] (4)半异步层的线程池将(3)中得到的处理结果放入到链表中节点a对应的数据 处理模块的消息队列中,在图7中,链表的节点a对应的数据处理模块是模块A ;
[0059] (5)模块A的线程池从自己的消息队列中取出待处理的数据并进行处理,得到一 个处理结果,之后根据节点a指向的下一个节点为节点b,模块A得到的处理结果又会被放 入下一个数据处理模块的消息队列中,图中模块A的下一个数据处理模块为模块B ;
[0060] (6)模块B以及之后的模块均会依次对前一模块传来的处理结果做进一步处理, 直到遇见链表的最后一个模块,图中链表的最后一个模块是模块C ;
[0061] (7)链表的最后一个模块(模块C)的线程池从自己的消息队列中取出待处理的数 据并进行处理,之后将处理的最终结果放入半异步层的输出队列中;
[0062] (8)半异步层的线程池会从输出队列中取出处理的最终结果并通过网络端口发送 给客户端。
[0063] 综上所述,我们可以发现,本发明具有以下优点:可以并发的发送、接收及处理数 据,具有良好的可扩展性及并发性;可以动态的添加或删除数据处理模块,具有较强的灵活 性;在客户端的应用层采用了二进制指数退避策略,可以有效缓解服务器压力,并提高整个 服务器的运行能力。
[0064] 虽然以上描述了本发明的【具体实施方式】,但是熟悉本【技术领域】的技术人员应当理 解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本 领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的 权利要求所保护的范围内。
【权利要求】
1. 一种基于半同步半异步和管道过滤器模式的服务器设计方法,所述基于半同步半异 步模式的服务器包括半异步层、排队层及半同步层,所述半异步层接收客户端的网络连接 数据后,便将网络连接数据通过所述排队层传递给所述半同步层,其特征在于:所述方法包 括以下步骤: 步骤1、将所述半同步层设计成包括复数个数据处理模块,且每一所述数据处理模块均 包括一线程池以及一与之关联的消息队列; 步骤2、将管道过滤器模式应用到半同步层的数据处理模块中,利用管道过滤器模式将 一个复杂的任务分解为复数个连续的分任务,并将每一所述分任务均交由一对应数据处理 模块进行处理,处理的最终结果则通过所述排队层及半异步层返回给客户端。
2. 根据权利要求1所述的基于半同步半异步和管道过滤器模式的服务器设计方法,其 特征在于:所述方法还包括如下步骤: 步骤3、将所述复数个数据处理模块通过一链表顺序地链接在一起,且每个数据处理模 块均对应链表上的一个节点,同时该链表还支持数据处理模块的添加或删除。
3. 根据权利要求1或2所述的基于半同步半异步和管道过滤器模式的服务器设计方 法,其特征在于:所述方法还包括如下步骤: 步骤4、将二进制指数退避策略应用到所述客户端的应用层中。
4. 根据权利要求1所述的基于半同步半异步和管道过滤器模式的服务器设计方法,其 特征在于:所述步骤2具体为:将管道过滤器模式应用到半同步层的数据处理模块中,利用 管道过滤器模式将一个复杂的任务分解为复数个连续的分任务,当一个数据处理模块的线 程池从自身的消息队列中取出数据,并处理完一个分任务后,得到的处理结果将被放入下 一个相邻的数据处理模块的消息队列中,该相邻的数据处理模块的线程池又会对下一个分 任务进行处理,得到的处理结果又将被放入下一个相邻的数据处理模块的消息队列中,如 此循环执行下去,直到经过最后一个数据处理模块处理后,将得到一个最终结果,该最终结 果又将通过所述排队层及半异步层返回给客户端。
5. 根据权利要求2所述的基于半同步半异步和管道过滤器模式的服务器设计方法,其 特征在于:所述数据处理模块的添加或删除具体为:当要添加一个数据处理模块时,首先 创建一个新的数据处理模块,然后对链表进行加锁,最后调用链表插入函数将数据处理模 块插入到链表中,并将锁释放;当要删除一个数据处理模块时,则先对链表进行加锁,然后 调用链表删除函数将要删除的数据处理模块从链表中删除,之后将锁释放。
6. 根据权利要求3所述的基于半同步半异步和管道过滤器模式的服务器设计方法,其 特征在于:所述二进制指数退避策略步骤如下: ① 定义初始化网络连接超时时间,即第一次网络连接超时时间t ; ② 定义进行一次网络连接失败后,需要重新尝试进行网络连接的次数η ; ③ 设定新的网络连接超时时间等于前一次网络连接超时时间乘以Ν,且Ν大于零; ④ 若网络连接成功,则将数据发送到网络;若尝试了 η次网络连接后仍然失败,则生成 一个数据连接失败的错误并报告给上层应用。
【文档编号】G06F9/52GK104219284SQ201410391320
【公开日】2014年12月17日 申请日期:2014年8月11日 优先权日:2014年8月11日
【发明者】王成, 赖雄鸣, 谢维波, 缑锦, 郑黎晓, 李静, 官威 申请人:华侨大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1