发明内容
本发明提供了一种实用的数据分发方法及***,以解决大规模应用***中需要将数据生产者生产的数据准实时均衡地分发到各数据消费者上的问题。
一种数据分发***,包括:数据均衡器、部署在数据生产者上的数据分发器、部署在数据消费者上的数据接收器。所述数据均衡器向数据生产者和数据消费者发送存活确认信息进行存活状态的确认,并定时向得到确认的数据生产者发送新的待分发的数据消费者信息;所述数据分发器接收数据均衡器发送过来的数据消费者信息后会建立新的数据传输通道进行数据发送;所述数据接收器同数据分发器建立起新的数据传输通道进行数据的接收。
所述数据均衡器、数据分发器、数据接收器可部署在通用的PC服务器上(内存2GB以上),PC服务器上需安装centos5.5以上linux操作***。
具体地,数据均衡器是数据分发***的核心,负责数据分发相关的规划和管理。有几个重要功能:
数据生产者信息和数据消费者信息通过produce.txt(主要包括数据生产者的IP地址和发送端口号)和consume.txt(主要包括数据消费者的IP地址和接收端口号)以文件的形式保存在数据均衡器上。在数据均衡器启动时,会将这两个文件中的信息加载到内存中,然后向数据生产者和数据消费者的服务器节点发送存活确认信息(同时包括心跳定时参数、数据分片定时参数、磁盘可用空间参数、NUMS_OF_CONSUME参数等),对得到确认的数据生产者和数据消费者分别保存在数据生产者和数据消费者对应的当前存活列表中,对没有响应的数据生产者和数据消费者分别保存在数据生产者和数据消费者对应的当前不可达列表中。数据均衡器会每隔一段时间向当前不可达的服务器节点发送存活确认信息,以保障后续可达的服务器能够被及时发现并添加到对应的当前存活列表中。
此外数据均衡器还维护着数据生产者和数据消费者的当前异常列表。这些异常主要包括指定的存储空间达到上限、文件***只读、服务器节点目前处在非集群模式等。上述两个当前异常列表不包括存活确认验证中没有得到确认的当前不可达的服务器信息,因为这部分服务器需要定时发送存活确认信息。
数据均衡器在运行过程中,会实时监控produce.txt和consume.txt两个文件,一旦发现文件被修改,就会对其进行重新读入,然后结合当前存活列表、当前不可达列表、当前异常列表这三类列表进行分析,对文件中已经删除的,会从上述列表中删除;对新添加的,发送存活确认信息,得到确认的保存到对应的当前存活列表中,对没有响应的添加到对应的当前不可达列表中。
数据分发器和数据接收器在获得存活确认信息后会定时向数据均衡器发送心跳信息,数据均衡器在运行过程中会通过接收心跳信息监控数据生产者和数据消费者。超过心跳定时时间没有收到心跳信息的,会认为服务器已经处于不可达状态,会把它移到当前不可达列表中。如果心跳信息中包含了异常信息(包括磁盘可用空间超过设定值、磁盘只读、服务器目前处在非集群模式等),则会把它移到当前异常列表中。如果心跳信息中无其它异常的,则会保留在当前存活列表中不动。
数据均衡器会定时(通过数据分片定时参数SECONDS_OF_SENDING配置,单位为秒)向当前存活列表中所有的数据生产者发送新的待分发的数据消费者信息。数据生产者会根据新的待分发的数据消费者信息进行数据分发操作。每个数据生产者待分发的数据消费者资源由数据均衡器进行管理和维护,具体是通过对数据生产者和数据消费者采用滚动循环分发机制实现,其中用到了NUMS_OF_CONSUME参数。该参数用来控制在循环滚动分发过程中,单台数据生产者在同一时刻可以同时分发的数据消费者数量。如果NUMS_OF_CONSUME设置为1,则一个数据生产者在同一时刻只能对应一个数据消费者,如果NUMS_OF_CONSUME设置为n,则一个数据生产者可以在同一时刻对应n个数据消费者。滚动循环分发机制主要是:数据均衡器完成当前存活列表的确认,并且数据生产者的当前存活列表和数据消费者的当前存活列表均有值的情况下,数据均衡器会生成一个数据生产者分发对应的循环表;在每次数据分发定时时间到的时候,数据均衡器会更新循环表,然后向数据生产者发送更新后的数据消费者信息;在循环表指到数据消费者的当前存活列表的尾后,会从数据消费者的当前存活列表的头重新开始。
部署在数据生产者上的数据分发器主要负责以下工作:
数据生产者上的数据分发器启动后会启动一个专用线程等待数据均衡器的存活确认信息到达,收到后会保存数据均衡器的相关信息,并回复确认信息(反馈当前状态为正常或异常);
数据分发器在收到数据均衡器的存活确认信息后会定时向数据均衡器发送心跳信息(心跳信息和回复的确认信息内容完全相同,回复的确认信息是在数据均衡器的存活确认信息到达立刻回复的信息,而心跳信息是数据分发器定时主动发送的信息),定时频率由数据均衡器的存活确认信息中的心跳定时参数(SECONDS_OF_HEARTBEAT)设置,单位为秒决定。在心跳信息中会包含指定的存储空间使用情况信息、文件***是否只读、服务器目前是否处在手动设置状态等信息。
此外数据分发器会启动专门的线程实时等待数据均衡器发送新的待分发的数据消费者信息过来。一旦收到数据均衡器发送过来的新的待分发的数据消费者信息后,会关闭原先的数据传输通道(部分数据传输过程是原子性操作的,等这部分数据传输完毕,再完成关闭操作),根据新的待分发的数据消费者信息向数据接收器发送建立数据传输通道的请求及在建立新的数据传输通道后进行数据传输。
部署在数据消费者上的数据接收器主要负责以下工作:
数据接收器启动后会启动一个专用线程等待数据均衡器的存活确认信息到达,收到后会保存数据均衡器的相关信息,并回复确认信息;
数据接收器在收到数据均衡器的存活确认信息后定时向数据均衡器发送心跳信息,定时频率由数据均衡器发送的存活确认信息中包含的心跳定时信息(SECONDS_OF_HEARTBEAT参数设置,单位秒)决定。在心跳信息中会包含指定的存储空间使用情况信息、文件***是否只读、服务器目前是否处在手动设置状态等信息。
数据接收器会启动专门的线程实时等待数据生产者上的数据分发器建立数据传输通道的请求。一旦收到建立数据传输通道的请求,则启动一个新的专用线程进行数据的接收任务。
数据分发***还可以通过使用辅助数据均衡器来提供数据均衡器的冗余性。辅助数据均衡器是在数据均衡器发生故障时提供数据均衡器相关服务的一个备用均衡器。在数据均衡器正常情况下,该均衡器只是定时完成与数据均衡器的信息同步操作,不参与数据均衡器的均衡功能。在诊断到数据均衡器故障后,会向数据生产者和数据消费者发送存活确认信息,进而提供数据均衡器相关服务,同时会实时诊断数据均衡器的状态。在发现数据均衡器恢复正常后,会先向数据均衡器完成信息同步,然后向数据均衡器发起备用状态切换请求。数据均衡器在收到辅助数据均衡器的状态切换请求后,一方面会向辅助数据均衡器发送同意切换确认信息;另一方面向数据生产者和数据消费者发送存活确认信息,进而切换主用状态。辅助均衡器在收到同意切换确认信息后从主用状态切换为备用状态。
此外,为了满足部分数据生产者和部分数据消费者可以脱离数据均衡器的数据分发管理,在数据分发***中添加了非集群模式。配置为非集群模式的数据生产者和数据消费者,数据均衡器会将他们从当前存活列表移到当前异常列表中,不再对其进行资源分发。此时配置为非集群模式下的数据生产者和数据消费者可以按照配置好的一对一或一对多的分发模式进行数据分发。
一种利用上述数据分发***进行数据分发的方法,包括以下步骤:
1)数据均衡器向数据生产者和数据消费者发送存活确认信息,进行数据生产者和数据消费者启动后的首次状态确认;
2)数据均衡器向得到确认的数据生产者中的数据分发器发送新的待分发的数据消费者信息;
3)数据分发器收到新的待分发的数据消费者信息后,向指定的数据消费者的数据接收器发起建立数据传输通道的请求并在新的数据传输通道建立后进行数据传输;
4)数据消费者中的数据接收器接收数据分发器发送过来的建立数据传输通道的请求后同数据分发器建立起新的数据传输通道进行数据接收。
本发明提供的数据分发方法及***,通过引入滚动循环分发机制,在不改变机器配置和网络现状的情况下,彻底解决了大规模应用***中存在的数据生产者向数据消费者分发数据时经常遇到数据分发不均问题。数据分发速度较之前没有任何影响。此外通过引入非集群模式,解决了个别数据生产者需要向特定的几台数据消费者分发数据的需求。
具体实施方式
下面结合两个实施例对发明做进一步说明。当然此处描述的具体实施案例仅用于解释本发明,而非对本发明的限定。
本发明数据分发***的整体框架图如图1所示,数据生产者1到数据生产者n要向数据消费者1到数据消费者m进行数据分发。通过在数据生产者上部署数据分发器,在数据消费者上部署数据接收器,同时配置两台PC服务器,分别在上面部署数据均衡器和辅助数据均衡器,可以很好地实现数据分发操作。数据通道是他们之间的数据传输链路。分发管理通道是数据生产者和数据消费者与数据均衡器和辅助数据均衡器之间的控制管理通道。这两个通道在物理上可以是一条物理链路。
实施例1
图2给出了4个数据生产者(用A,B,C,D标识)和6个数据消费者(用1,2,3,4,5,6标识)情况下且NUMS_OF_CONSUME设置为1、SECONDS_OF_HEARTBEAT参数为10秒、SECONDS_OF_SENDING参数为300秒、磁盘可用空间为30GB以上的情况下的数据分发过程。
***部署时除了需要在4个数据生产者和6个数据消费者上分别安装数据分发器和数据接收器外,还需要一台数据均衡器(辅助数据均衡器可选配)。数据生产者和数据消费者上除了部署各自的程序外,不用进行其他配置(默认是自动模式)。整个配置均在数据均衡器上完成。
数据均衡器上需要配置4个数据生产者的IP地址及发送端口号,6个数据消费者的IP地址及接收端口号及心跳定时信息、数据分片传输定时信息、NUMS_OF_CONSUME信息等。在***程序部署和数据均衡器配置完毕后,即可对其进行启动。
启动过程没有先后顺序,建议先启动数据生产者和数据消费者,再启动数据均衡器,这样可以减少设备间的交互操作。
在数据均衡器、数据生产者、数据消费者均启动完毕后,数据均衡器会向数据生产者发送第一次分发地资源。这样在第一个数据分发时间片里,A向1发送数据,B向2发送数据,C向3发送数据,D向4发送数据。期间数据生产者和数据消费者会定期向数据均衡器发生心跳信息汇报自己的状况。
在第一个数据分发时间片到时间后,数据均衡器会根据第一个数据分发时间片期间整理的各节点的健康状况结果发送第二次分发地资源。这样在第二个数据分发时间片里,A就向2发送数据,B就向3发送数据,C就向4发送数据,D就向5发送数据。此时各个数据生产者向对应的数据消费者发送的数据是不能保障均衡的,数据分发的均衡是通过一个长时间的滚动发送来保障的。
在第二个数据分发时间片到达之后,数据均衡器会发送第三次分发地资源。这样在第三个数据分发时间片里,A就向3发送数据,B就向4发送数据,C就向5发送数据,D就向6发送数据。如此循环,整个数据的分发过程就持续进行下去了。
如果在这期间4数据消费者发生故障,数据均衡器会收不到4节点的心跳信息,因此会将其从当前存活列表中移到当前不可达列表中,并且在下一轮的数据分发过程中将不再将其考虑在内。如果过了一段时间4节点故障排查了。它会收到数据均衡器定时发送过来的存活信息查询的请求,通过对其健康状况的判断数据均衡器会决定是否需要将其添加到当前存活列表中。
实施例2
图3给出了4个数据生产者(用A,B,C,D标识)和6个数据消费者(用1,2,3,4,5,6标识)情况下且NUMS_OF_CONSUME设置为2、SECONDS_OF_HEARTBEAT参数为10秒、SECONDS_OF_SENDING参数为300秒、磁盘可用空间为30GB以上的情况下的时数据分发过程。
***部署和启动顺序同NUMS_OF_CONSUME设置为1时完全一样。唯一不同的是把NUMS_OF_CONSUME设置为2。
在数据均衡器、数据生产者、数据消费者均启动完毕后,数据均衡器会向数据生产者发送第一次分发地资源。由于NUMS_OF_CONSUME设置为了2,这样在第一个数据分发时间片里,A向1和2发送数据,B向3和4发送数据,C向5和6发送数据,D向1和2发送数据。这里一对多的发送模式是为了满足一对一发送模式下发送速度不能跟上数据生产速度时的一种并发发送机制。这里的一对多的发送机制汇总的数据分发是比较均衡的。
在第一个数据分发时间片到达之后,数据均衡器会发送第二次分发地资源。这样在第二个数据分发时间片里,A向3和4发送数据,B向5和6发送数据,C向1和2发送数据,D向3和4发送数据。
在第二个数据分发时间片到达之后,数据均衡器会发送第三次分发地资源。这样在第三个数据分发时间片里,A向5和6发送数据,B向1和2发送数据,C向3和4发送数据,D向5和6发送数据。如此循环,整个数据的分发过程就持续进行下去了。
如果在此期间,有一个特殊需要,需要A单独向1发送数据,其他仍按照原先既定模式分发数据。这时需要把A的数据分发器停掉,把自动模式设置为手动模式,同时配置自己的数据存放路径和数据消费者IP地址,需要把1的数据接收器停掉,把自动模式设置为手动模式,同时配置自己的数据存放路径,然后启动A和1即可。
本发明不限于实施例中给出的两个分发方式,特别是在数据生产者和数据消费者数量上可以支持到三千个以内。