CN108023914B - 一种内存数据共享系统、内存数据的写入以及读取方法 - Google Patents
一种内存数据共享系统、内存数据的写入以及读取方法 Download PDFInfo
- Publication number
- CN108023914B CN108023914B CN201610953168.3A CN201610953168A CN108023914B CN 108023914 B CN108023914 B CN 108023914B CN 201610953168 A CN201610953168 A CN 201610953168A CN 108023914 B CN108023914 B CN 108023914B
- Authority
- CN
- China
- Prior art keywords
- data information
- memory
- server
- information
- slave server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/563—Data redirection of data network streams
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种内存数据共享系统、一种内存数据的写入方法、一种内存数据的读取方法、一种主服务器重载方法以及一种主服务器重载装置。其中,所述内存数据共享系统,包括:主服务器、从属服务器、客户端以及基于内存的文件系统;每一客户端与主服务器、至少一个从属服务器通信连接;主服务器与每一从属服务器通信连接;从属服务器中均安装基于内存的文件系统。采用上述系统将数据信息存储到内存中,保证了存储的数据的内容,解决了存储的数据会被覆盖的问题,此外由于将数据信息存储到内存中提高用户数据的访问效率,缩短用户请求响应时间,同时通过预设的对所述数据信息的处理方式,可以使用户方便的加工、缓存所需的数据节约存储空间的占用。
Description
技术领域
本申请涉及数据存储技术领域,具体涉及一种内存数据共享系统;本申请同时涉及一种内存数据的写入方法、一种内存数据的读取方法、一种主服务器重载方法以及一种主服务器重载装置。
背景技术
在分布式系统中,大数据的存储、分析与处理是最常见一类的用户作业。在目前的云产品中,用户经常会通过SQL语句来完成对数据的存储、查询与计算,在这种场景下,用户生成的数据以数据库表的形式存放在分布式存储系统中,为了节省存储空间,这些数据库表在存放时通常都会进行压缩处理,当数据需要被访问时,就需要进行解压以及一些其它操作,比如行列转换等,这些操作可能会花费较多时间,导致用户请求的响应时间变长,降低了访问效率。
目前为了提高访问效率,缩短用户请求的响应时间是将需要访问的输入数据存储在内存中,尽量避免磁盘I/O,多采用以下两种方式:一是:依赖底层的分布式存储系统,使用缓冲器存放最近被访问过的数据。当这部分数据再次被访问时,存储系统会直接将内存中的数据返回,而不需要重新读取磁盘;二是:在自己的作业逻辑中,将需要共享的数据存储起来。例如:利用RDD(Resilient Distributed Datasets)弹性分布式数据集机制对数据在进程内进行缓存,其它的用户作业可以向该用户作业发送请求,得到存储的数据。
由此可见,在现有的方案下,通过分布式存储系统提供存储功能,当缓冲器存满时,新写入缓冲器的数据会覆盖缓冲器中原有的数据。但在实际应用中,不同数据被访问的频率是不同的,一些数据会被反复访问,所以使用缓冲器时会造成数据频繁的唤入和唤出,造成性能下降;通过用户作业缓存数据时,需要提交一个完整的作业,占用空间。此外,当作业进程发生崩溃时,这些数据也会丢失需要重新加载,稳定性差,实现容错处理时负担较大。
发明内容
本申请提供一种内存数据共享系统,以解决现有技术中的上述问题。本申请同时涉及一种内存数据的写入方法、一种内存数据的读取方法、一种主服务器重载方法以及一种主服务器重载装置。
本申请提供了一种内存数据共享系统,所述内存数据共享系统,包括:
主服务器、从属服务器、客户端以及基于内存的文件系统;所述每一客户端与所述主服务器、至少一个所述从属服务器通信连接;所述主服务器与所述每一从属服务器通信连接;所述每一从属服务器中均安装基于内存的文件系统;
其中,所述从属服务器,用于接收所述主服务器发送的数据信息,并将所述数据信息写入到所述基于内存的文件系统中、接收所述客户端发送的获取数据信息的请求,从所述基于内存的文件系统中获取所述数据信息,并向所述客户端发送所述数据信息;
所述主服务器,用于接收所述客户端发送的加载数据信息的请求,所述加载数据信息的请求携带所述数据信息,提取并记录所述数据信息的属性,并向所述从属服务器转发所述数据信息、接收所述客户端发送的获取需求数据信息的请求,并向所述客户端反馈所述数据信息的属性;
所述客户端,用于向所述主服务器发送加载数据信息的请求,所述加载数据信息的请求携带所述数据信息、向所述主服务器发送获取需求数据信息的请求,接收所述主服务器反馈的所述数据信息的属性,根据所述属性向对应的从属服务器发送获取所述数据信息的请求,并接收所述从属服务器发送的数据信息;
所述基于内存的文件系统,用于在内存中存储所述数据信息。
可选的,所述客户端还用于在向所述主服务器发送加载数据信息的请求之前,向所述每一从属服务器发送预设的对数据信息的处理方式;
相应的,所述每一从属服务器在接收所述主服务器发送的数据信息之前,还用于接收预设的对所述数据信息的处理方式。
可选的,所述客户端还用于在向所述主服务器发送加载数据信息的请求之前,将所述数据信息划分为至少一个切片数据信息,并为所述数据信息创建特征标识,使每一切片数据信息携带所述数据信息的特征标识;
相应的,所述主服务器在接收所述客户端发送的加载数据信息的请求时,所述加载数据信息的请求还携带所述数据信息的特征标识。
可选的,在接收客户端发送的加载数据信息的请求之后,所述主服务器还用于判断所述加载数据信息的请求中携带的所述数据信息的特征标识是否存在;
若是,则向所述客户端发送加载所述数据信息失败的反馈信息;
若否,则记录所述数据信息以及所述数据信息的特征标识。
可选的,所述客户端还用于向主服务器发送加载数据信息的请求之后,若接收到所述主服务器发送的加载所述数据信息失败的反馈信息,则修改所述数据信息的特征标识,并重新向所述主服务器发送加载数据信息的请求。
可选的,所述从属服务器还用于按照预设的时间间隔向所述主服务器发送状态信息;
相应的,所述主服务器还用于接收所述每一从属服务器发送的状态信息;
其中,所述状态信息,至少包括:从属服务器的内存剩余量。
可选的,在接收所述每一从属服务器发送的状态信息之后,所述主服务器还用于判断所述每一从属服务器的内存剩余量是否低于预设的阈值;
若是,则释放所述从属服务器的内存,使所述从属服务器的内存剩余量大于预设的阈值。
可选的,所述主服务器向从属服务器发送所述数据信息,包括:
根据所述加载数据信息的请求携带的所述数据信息获取所述数据信息占用的内存空间;
根据每一从属服务器的内存剩余量选取从属服务器的内存剩余量大于所述数据信息占用的内存空间的从属服务器;
向选取的所述从属服务器发送所述数据信息。
可选的,所述从属服务器将所述数据信息写入到基于内存的文件系统中,包括:
按照所述预设的处理方式对所述数据信息进行处理;
将处理后的所述数据信息写入到基于内存的文件系统中。
可选的,所述从属服务器具体用于将处理后的所述数据信息以文件的形式写入到基于内存的文件系统中。
可选的,所述从属服务器还用于在所述按照所述预设的处理方式对所述数据信息进行处理时,将所述数据信息的处理结果设置为所述数据信息的写入状态。
可选的,所述从属服务器还用于将所述数据信息的写入状态作为该数据信息的状态信息,按照预设的时间间隔向所述主服务器发送状态信息;
相应的,所述主服务器在接收所述从属服务器发送的状态信息时,所述状态信息,至少包括:从属服务器的内存剩余量以及所述数据信息的写入状态信息。
可选的,所述主服务器还用于在所述接收所述从属服务器发送的状态信息时,若所述从属服务器发送的状态信息为失败,则判断所述数据信息的写入次数是否超过预设的写入阈值;
若是,则记录所述数据信息的属性为失败;
若否,则重新向所述从属服务器转发所述数据信息。
可选的,所述数据信息的属性,包括:
所述数据信息的状态信息以及将所述数据信息写入到基于内存的文件系统中的从属服务器信息。
可选的,所述客户端根据所述属性向对应的从属服务器发送获取所述数据信息的请求,包括:
获取所述属性中的从属服务器信息;
根据所述从属服务器信息获取与当前客户端的位置关系;
根据所述位置关系向从属服务器发送获取所述数据信息的请求。
可选的,所述客户端所述根据所述位置关系向从属服务器发送获取所述数据信息的请求,包括:
若所述从属服务器与当前客户端的地址相同,则通过内存映射的方式向所述从属服务器发送获取所述数据信息的请求;
若所述从属服务器与当前客户端的地址不相同,则通过远程调用协议向所述从属服务器发送获取所述数据信息的请求;
相应的,所述从属服务器从所述基于内存的文件系统中获取所述数据信息,并向所述客户端发送所述数据信息时,若通过内存映射的方式接收到所述客户端发送的获取数据信息的请求,则通过内存映射的方式向所述客户端发送所述数据信息;
若通过远程调用协议接收到所述客户端发送的获取数据信息的请求,则通过远程调用协议向所述客户端发送所述数据信息。
此外,本申请还提供了一种内存数据的写入方法,所述内存数据的写入方法,包括:
客户端向主服务器发送加载数据信息的请求,所述加载数据信息的请求携带所述数据信息;
所述主服务器接收所述客户端发送的加载数据信息的请求并提取所述数据信息,向从属服务器转发所述数据信息;
所述从属服务器接收所述主服务器发送的数据信息,并将所述数据信息写入到基于内存的文件系统中。
可选的,在所述客户端向所述主服务器发送加载数据信息的请求的步骤之前,包括:
所述客户端向所述每一从属服务器发送预设的对数据信息的处理方式;
相应的,在所述从属服务器接收所述主服务器发送的数据信息的步骤之前,包括:
所述从属服务器接收预设的对所述数据信息的处理方式。
可选的,在所述客户端向所述主服务器发送加载数据信息的请求的步骤之前,还包括:
将所述数据信息划分为至少一个切片数据信息,并为所述数据信息创建特征标识,使每一切片数据信息携带所述数据信息的特征标识;
相应的,在所述主服务器接收所述客户端发送的加载数据信息的请求时,所述加载数据信息的请求还携带所述数据信息的特征标识。
可选的,在所述主服务器接收所述客户端发送的加载数据信息的请求的步骤之后,包括:
判断所述加载数据信息的请求中携带的所述数据信息的特征标识是否存在;
若是,则向所述客户端发送加载所述数据信息失败的反馈信息;
若否,则记录所述数据信息以及所述数据信息的特征标识。
可选的,在所述客户端向主服务器发送加载数据信息的请求的步骤之后,包括:
若接收到所述主服务器发送的加载所述数据信息失败的反馈信息,则修改所述数据信息的特征标识,并重新向所述主服务器发送加载数据信息的请求。
可选的,所述的内存数据的写入方法,还包括:
所述从属服务器按照预设的时间间隔向所述主服务器发送状态信息;
相应的,所述主服务器接收所述每一从属服务器发送的状态信息;
其中,所述状态信息,至少包括:从属服务器的内存剩余量。
可选的,在所述主服务器接收所述每一从属服务器发送的状态信息的步骤之后,包括:
所述主服务器判断所述每一从属服务器的内存剩余量是否低于预设的阈值;
若是,则释放所述从属服务器的内存。
可选的,所述主服务器向从属服务器发送所述数据信息,包括:
根据所述加载数据信息的请求携带的所述数据信息获取所述数据信息占用的内存空间;
根据每一从属服务器的内存剩余量选取从属服务器的内存剩余量大于所述数据信息占用的内存空间的从属服务器;
向选取的所述从属服务器发送所述数据信息。
可选的,所述从属服务器将所述数据信息写入到基于内存的文件系统中,包括:
按照所述预设的处理方式对所述数据信息进行处理;
将处理后的所述数据信息写入到基于内存的文件系统中。
可选的,所述将处理后的所述数据信息写入到基于内存的文件系统中,采用如下方式实现:
将处理后的所述数据信息以文件的形式写入到基于内存的文件系统中。
可选的,在所述按照所述预设的处理方式对所述数据信息进行处理时,将所述数据信息的处理结果设置为所述数据信息的写入状态。
可选的,在所述将所述数据信息的处理结果设置为所述数据信息的写入状态的步骤之后,包括:
所述主服务器在接收所述从属服务器发送的状态信息时,所述状态信息,至少包括:从属服务器的内存剩余量以及所述数据信息的写入状态信息。
可选的,在所述主服务器接收所述从属服务器发送的状态信息后,将所述数据信息的写入状态信息作为所述数据信息的属性进行记录。
可选的,在所述将数据信息的写入状态信息作为所述数据信息的属性进行记录时,若所述数据信息的写入状态为失败,则判断所述数据信息的写入次数是否超过预设的写入阈值;
若是,则记录所述数据信息的属性为失败;
若否,则重新执行所述向从属服务器转发所述数据信息的步骤。
可选的,在将所述数据信息的写入状态信息作为所述数据信息的属性进行记录时,若所述数据信息的写入状态为成功,则将所述数据信息写入到基于内存的文件系统中的从属服务器信息记录到所述数据信息的属性中。
此外,本申请还提供了一种内存数据的读取方法,所述内存数据的读取方法,包括:
客户端向主服务器发送获取需求数据信息的请求;
所述主服务器接收所述客户端发送的获取需求数据信息的请求,并向所述客户端反馈所述数据信息的属性;
所述客户端接收所述主服务器反馈的所述数据信息的属性,根据所述属性向对应的从属服务器发送获取所述数据信息的请求;
所述从属服务器接收所述客户端发送的获取数据信息的请求;
所述从属服务器从所述基于内存的文件系统中获取所述数据信息,并向所述客户端发送所述数据信息;
所述客户端接收所述从属服务器发送的数据信息。
可选的,所述数据信息的属性,包括:
所述数据信息的写入状态以及将所述数据信息写入到基于内存的文件系统中的从属服务器信息。
可选的,所述根据所述属性向对应的从属服务器发送获取所述数据信息的请求,包括:
获取所述属性中的从属服务器信息;
根据所述从属服务器信息获取与当前客户端的位置关系;
根据所述位置关系向从属服务器发送获取所述数据信息的请求。
可选的,所述根据所述位置关系向从属服务器发送获取所述数据信息的请求,包括:
若所述从属服务器与当前客户端的地址相同,则通过内存映射的方式向所述从属服务器发送获取所述数据信息的请求;
若所述从属服务器与当前客户端的地址不相同,则通过远程调用协议向所述从属服务器发送获取所述数据信息的请求。
可选的,所述从属服务器向所述客户端发送所述数据信息,包括:
若通过内存映射的方式接收到所述客户端发送的获取数据信息的请求,则通过内存映射的方式向所述客户端发送所述数据信息;
若通过远程调用协议接收到所述客户端发送的获取数据信息的请求,则通过远程调用协议向所述客户端发送所述数据信息。
此外,本申请还提供了一种主服务器重载方法,所述主服务器重载方法,包括:
根据已记录的数据信息以及数据信息的特征标识创建所述数据信息的属性;
将所述属性中数据信息的写入状态设置为未调度;
接收每一从属服务器发送的已写入数据信息的状态信息;
根据所述状态信息修改所述属性中数据信息的写入状态。
可选的,在所述接收各个从属服务器发送的已写入数据信息的状态信息的步骤之前,包括:
接收各个从属服务器发送的状态信息;
向每一从属服务器发送获取已写入数据信息的状态信息的请求。
可选的,在所述根据所述状态信息修改所述属性中数据信息的写入状态的步骤之后,包括:
判断是否存在数据信息的写入状态为未调度的属性;
若存在,则启动计时器;
在超过预设的时间后,判断所述属性的数据信息的写入状态是否为未调度;
若是,则向其他从属服务器发送所述数据信息。
相应的,本申请还提供了一种主服务器重载装置,所述主服务器重载装置,包括:
属性创建单元,用于根据已记录的数据信息以及数据信息的特征标识创建所述数据信息的属性;
写入状态设置单元,用于将所述属性中数据信息的写入状态设置为未调度;
写入状态接收单元,用于接收每一从属服务器发送的已写入数据信息的状态信息;
写入状态修改单元,用于根据所述状态信息修改所述属性中数据信息的写入状态。
可选的,所述的主服务器重载装置,还包括:
状态接收单元,用于在所述接收各个从属服务器发送的已写入数据信息的状态信息之前,接收各个从属服务器发送的状态信息;
写入状态请求发送单元,用于向每一从属服务器发送获取已写入数据信息的状态信息的请求。
可选的,所述的主服务器重载装置,还包括:
属性判断单元,用于在所述根据所述状态信息修改所述属性中数据信息的写入状态之后,判断是否存在数据信息的写入状态为未调度的属性;
计时器启动单元,用于接收所述属性判断单元的判断结果,若存在,则启动计时器;
状态判断单元,用于在超过预设的时间后,判断所述属性的数据信息的写入状态是否为未调度;
数据发送单元,用于接收所述状态判断单元的判断结果,若是,则向其他从属服务器发送所述数据信息。
与现有技术相比,本申请具有以下优点:
本申请提供的一种内存数据共享系统、一种内存数据的写入方法以及一种内存数据的读取方法。其中,所述内存数据共享系统,包括:主服务器、从属服务器、客户端以及基于内存的文件系统;每一客户端与主服务器、至少一个从属服务器通信连接;主服务器与每一从属服务器通信连接;每一从属服务器中均安装基于内存的文件系统。在上述系统中所述内存数据的写入方法以及所述内存数据的读取方法相互配合,将数据信息存储到内存中,保证了存储的数据的内容,解决了存储的数据会被覆盖的问题,此外由于将数据信息存储到内存中提高用户数据的访问效率,缩短用户请求响应时间,同时通过预设的对所述数据信息的处理方式,可以使用户方便的加工、缓存所需的数据,节约存储空间的占用。
本申请提供的一种主服务器重载方法以及装置,根据已记录的数据信息以及数据信息的特征标识创建所述数据信息的属性;将所述属性中数据信息的写入状态设置为未调度;接收每一从属服务器发送的已写入数据信息的状态信息;根据所述状态信息修改所述属性中数据信息的写入状态。采用上述方法,当存储系统发生崩溃时,不需要重新加载数据能够快速恢复到之前的状态并继续提供服务,稳定性高,降低了容错处理时的负担
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1示出了根据本申请的实施例提供的内存数据共享系统的示意图;
图2示出了根据本申请的实施例提供的内存数据的写入方法的流程图;
图3示出了根据本申请的实施例提供的内存数据的读取方法的流程图;
图4示出了根据本申请的实施例提供的主服务器重载方法的流程图;
图5示出了根据本申请的实施例提供的主服务器重载装置的流程图。
具体实施方式
为了能够更清楚地理解本申请的上述目的、特征和优点,下面结合附图和具体实施方式对本申请进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是,本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此,本申请不受下面公开的具体实施的限制。
本申请的实施例提供了一种内存数据共享系统;本申请同时涉及一种内存数据的写入方法、一种内存数据的读取方法、一种主服务器重载方法以及一种主服务器重载装置。在下面的实施例中逐一进行详细说明。
目前为了提高访问效率,缩短用户请求的响应时间是将需要访问的输入数据存储在内存中,尽量避免磁盘I/O,多采用以下两种方式:一是:依赖底层的分布式存储系统,使用缓冲器存放最近被访问过的数据。当这部分数据再次被访问时,存储系统会直接将内存中的数据返回,而不需要重新读取磁盘;二是:在自己的作业逻辑中,将需要共享的数据存储起来。例如:利用RDD(Resilient Distributed Datasets)弹性分布式数据集机制对数据在进程内进行缓存,其它的用户作业可以向该用户作业发送请求,得到存储的数据。由此可见,在现有的方案下,通过分布式存储系统提供存储功能,当缓冲器存满时,新写入缓冲器的数据会覆盖缓冲器中原有的数据。但在实际应用中,不同数据被访问的频率是不同的,一些数据会被反复访问,所以使用缓冲器时会造成数据频繁的唤入和唤出,造成性能下降;通过用户作业缓存数据时,需要提交一个完整的作业,占用空间。针对这一问题,通过在本申请的技术方案提供的内存数据共享系统中使所述内存数据的写入方法以及所述内存数据的读取方法相互配合将数据信息存储到内存中,保证了存储的数据的内容,解决了存储的数据会被覆盖的问题,此外由于将数据信息存储到内存中提高用户数据的访问效率,缩短用户请求响应时间,同时通过预设的对所述数据信息的处理方式,可以使用户方便的加工、缓存所需的数据,节约存储空间的占用。另外,当存储系统发生崩溃时,不需要重新加载数据能够快速恢复到之前的状态并继续提供服务,稳定性高,降低了容错处理时的负担。
在详细描述本实施例的具体步骤之前,为了方便对本技术方案的理解,先对本申请涉及的内存文件系统与主从框架作简要说明。
基于内存的文件系统(tmpfs)和虚拟磁盘ramdisk比较类似,tmpfs可以使用RAM,但它也可以使用swap分区来存储。而且传统的ramdisk是个块设备,要用mkfs来格式化它,才能真正地使用它;而tmpfs是一个文件系统,并不是块设备,只是安装它,就可以使用了。tmpfs是最好的基于RAM的文件系统。tmpfs会完全驻留在RAM中。
Master-Slave基础框架可以实现特定的业务需求,比如实现多节点并行计算等。基于经典的命令模式,Master和Slave之间通过相互发送命令(Command)实现交互,命令是一个抽象的概念,Command可以用来分发任务,也可以用来传输数据,框架只定义了一个实际的命令-心跳检测命令(HeartbeatCommand)。可以通过定义命令,并提供响应的命令处理器,来实现任何形式的业务。框架提供的核心功能只有底层的网络通信、Master/Slave关系的维系以及命令的分发功能。
本申请的实施例提供了一种内存数据共享系统,本实施例采用了Master-Slave框架。所述内存数据共享系统实施例如下:
请参考图1,其示出了根据本申请的实施例提供的内存数据共享系统的示意图。
所述内存数据共享系统,包括:客户端101、主服务器102、从属服务器103以及基于内存的文件系统104;
所述每一客户端101与所述主服务器、至少一个所述从属服务器103通信连接;所述主服务器102与所述每一从属服务器103通信连接;所述每一从属服务器103中均安装基于内存的文件系统104;
其中,所述从属服务器103,用于接收所述主服务器102发送的数据信息,并将所述数据信息写入到所述基于内存的文件系统104中、接收所述客户端101发送的获取数据信息的请求,从所述基于内存的文件系统104中获取所述数据信息,并向所述客户端101发送所述数据信息;
所述主服务器102,用于接收所述客户端101发送的加载数据信息的请求,所述加载数据信息的请求携带所述数据信息,提取并记录所述数据信息的属性,并向所述从属服务器103转发所述数据信息、接收所述客户端101发送的获取需求数据信息的请求,并向所述客户端101反馈所述数据信息的属性;
所述客户端101,用于向所述主服务器102发送加载数据信息的请求,所述加载数据信息的请求携带所述数据信息、向所述主服务器102发送获取需求数据信息的请求,接收所述主服务器102反馈的所述数据信息的属性,根据所述属性向对应的从属服务器103发送获取所述数据信息的请求,并接收所述从属服务器103发送的数据信息;
所述基于内存的文件系统104,用于在内存中存储所述数据信息。
本申请提供的技术方案是采用Master-Slave框架进行实现的,其中所述从属服务器103可以称为CacheWorker组件,所述主服务器102可以称为CacheMaster组件。CacheWorker在框架中是Slave角色会周期性的向CacheMaster(Master)发送心跳,汇报自己的状态,同时带回CacheMaster分配的任务。CacheWorker会负责将用户在客户端101中指定的数据加载到内存中并且负责管理这些内存。当用户需要读取数据时,CacheWorker还需要接收用户的读请求,并将相应的数据返回给用户。
可以理解的,在本申请提供的技术方案中,具有一个主服务器102、多个从属服务器103以及多个客户端101。其中,主服务器CacheMaster是Master角色,负责管理所有的CacheWorker,维护与系统中每一个CacheWorker之间的保持心跳,处理CacheWorker上报的状态,接收用户加载数据的请求,并将这些请求按照一定的策略分配到CacheWorker上。此外,CacheMaster还负责管理所有存储的数据文件的属性信息及数据文件状态,但不会直接管理存储到内存中的数据。
需要说明的是,所述从属服务器103是运行在实体计算机中的进程,该进程可以与客户端101运行在相同的计算机中;所述基于内存的文件系统104是安装在从属服务器103中的软件系统,每一从属服务器103中均安装有基于内存的文件系统104。
在具体实施时,安装在从属服务器103中的所述基于内存的文件系统104为tmpfs文件系统,Linux发行版中的内核配置都会开启tmpfs,将tmpfs映射到/dev/下的shm目录。/dev/shm/是linux中在内存中的目录。
此外,由于所述每一客户端101与所述主服务器、至少一个所述从属服务器103通信连接;所述主服务器102与所述每一从属服务器103通信连接,为了满足所述客户端101、所述主服务器102以及所述从属服务器103之间的通信需要(例如:长距离传输的需要),所述客户端101、所述主服务器102以及所述从属服务器103之间可以通过路由设备进行互连。
下面对所述内存数据共享系统中的客户端101的作用进行详细说明。
所述客户端101用于向所述主服务器102发送加载数据信息的请求,所述加载数据信息的请求携带所述数据信息。
在本实施例中,所述客户端101向所述主服务器102发送加载数据信息的请求,可以采用如下方式实现:由于所述客户端101与所述主服务器102之间通过路由设备进行互连,则通过路由设备的网络协议连接后进行信息交互,所述客户端101向主服务器102发送加载数据信息的请求。所述加载数据信息的请求携带所述数据信息。
所述客户端101还用于向所述主服务器102发送获取需求数据信息的请求。
在本实施例中,所述客户端101向所述主服务器102发送获取需求数据信息的请求,可以采用如下方式实现:由于所述客户端101与所述主服务器102之间通过路由设备进行互连,则通过路由设备的网络协议连接后进行信息交互,当前客户端101向主服务器102发送获取需求数据信息的请求。
需要说明的是,所述需求数据信息是用户需要的数据信息,由于该数据信息存储在分布式系统中的从属服务器103中,且在所述主服务器102中存储的所述数据信息的属性中存有所述数据信息的状态以及将所述数据信息写入到基于内存的文件系统104中的从属服务器103信息。
具体的,所述获取需求数据信息的请求中,携带用户需求的所述数据信息的名称。
所述客户端101还用于接收所述主服务器102反馈的所述数据信息的属性,根据所述属性向对应的从属服务器103发送获取所述数据信息的请求。
在本实施例中,所述所述客户端101接收所述主服务器102反馈的所述数据信息的属性,可以采用如下方式实现:由于所述客户端101与所述主服务器102之间通过路由设备进行互连,则通过路由设备的网络协议连接后进行信息交互,当前客户端101接收所述主服务器102反馈的所述数据信息的属性。
所述客户端101根据所述属性向对应的从属服务器103发送获取所述数据信息的请求,包括:
获取所述属性中的从属服务器信息;
根据所述从属服务器信息获取与当前客户端101的位置关系;
根据所述位置关系向从属服务器103发送获取所述数据信息的请求。
需要说明的是,所述从属服务器信息是描述所述从属服务器信息所在物理计算机的位置信息。
其中,所述根据所述从属服务器信息获取与当前客户端101的位置关系,可以采用如下方式实现:根据所述从属服务器信息所在物理计算机的位置信息判断所述从属服务器信息是否在当前客户端101所在的物理计算机上;所述根据所述位置关系向从属服务器103发送获取所述数据信息的请求,可以采用如下方式实现:若所述从属服务器103与当前客户端101的地址相同,则通过内存映射的方式向所述从属服务器103发送获取所述数据信息的请求;
若所述从属服务器103与当前客户端101的地址不相同,则通过远程调用协议向所述从属服务器103发送获取所述数据信息的请求。
需要说明的是,所述地址是指:所述从属服务器103的ip地址以及当前客户端101的ip地址。
可以理解的,若所述从属服务器101与当前客户端的地址相同,则说明所述从属服务器103与当前客户端101的ip地址相同;同样的道理,若所述从属服务器103与当前客户端101的地址不相同,则说明所述从属服务器103与当前客户端101的ip地址不相同。
所述客户端101还用于接收所述从属服务器103发送的数据信息。
在本实施例中,所述客户端101还用于接收所述从属服务器103发送的数据信息,可以采用如下方式实现:若所述从属服务器103与当前客户端101的地址相同,CacheClient会通过内存映射的方式,将tmpfs中的数据直接映射到用户进程中;若所述从属服务器103与当前客户端101的地址不相同,CacheClient会通过远程调用协议接收所述从属服务器103发送的数据信息。
可以理解的,若所述从属服务器103与当前客户端101的ip地址相同,则说明所述从属服务器103与当前客户端101在相同的物理计算机上,则通过内存映射的方式将tmpfs中的数据直接映射到用户进程中,使客户端101接收到所述数据信息;若所述从属服务器103与当前客户端101的ip地址不相同,则说明所述从属服务器103与当前客户端101不在相同的物理计算机上,则需要通过所述客户端101与所述从属服务器103之间的路由设备的网络协议连接后进行信息交互。
为了使用户方便的加工、缓存所需的数据,节约存储空间的占用,所述客户端101还用于在向所述主服务器102发送加载数据信息的请求之前,向所述每一从属服务器103发送预设的对数据信息的处理方式。
在本实施例中,所述客户端101向所述每一从属服务器103发送预设的对数据信息的处理方式,可以采用如下方式实现:由于所述客户端101与所述每一从属服务器103之间通过路由设备进行互连,则通过路由设备的网络协议连接后进行信息交互,所述客户端101向各个从属服务器103发送预设的对所述数据信息的处理方式。
需要说明的是,对数据进行处理时,不同的用户会有不同的处理逻辑,且从属服务器103(CacheWorker)向用户提供了接口,使用户可以预设自己的对所述数据信息的处理方式。所述预设的对所述数据信息的处理方式,例如:对于数据库表,在写入数据信息时,可以先对所述数据信息执行解压操作、对所述数据信息进行行列转换,使写入内存中的数据可以根据用户的处理逻辑按行或按列存储。
可以理解的,各个从属服务器103在对从所述主服务器102接收到的所述数据信息进行处理是:将数据信息写入到内存中时,会对所述数据信息进行数据处理,而不是直接将数据信息写入到内存中。对数据进行处理时,不同的用户会有不同的处理逻辑,所以在所述客户端101向各个从属服务器103发出预设的对所述数据信息的处理方式后,所述各个从属服务器103还需要接收预设的对所述数据信息的处理方式。
具体的,从属服务器103(CacheWorker)向用户提供了接口,使用户可以预设自己的对所述数据信息的处理方式。所述预设的对所述数据信息的处理方式,例如:对于数据库表,在写入数据信息时,可以先对所述数据信息执行解压操作、对所述数据信息进行行列转换,使写入内存中的数据可以根据用户的处理逻辑按行或按列存储。
需要说明的是,所述数据信息是要写入内存的具体数据。由于在将所述数据信息进行写入时,以整个数据信息为单位会导致对于数据的处理的不灵活,例如:所述数据信息为表数据,在将所述数据信息整体写入到内存后,若所述数据信息中某些行或列在数据处理后不再被使用时,无法将不使用的行或列数据所占用的内存进行释放。所以为了对写入内存的数据进行处理时更加便捷,所述客户端101还用于在向所述主服务器102发送加载数据信息的请求之前,将所述数据信息划分为至少一个切片数据信息,并为所述数据信息创建特征标识,使每一切片数据信息携带所述数据信息的特征标识。例如:所述数据信息的特征标识可以是id信息。
在本实施例中,所述将所述数据信息划分为至少一个切片数据信息,可以采用如下方式实现:对所述数据信息进行切片,将所述数据信息切片为一个或多个切片数据信息。
可以理解的,由于所述加载数据信息的请求携带的所述数据信息的特征标识是在客户端101中生成的,所以为了确保所述数据信息的特征标识与主服务器102中已经记录的数据信息的特征标识不发生冲突,在所述客户端101向主服务器102发送加载数据信息的请求之后,若接收到所述主服务器102发送的加载所述数据信息失败的反馈信息,则修改所述数据信息的特征标识,并重新向所述主服务器102发送加载数据信息的请求。
可以理解的,由于在所述主服务器102中已经具有与所述数据信息相同的特征标识,则需要重新使所述客户端101向主服务器102发送加载数据信息的请求。
下面对所述内存数据共享系统中的从属服务器103的作用进行详细说明。
所述从属服务器103用于接收所述主服务器102发送的数据信息,并将所述数据信息写入到所述基于内存的文件系统104中。
在本实施例中,所述从属服务器103用于接收所述主服务器102发送的数据信息,可以采用如下方式实现:由于所述从属服务器103与所述主服务器102之间通过路由设备进行互连,则通过路由设备的网络协议连接后进行信息交互,所述从属服务器103用于接收所述主服务器102发送的数据信息
在本实施例中,所述将所述数据信息写入到所述基于内存的文件系统中,可以采用如下方式实现:将所述数据信息写入到tmpfs系统中。
所述从属服务器103将所述数据信息写入到基于内存的文件系统104中,具体包括包括:
按照所述预设的处理方式对所述数据信息进行处理;
将处理后的所述数据信息写入到基于内存的文件系统104中。
其中,所述按照所述预设的处理方式对所述数据信息进行处理,可以采用如下方式实现:将所述数据信息传递给已接收的用户预设的对所述数据信息的处理逻辑,通过用户预设的对所述数据信息的处理方式对所述数据信息进行处理。例如:若预设的对所述数据信息的处理方式为行列转换,则对于数据库表,在写入数据信息时,可以先对所述数据信息进行行列转换,使写入内存中的数据可以根据用户的处理逻辑按行或按列存储。所述将处理后的所述数据信息写入到基于内存的文件系统104中,可以采用如下方式实现:获取通过用户预设的对所述数据信息的处理方式对所述数据信息进行处理后的数据信息,将处理后的所述数据信息写入到tmpfs系统中。
需要说明的是,Linux发行版中的内核配置都会开启tmpfs,将tmpfs映射到/dev/下的shm目录。/dev/shm/是linux中在内存中的目录。
所述从属服务器103再将所述数据信息按照所述预设的处理方式对所述数据信息进行处理时,还用于根据所述数据信息的处理结果设置所述数据信息的写入状态。例如:所述从属服务器103将所述数据信息成功写入到基于文件的内存系统104中时,从属服务器103将所述数据信息的处理结果设置为写入成功;所述从属服务器103将所述数据信息写入到基于文件的内存系统104中时失败,从属服务器103将所述数据信息的处理结果设置为写入失败。
可以理解的,由于CacheWorker向CacheMaster上报状态是实时进行的,所以在CacheWorker将所述数据信息写入到tmpfs系统中之后,第一次向CacheMaster发送状态信息时,会向CacheMaster发送当前CacheWorker中的内存剩余量以及基于写入结果生成的所述数据信息的写入状态信息。
例如:若在CacheWorker将所述数据信息成功写入到tmpfs系统中,则生成的所述数据信息的写入状态信息为写入成功;若在CacheWorker将所述数据信息写入到tmpfs系统中发生失败,则生成的所述数据信息的写入状态信息为写入失败。
所述从属服务器103还用于向所述主服务器102按照预设的时间间隔发送状态信息,所以在所述从属服务器102对所述数据信息进行写入后会向所述主服务器102发送基于写入结果生成的所述数据信息的写入状态信息后,会在下一次所述从属服务器103会向所述主服务器102发送状态信息时,携带所述数据信息的写入状态信息。
可以理解的,所述从属服务器103向所述主服务器102发送携带所述数据信息的写入状态信息的状态信息后,所述主服务器103接收所述从属服务器102发送的状态信息。
所述接收所述从属服务器103发送的状态信息,可以采用如下方式实现:由于所述从属服务器103与所述主服务器102之间通过路由设备进行互连,则通过路由设备的网络协议连接后进行信息交互,接收该从属服务器103发送的状态信息。
需要说明的是,所述状态信息,至少包括:所述从属服务器103的内存剩余量以及所述数据信息的写入状态信息。
所述从属服务器103还用于接收所述客户端101发送的获取数据信息的请求。
在本实施例中,所述从属服务器103还用于接收所述客户端101发送的获取数据信息的请求,可以采用如下方式实现:由于所述从属服务器103与所述客户端101之间通过路由设备进行互连,则通过路由设备的网络协议连接后进行信息交互,当前从属服务器103接收客户端101发送的获取数据信息的请求。
所述从属服务器103还用于从所述基于内存的文件系统104中获取所述数据信息,并向所述客户端101发送所述数据信息。
在本实施例中,所述从属服务器103还用于从所述基于内存的文件系统104中获取所述数据信息,可以采用如下方式实现:从tmpfs中获取与所述数据信息的请求中名称相同的数据信息。
需要说明的是,由于tmpfs(基于内存的文件系统104)是安装在所述从属服务器103中的软件,所以从tmpfs中是通过内存中提取获取与所述数据信息的请求中名称相同的数据信息。
由于所述客户端101还用于向所述每一从属服务器103发送预设的对数据信息的处理方式,相应的,所述每一从属服务器103在接收所述主服务器102发送的数据信息之前,还用于接收预设的对所述数据信息的处理方式。
在本实施例中,所述每一从属服务器103接收预设的对所述数据信息的处理方式,可以采用如下方式实现:由于所述从属服务器103与所述客户端101之间通过路由设备进行互连,则通过路由设备的网络协议连接后进行信息交互,接收预设的对所述数据信息的处理方式。
由于所述客户端101根据所述位置关系向从属服务器103发送获取所述数据信息的请求时,会根据所述客户端101与所述从属服务器103的位置关系采取不同的获取方式,相应的,根据获取方式的不同,所述从属服务器103从所述基于内存的文件系统104中获取所述数据信息,并向所述客户端101发送所述数据信息时,若通过内存映射的方式接收到所述客户端101发送的获取数据信息的请求,则通过内存映射的方式向所述客户端101发送所述数据信息;
若通过远程调用协议接收到所述客户端101发送的获取数据信息的请求,则通过远程调用协议向所述客户端101发送所述数据信息。
下面对所述内存数据共享系统中的主服务器102的作用进行详细说明。
所述主服务器102用于接收所述客户端101发送的加载数据信息的请求,所述加载数据信息的请求携带所述数据信息。
在本实施例中,所述主服务器102接收所述客户端101发送的加载数据信息的请求,可以采用如下方式实现:由于所述主服务器102与所述客户端101之间通过路由设备进行互连,则通过路由设备的网络协议连接后进行信息交互,所述主服务器102接收所述客户端101发送的加载数据信息的请求。所述加载数据信息的请求携带所述数据信息。例如:主服务器102通过以太网与所述客户端101进行连接。
所述主服务器102还用于提取并记录所述数据信息的属性,并向所述从属服务器103转发所述数据信息。
在本实施例中,所述从属服务器103转发所述数据信息,可以采用如下方式实现:由于所述主服务器102与所述从属服务器103间通过路由设备进行互连,则通过路由设备的网络协议连接后进行信息交互,所述主服务器102向所述从属服务器103转发所述数据信息。
由于在Master-Slave框架中,从属服务器作为Slave角色,具有若干数量的从属服务器,所以在所述向从属服务器发送所述数据信息,需要对各个从属服务器进行计算,获取最佳的从属服务器并向该从属服务器发送所述数据信息。由于所述从属服务器103用于按照预设的时间间隔向所述主服务器发送状态信息,相应的,所述主服务器102还用于接收所述每一从属服务器发送的状态信息;其中,所述状态信息,至少包括:从属服务器103的内存剩余量。
在具体实施时,所述主服务器102接收各个从属服务器103发送的状态信息,可以采用如下方式实现:由于所述主服务器102与所述从属服务器103之间通过路由设备进行互连,所述主服务器102接收各个从属服务器103发送的状态信息。
可以理解的,由于在向从属服务器103发送所述数据信息后,需要将所述数据信息写入到从属服务器的内存中。为了保证在写入所述数据信息后,不会使从属服务器103的资源紧张,在本步骤是通过各个从属服务器103当前的内存剩余量进行判断,所以接收各个从属服务器103发送的状态信息中,只需要包含各个从属服务器103发送的当前从属服务器103的内存剩余量。
需要说明的是,Slave角色会周期性的向Master角色汇报自己的状态,所以在本系统中,由于从属服务器103(CacheWorker对应slave角色)已经与主服务器102(CacheMaster对应master角色)进行了连接,所以每一CacheWorker会按照预设的时间间隔向CacheMaster发送状态信息。所述状态信息,包括:当前从属服务器103的内存剩余量以及接收的所述数据信息的写入状态信息。
可以理解的,所述预设的时间间隔是预先设置的使CacheWorker向CacheMaster上报状态的频率。在本步骤中上报状态的频率可以是每分钟6次,即:预设的时间间隔为10秒。
在具体实施时,CacheWorker向CacheMaster发送状态信息,是以心跳包的方式进行发送的。心跳包就是在CacheWorker和CacheMaster间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。
可以理解的,由于CacheWorker向CacheMaster上报状态是实时进行的,所以在本实施例中,CacheWorker向CacheMaster发送状态信息,包括如下几种情况:在CacheWorker未接收到CacheMaster发送的数据信息时,向CacheMaster发送当前CacheWorker中的内存剩余量;在CacheWorker接收到CacheMaster发送的数据信息至将所述数据信息写入内存前,向CacheMaster发送当前CacheWorker中的内存剩余量以及所述数据信息的写入状态信息(未写入);在CacheWorker接收到CacheMaster发送的数据信息且将所述数据信息写入内存后,第一次向CacheMaster发送状态信息时,是向CacheMaster发送当前CacheWorker中的内存剩余量以及所述数据信息的写入状态信息(写入成功或写入失败);之后由于CacheWorker已经向CacheMaster发送过所述数据信息的写入状态信息,则在当前CacheWorker接收到主服务器发送的新的数据信息前,只会向CacheMaster发送当前CacheWorker中的内存剩余量。
需要说明的是,当在CacheWorker接收到CacheMaster发送的数据信息且将所述数据信息写入内存后,由于向所述数据信息写入到了内存,所以在向CacheMaster发送当前CacheWorker中的内存剩余量会减少,且减少所述数据信息写入后占用的内存。
可以理解的,在所述主服务器102需要先接收各个从属服务器103发送的状态信息后,就能确定最佳的从属服务器103,所述主服务器102向从属服务器103发送所述数据信息,包括:
根据所述加载数据信息的请求携带的所述数据信息获取所述数据信息占用的内存空间;
根据每一从属服务器103的内存剩余量选取从属服务器103的内存剩余量大于所述数据信息占用的内存空间的从属服务器103;
向选取的所述从属服务器103发送所述数据信息。
在上述步骤中,需要说明的是,所述根据所述加载数据信息的请求携带的所述数据信息获取所述数据信息占用的内存空间,可以采用如下方式实现:根据所述加载数据信息的请求携带的所述数据信息切片后的各个切片数据信息占用的内存空间,获取所述数据信息占用的内存空间;所述根据每一从属服务器103的内存剩余量选取从属服务器103的内存剩余量大于所述数据信息占用的内存空间的从属服务器103,可以采用如下方式实现:将所述数据信息占用的内存空间与各个从属服务器103的内存剩余量进行比对,选取从属服务器103的内存剩余量大于所述数据信息占用的内存空间的从属服务器103;所述向选取的所述从属服务器103发送所述数据信息,可以采用如下方式实现:向选取出的从属服务器的内存剩余量大于所述数据信息占用的内存空间的从属服务器103,发送所述数据信息。
作为一种优选实施方式,为了使所述数据信息在写入内存后,使所述从属服务器的负载压力最小,在上述步骤中,选取从属服务器时可以选取内存剩余量最高的从属服务器,相应的,若选取的从属服务器时可以选取内存剩余量最高的从属服务器,则在本步骤中是向选取的内存剩余量最高的从属服务器发送所述数据信息。
在本实施例中,所述主服务器102提取并记录所述数据信息的属性,可以采用如下方式实现:将所述数据信息、接收了所述主服务器102发送的数据信息从属服务器103的信息以及所述数据信息的写入状态信息作为属性记录在文件目录树的对应所述数据信息的节点中。
需要说明的是,所述数据信息的属性,包括:所述数据信息的状态以及将所述数据信息写入到基于内存的文件系统104中的从属服务器103信息。
可以理解的,由于从属服务器103还未接收或未将所述数据信息写入成功,所以在本步骤中只记录所述数据信息,接收了所述主服务器102发送的数据信息从属服务器103的信息以及所述数据信息的写入状态信息根据所述从属服务器103发送的状态信息进行更新。
所述主服务器102还用于接收所述客户端101发送的获取需求数据信息的属性的请求,并向所述客户端101反馈所述属性。
在本实施例中,所述主服务器102接收所述客户端101发送的获取需求数据信息的属性的请求后,通过所述获取需求数据信息的属性的请求中,携带用户需求的所述数据信息的名称,在文件目录树中查询对应的所述数据信息。
在本实施例中,所述向所述客户端101反馈所述属性,可以采用如下方式实现:由于所述客户端101与所述主服务器102之间通过路由设备进行互连,则通过路由设备的网络协议连接后进行信息交互,向所述客户端101反馈所述数据信息的属性。
需要说明的是,所述数据信息的属性,包括:所述数据信息的状态以及将所述数据信息写入到基于内存的文件系统103中的从属服务器103信息。
作为一个优选实施方式,由于所述客户端101用于将所述数据信息划分为至少一个切片数据信息,并为所述数据信息创建特征标识,使每一切片数据信息携带所述数据信息的特征标识,相应的,所述主服务器102在接收所述客户端101发送的加载数据信息的请求时,所述加载数据信息的请求还携带所述数据信息的特征标识。
其中,为所述数据信息创建特征标识,使每一切片数据信息携带所述数据信息的特征标识是指:由于将所述数据信息切片为一个或多个切片数据信息后,为了确定切片后的切片数据信息与原数据信息的关系,在接收客户端101发送的加载数据信息的请求时,所述加载数据信息的请求还携带所述数据信息的特征标识。例如:所述数据信息的特征标识可以是id信息。
在接收客户端101发送的加载数据信息的请求之后,由于所述加载数据信息的请求携带的所述数据信息的特征标识是在客户端101中生成的,所以为了确保所述数据信息的特征标识与主服务器102中已经记录的数据信息的特征标识不发生冲突,所述主服务器102还用于判断所述加载数据信息的请求中携带的所述数据信息的特征标识是否存在;
若是,则向所述客户端101发送加载所述数据信息失败的反馈信息;
若否,则记录所述数据信息以及所述数据信息的特征标识。
其中,所述判断所述加载数据信息的请求中携带的所述数据信息的特征标识是否存在,可以采用如下方式实现:遍历所述主服务器102的文件目录树的文件节点,获取各个文件节点中数据信息的特征标识,判断各个文件节点中是否具有与所述加载数据信息的请求中携带的所述数据信息的特征标识相同的数据信息的特征标识。
需要说明的是,CacheMaster(主服务器)以文件目录树的形式管理已写入内存的数据信息,用户创建的每个文件或文件夹都是树中的一个节点,每个节点有自己的属性。例如:节点编号、父节点编号、节点名和创建时间,对于文件夹节点,属性中包含其子节点编号,对于文件节点,属性中包含数据信息或者切片数据信息的属性、特征标识以及将所述数据信息写入到基于内存的文件系统104中的从属服务器103信息。
在上述步骤中,若各个文件节点中具有与所述加载数据信息的请求中携带的所述数据信息的特征标识相同的数据信息的特征标识,则向所述客户端101发送加载所述数据信息失败的反馈信息,可以采用如下方式实现:由于所述客户端101与所述主服务器102之间通过路由设备进行互连,则通过路由设备的网络协议连接后进行信息交互,向所述客户端101发送加载所述数据信息失败的反馈信息。
相对应的,若各个文件节点中不具有与所述加载数据信息的请求中携带的所述数据信息的特征标识相同的数据信息的特征标识,则记录所述数据信息以及所述数据信息的特征标识,可以采用如下方式实现:在CacheMaster(主服务器)的文件目录树中创建文件节点,并在所述文件节点中将所述数据信息以及所述数据信息的特征标识作为该节点的属性进行记录。
需要说明的是,若所述数据信息进行了切片,具有若干切片数据信息,则在CacheMaster的文件目录树中创建文件夹节点,在该文件夹节点下的子节点中将每一个切片数据信息作为该节点的属性进行记录,将切片数据信息携带的原数据信息的特征标识作为文件夹节点的属性进行记录。
作为一个优选实施方式,由于在分布式系统中,会运行着多个用户的作业,在不同的时间段,集群中的作业量、作业优先级以及资源使用率也会发生变化,因此,各个从属服务器所占用的内存也应该是动态变化的,在接收所述每一从属服务器103发送的状态信息之后,所述主服务器102还用于判断所述每一从属服务器103的内存剩余量是否低于预设的阈值;
若是,则释放所述从属服务器103的内存,使所述从属服务器103的内存剩余量大于预设的阈值。
其中,所述主服务器102判断所述每一从属服务器103的内存剩余量是否低于预设的阈值,可以采用如下方式实现:将接收的各个从属服务器103发送的当前从属服务器103的内存剩余量与预设的预设的阈值进行比对,判断是否有从属服务器103的内存剩余量低于预设的阈值。例如:所述预设的阈值为10%。
所述释放所述从属服务器103的内存,可以采用如下方式实现:采用LRU算法计算所述从属服务器103的内存,根据计算结果释放所述从属服务器103的内存。
需要说明的是,LRU算法是Least Recently Used近期最少使用算法。是内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。
由于所述从属服务器103还用于将所述数据信息的写入状态作为该数据信息的状态信息,按照预设的时间间隔向所述主服务器102发送状态信息,相应的,所述主服务器102在接收所述从属服务器103发送的状态信息时,所述状态信息,至少包括:从属服务器103的内存剩余量以及所述数据信息的写入状态信息。
作为一个优选实施方式,由于在分布式系统中,会遇到各种各样的操作错误,用户预先设置的对所述数据信息的处理逻辑也可能发生错误,为了使所述数据信息进行处理发生错误时,能够继续提供服务,所述主服务器102还用于在所述接收所述从属服务器103发送的状态信息时,若所述从属服务器103发送的状态信息为失败,则判断所述数据信息的写入次数是否超过预设的写入阈值;
若是,则记录所述数据信息的属性为失败;
若否,则重新向所述从属服务器103转发所述数据信息。
在上述步骤中,在所述主服务器102接收所述从属服务器103发送的状态信息时,若所述从属服务器103发送的状态信息为失败,则判断所述数据信息的写入次数是否超过预设的写入阈值。例如:预设的写入阈值为5次。
其中,若所述数据信息的写入次数超过预设的写入阈值,所述记录所述数据信息的属性为失败,可以采用如下方式实现:将所述数据信息、接收了所述主服务器102发送的数据信息从属服务器103的信息以及所述数据信息的写入状态信息(写入失败)作为属性记录在文件目录树的对应所述数据信息的节点中。
在本实施例中,所述数据信息的属性,包括:所述数据信息的状态信息以及将所述数据信息写入到基于内存的文件系统104中的从属服务器103信息。
可以理解的,若所述数据信息的状态信息为写入失败,则所述数据信息写入到基于内存的文件系统104中的从属服务器信息为空。
相对应的,若所述数据信息的写入次数不超过预设的写入阈值,所述重新向所述从属服务器103转发所述数据信息,是指重新使所述主服务器102提取并记录所述数据信息的属性,并向所述从属服务器103转发所述数据信息。
在上述的实施例中,提供了一种内存数据共享系统,此外,本申请还提供了一种内存数据的写入方法;所述内存数据的写入方法实施例如下:
请参考图2,其示出了根据本申请的实施例提供的内存数据的写入方法的流程图。
所述内存数据的写入方法,包括:
步骤S201,客户端向主服务器发送加载数据信息的请求,所述加载数据信息的请求携带所述数据信息。
在本实施例中,所述客户端向主服务器发送加载数据信息的请求,可以采用如下方式实现:当前客户端通过TCP/IP连接等网络协议与主服务器连接后进行信息交互,当前客户端向主服务器发送加载数据信息的请求。所述加载数据信息的请求携带所述数据信息。
在本实施例中,客户端是指CacheClient,是提供给用户使用的,CacheClient中将消息发送、异常处理等逻辑进行了封装,使用户可以与方便的CacheMaster与CacheWorker进行通信。
作为一个优选实施方式,本申请实施例提供的内存数据的写入方法中,为了使用户方便的加工、缓存所需的数据,节约存储空间的占用,在步骤S201客户端向主服务器发送加载数据信息的请求之前,所述客户端会向各个从属服务器发送预设的对所述数据信息的处理方式。
在本实施例中,所述客户端会向各个从属服务器发送预设的对所述数据信息的处理方式,可以采用如下方式实现:当前客户端通过TCP/IP连接等网络协议与各个从属服务器连接后进行信息交互,当前客户端向各个从属服务器发送预设的对所述数据信息的处理方式。
需要说明的是,对数据进行处理时,不同的用户会有不同的处理逻辑,且CacheWorker向用户提供了接口,使用户可以预设自己的对所述数据信息的处理方式。所述预设的对所述数据信息的处理方式,例如:对于数据库表,在写入数据信息时,可以先对所述数据信息执行解压操作、对所述数据信息进行行列转换,使写入内存中的数据可以根据用户的处理逻辑按行或按列存储。
可以理解的,各个从属服务器在对从所述主服务器接收到的所述数据信息进行处理是:将数据信息写入到内存中时,会对所述数据信息进行数据处理,而不是直接将数据信息写入到内存中。对数据进行处理时,不同的用户会有不同的处理逻辑,所以在所述客户端向各个从属服务器发出预设的对所述数据信息的处理方式后,所述各个从属服务器还需要接收预设的对所述数据信息的处理方式。
具体的,CacheWorker向用户提供了接口,使用户可以预设自己的对所述数据信息的处理方式。所述预设的对所述数据信息的处理方式,例如:对于数据库表,在写入数据信息时,可以先对所述数据信息执行解压操作、对所述数据信息进行行列转换,使写入内存中的数据可以根据用户的处理逻辑按行或按列存储。
步骤S203,所述主服务器接收所述客户端发送的加载数据信息的请求并提取所述数据信息,向从属服务器转发所述数据信息。
在本实施例中,所述主服务器接收所述客户端发送的加载数据信息的请求,可以采用如下方式实现:所述主服务器通过TCP/IP连接等网络协议与所述客户端连接后进行信息交互,接收所述客户端发送的加载数据信息的请求。所述加载数据信息的请求携带所述数据信息。
在本实施例中,所述提取所述数据信息,向从属服务器转发所述数据信息,可以采用如下方式实现:从携带所述数据信息的所述加载数据信息的请求中提取所述数据信息后,所述主服务器通过TCP/IP连接等网络协议与从属服务器连接后进行信息交互,向所述从属服务器发送加载所述数据信息。
由于在Master-Slave框架中,从属服务器作为Slave角色,具有若干数量的从属服务器,所以在所述向从属服务器发送所述数据信息,需要对各个从属服务器进行判断,获取最佳的从属服务器并向该从属服务器发送所述数据信息。则执行步骤S203向从属服务器发送所述数据信息之前,所述主服务器需要先接收各个从属服务器发送的状态信息。
可以理解的,由于在向从属服务器发送所述数据信息后,需要将所述数据信息写入到从属服务器的内存中。为了保证在写入所述数据信息后,不会使从属服务器的资源紧张,在本步骤是通过各个从属服务器当前的内存剩余量进行判断,所以接收各个从属服务器发送的状态信息中,只需要包含各个从属服务器发送的当前从属服务器的内存剩余量。
需要说明的是,Slave角色会周期性的向Master角色汇报自己的状态,所以在执行步骤S205向所述从属服务器转发所述数据信息之前,由于CacheWorker已经与CacheMaster进行了连接,所以每一CacheWorker会按照预设的时间间隔向CacheMaster(主服务器)发送状态信息。所述状态信息,包括:当前从属服务器的内存剩余量以及接收的所述数据信息的写入状态信息。
可以理解的,所述预设的时间间隔是预先设置的使CacheWorker向CacheMaster上报状态的频率。在本步骤中上报状态的频率可以是每分钟6次,即:预设的时间间隔为10秒。
在具体实施时,CacheWorker向CacheMaster发送状态信息,是以心跳包的方式进行发送的。心跳包就是在CacheWorker和CacheMaster间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。
可以理解的,由于CacheWorker向CacheMaster上报状态是实时进行的,所以在本实施例中,CacheWorker向CacheMaster发送状态信息,包括如下几种情况:
在CacheWorker未接收到CacheMaster发送的数据信息时,向CacheMaster发送当前CacheWorker中的内存剩余量;在CacheWorker接收到CacheMaster发送的数据信息至将所述数据信息写入内存前,向CacheMaster发送当前CacheWorker中的内存剩余量以及所述数据信息的写入状态信息(未写入);在CacheWorker接收到CacheMaster发送的数据信息且将所述数据信息写入内存后,第一次向CacheMaster发送状态信息时,是向CacheMaster发送当前CacheWorker中的内存剩余量以及所述数据信息的写入状态信息(写入成功或写入失败);之后由于CacheWorker已经向CacheMaster发送过所述数据信息的写入状态信息,则在当前CacheWorker接收到主服务器发送的新的数据信息前,只会向CacheMaster发送当前CacheWorker中的内存剩余量。
需要说明的是,当在CacheWorker接收到CacheMaster发送的数据信息且将所述数据信息写入内存后,由于向所述数据信息写入到了内存,所以在向CacheMaster发送当前CacheWorker中的内存剩余量会减少,且减少所述数据信息写入后占用的内存。
在具体实施时,所述主服务器接收各个从属服务器发送的状态信息,可以采用如下方式实现:主服务器通过TCP/IP连接等网络协议与分布式系统中各个从属服务器连接后进行信息交互,接收各个从属服务器发送的状态信息。
需要说明的是,所述状态信息,至少包括:
当前从属服务器的内存使用量。
可以理解的,在所述主服务器需要先接收各个从属服务器发送的状态信息后,就能确定最佳的从属服务器,所以所述主服务器向从属服务器发送所述数据信息,具体包括步骤S203-1至S203-3:
步骤S203-1,根据所述加载数据信息的请求携带的所述数据信息获取所述数据信息占用的内存空间。
在本实施例中,所述根据所述加载数据信息的请求携带的所述数据信息获取所述数据信息占用的内存空间,可以采用如下方式实现:根据所述加载数据信息的请求携带的所述数据信息切片后的各个切片数据信息占用的内存空间,获取所述数据信息占用的内存空间。
步骤S203-2,根据每一从属服务器的内存剩余量选取从属服务器的内存剩余量大于所述数据信息占用的内存空间的从属服务器。
在本实施例中,所述根据每一从属服务器的内存剩余量选取从属服务器的内存剩余量大于所述数据信息占用的内存空间的从属服务器,可以采用如下方式实现:将所述数据信息占用的内存空间与各个从属服务器的内存剩余量进行比对,选取从属服务器的内存剩余量大于所述数据信息占用的内存空间的从属服务器。
为了使所述数据信息在写入内存后,所述从属服务器的负载压力最小,在本步骤中,选取从属服务器时可以选取内存剩余量最高的从属服务器。
步骤S203-3,向选取的所述从属服务器发送所述数据信息。
在本实施例中,所述向选取的所述从属服务器发送所述数据信息,可以采用如下方式实现:向在步骤S203-2中选取从属服务器的内存剩余量大于所述数据信息占用的内存空间的从属服务器,发送所述数据信息。
若在步骤S203-2中选取从属服务器时可以选取内存剩余量最高的从属服务器,则在本步骤中是向选取的内存剩余量最高的从属服务器发送所述数据信息。
步骤S205,所述从属服务器接收所述主服务器发送的数据信息,并将所述数据信息写入到基于内存的文件系统中。
在本实施例中,所述从属服务器接收所述主服务器发送的数据信息,可以采用如下方式实现:当前从属服务器通过TCP/IP连接等网络协议与所述主服务器连接后进行信息交互,接收所述主服务器发送的数据信息。
在本实施例中,所述将所述数据信息写入到所述基于内存的文件系统中,可以采用如下方式实现:将所述数据信息写入到tmpfs系统中。
所述将所述数据信息写入到基于内存的文件系统中,具体包括步骤S205-1至S205-2:
步骤S205-1,按照所述预设的处理方式对所述数据信息进行处理。
在本实施例中,所述按照所述预设的处理方式对所述数据信息进行处理,可以采用如下方式实现:将所述数据信息传递给已接收的用户预设的对所述数据信息的处理逻辑,通过用户预设的对所述数据信息的处理方式对所述数据信息进行处理。
例如:若预设的对所述数据信息的处理方式为行列转换,则对于数据库表,在写入数据信息时,可以先对所述数据信息进行行列转换,使写入内存中的数据可以根据用户的处理逻辑按行或按列存储。
步骤S205-2,将处理后的所述数据信息写入到基于内存的文件系统中。
在本实施例中,所述将处理后的所述数据信息写入到基于内存的文件系统中,可以采用如下方式实现:获取通过用户预设的对所述数据信息的处理方式对所述数据信息进行处理后的数据信息,将处理后的所述数据信息写入到tmpfs系统中。
需要说明的是,Linux发行版中的内核配置都会开启tmpfs,将tmpfs映射到/dev/下的shm目录。/dev/shm/是linux中在内存中的目录。
在具体实施时,所述将处理后的所述数据信息写入到基于内存的文件系统中,是将通过预设的对所述数据信息的处理方式对所述数据信息进行处理返回的数据信息以文件的形式写入到tmpfs中。
本申请实施例提供的内存数据的写入方法中,需要说明的是,所述数据信息是要写入内存的具体数据。由于在将所述数据信息进行写入时,以整个数据信息为单位会导致对于数据的处理的不灵活,例如:所述数据信息为表数据,在将所述数据信息整体写入到内存后,若所述数据信息中某些行或列在数据处理后不再被使用时,无法将不使用的行或列数据所占用的内存进行释放。所以为了对写入内存的数据进行处理时更加便捷,本实施例的技术方案提供了一种优选实施方式,在优选方式下,在步骤S201客户端向所述主服务器发送加载数据信息的请求之前,需要将数据信息划分为切片数据信息,具体包括如下步骤:
将所述数据信息划分为至少一个切片数据信息,并为所述数据信息创建特征标识,使每一切片数据信息携带所述数据信息的特征标识。
在本实施例中,所述将所述数据信息划分为至少一个切片数据信息,可以采用如下方式实现:对所述数据信息进行切片,将所述数据信息切片为一个或多个切片数据信息。
其中,为所述数据信息创建特征标识,使每一切片数据信息携带所述数据信息的特征标识是指:由于将所述数据信息切片为一个或多个切片数据信息后,为了确定切片后的切片数据信息与原数据信息的关系,在接收客户端发送的加载数据信息的请求时,所述加载数据信息的请求还携带所述数据信息的特征标识。例如:所述数据信息的特征标识可以是id信息。
可以理解的,由于将所述数据信息切片为一个或多个切片数据信息后,在执行步骤S203所述主服务器接收所述客户端发送的加载数据信息的请求时,接收到的客户端发送的加载数据信息的请求中携带的所述数据信息包含至少一个将所述数据信息进行切分后的切片数据信息,为了确定切片后的切片数据信息与原数据信息的关系,在接收客户端发送的加载数据信息的请求时,所述加载数据信息的请求还携带所述数据信息的特征标识。
作为一个优选实施方式,本申请实施例提供的内存数据的写入方法中,由于所述加载数据信息的请求携带的所述数据信息的特征标识是在客户端中生成的,所以为了确保所述数据信息的特征标识与主服务器中已经记录的数据信息的特征标识不发生冲突,在所述接收客户端发送的加载数据信息的请求的步骤之后,还需要对接收到的加载数据信息的请求中携带的所述数据信息的特征标识进行判断,具体包括步骤S202-1至S202-3:
步骤S202-1,判断所述加载数据信息的请求中携带的所述数据信息的特征标识是否存在。
在本实施例中,所述判断所述加载数据信息的请求中携带的所述数据信息的特征标识是否存在,可以采用如下方式实现:遍历所述主服务器的文件目录树的文件节点,获取各个文件节点中数据信息的特征标识,判断各个文件节点中是否具有与所述加载数据信息的请求中携带的所述数据信息的特征标识相同的数据信息的特征标识。
需要说明的是,CacheMaster(主服务器)以文件目录树的形式管理已写入内存的数据信息,用户创建的每个文件或文件夹都是树中的一个节点,每个节点有自己的属性。例如:节点编号、父节点编号、节点名和创建时间,对于文件夹节点,属性中包含其子节点编号,对于文件节点,属性中包含数据信息或者切片数据信息的属性、特征标识以及将所述数据信息写入到基于内存的文件系统中的从属服务器信息。
步骤S202-2,若是,则向所述客户端发送加载所述数据信息失败的反馈信息;
在本步骤中,接收步骤S202-1中的判断结果,若各个文件节点中具有与所述加载数据信息的请求中携带的所述数据信息的特征标识相同的数据信息的特征标识,进入本步骤并执行所述向所述客户端发送加载所述数据信息失败的反馈信息。
所述向所述客户端发送加载所述数据信息失败的反馈信息,可以采用如下方式实现:主服务器通过TCP/IP连接等网络协议与所述客户端连接后进行信息交互,向所述客户端发送加载所述数据信息失败的反馈信息。
例如:主服务器通过以太网与所述客户端进行连接。
步骤S202-3,若否,则记录所述数据信息以及所述数据信息的特征标识。
在本步骤中,接收步骤S202-1中的判断结果,若各个文件节点中不具有与所述加载数据信息的请求中携带的所述数据信息的特征标识相同的数据信息的特征标识,进入本步骤并执行所述记录所述数据信息以及所述数据信息的特征标识。
所述记录所述数据信息以及所述数据信息的特征标识,可以采用如下方式实现:在CacheMaster(主服务器)的文件目录树中创建文件节点,并在所述文件节点中将所述数据信息以及所述数据信息的特征标识作为该节点的属性进行记录。
需要说明的是,若所述数据信息进行了切片,具有若干切片数据信息,则在CacheMaster的文件目录树中创建文件夹节点,在该文件夹节点下的子节点中将每一个切片数据信息作为该节点的属性进行记录,将切片数据信息携带的原数据信息的特征标识作为文件夹节点的属性进行记录。
作为一个优选实施方式,本申请实施例提供的内存数据的写入方法中,由于所述加载数据信息的请求携带的所述数据信息的特征标识是在客户端中生成的,所以为了确保所述数据信息的特征标识与主服务器中已经记录的数据信息的特征标识不发生冲突,在所述接收客户端发送的加载数据信息的请求的步骤之后,还需要对接收到的加载数据信息的请求中携带的所述数据信息的特征标识进行判断,在所述主服务器进行判断后,需要接收所述主服务器发送的反馈结果。具体的,在所述向主服务器发送加载数据信息的请求的步骤之后,包括:
若接收到所述主服务器发送的加载所述数据信息失败的反馈信息,则修改所述数据信息的特征标识,并重新向所述主服务器发送加载数据信息的请求。
可以理解的,由于在所述主服务器中已经具有与所述数据信息相同的特征标识,则需要重新执行步骤S201向主服务器发送加载数据信息的请求的步骤。
作为一个优选实施方式,本申请实施例提供的内存数据的写入方法中,由于在分布式系统中,会运行着多个用户的作业,在不同的时间段,集群中的作业量、作业优先级以及资源使用率也会发生变化,因此,各个从属服务器所占用的内存也应该是动态变化的,所以在所述接收各个从属服务器发送的状态信息的步骤之后,释放内存剩余量过低的从属服务器的内存,具体包括步骤S204-1至S204-2:
步骤S204-1,所述主服务器判断所述每一从属服务器的内存剩余量是否低于预设的阈值。
在本实施例中,所述主服务器判断所述每一从属服务器的内存剩余量是否低于预设的阈值,可以采用如下方式实现:将接收的各个从属服务器发送的当前从属服务器的内存剩余量与预设的预设的阈值进行比对,判断是否有从属服务器的内存剩余量低于预设的阈值。例如:所述预设的阈值为10%。
步骤S204-2,若是,则释放所述从属服务器的内存。
在本步骤中,接收步骤S204-2中的判断结果,若具有内存剩余量低于预设的阈值的从属服务器,则进入步骤S204-2,并执行释放所述从属服务器的内存,使所述从属服务器的内存剩余量大于预设的阈值。
所述释放所述从属服务器的内存,可以采用如下方式实现:采用LRU算法计算所述从属服务器的内存,根据计算结果释放所述从属服务器的内存。
需要说明的是,LRU算法是Least Recently Used近期最少使用算法。是内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。
作为一个优选实施方式,本申请实施例提供的内存数据的写入方法中,所述从属服务器再将所述数据信息按照所述预设的处理方式对所述数据信息进行处理时,会根据所述数据信息的处理结果设置所述数据信息的写入状态。例如:所述从属服务器将所述数据信息成功写入到基于文件的内存系统中时,从属服务器将所述数据信息的处理结果设置为写入成功(简称为成功);所述从属服务器将所述数据信息写入到基于文件的内存系统中时失败,从属服务器将所述数据信息的处理结果设置为写入失败(简称为失败)。
可以理解的,由于CacheWorker向CacheMaster上报状态是实时进行的,所以在CacheWorker将所述数据信息写入到tmpfs系统中之后,第一次向CacheMaster发送状态信息时,会向CacheMaster发送当前CacheWorker中的内存剩余量以及基于写入结果生成的所述数据信息的写入状态信息。
例如:若在CacheWorker将所述数据信息成功写入到tmpfs系统中,则生成的所述数据信息的写入状态信息为写入成功;若在CacheWorker将所述数据信息写入到tmpfs系统中发生失败,则生成的所述数据信息的写入状态信息为写入失败。
作为一个优选实施方式,本申请实施例提供的内存数据的写入方法中,所述从属服务器会向所述主服务器按照预设的时间间隔发送状态信息,所以在所述从属服务器对所述数据信息进行写入后会向所述主服务器发送基于写入结果生成的所述数据信息的写入状态信息后,会在下一次所述从属服务器会向所述主服务器发送状态信息时,携带所述数据信息的写入状态信息。
可以理解的,所述从属服务器向所述主服务器发送携带所述数据信息的写入状态信息的状态信息后,所述主服务器接收所述从属服务器发送的状态信息。
所述接收所述从属服务器发送的状态信息,可以采用如下方式实现:主服务器通过TCP/IP连接等网络协议与所述从属服务器连接后进行信息交互,接收该从属服务器发送的状态信息。
需要说明的是,所述状态信息,至少包括:
所述从属服务器的内存剩余量以及所述数据信息的写入状态信息。
在本实施例中,在所述主服务器接收所述从属服务器发送的状态信息后,所述主服务器会将所述状态信息中的所述数据信息的写入状态信息作为所述数据信息的属性进行记录。
所述主服务器将所述状态信息中的所述数据信息的写入状态信息作为所述数据信息的属性进行记录,可以采用如下方式实现:所述主服务器从所述状态信息中提取所述数据信息的写入状态信息,并将其作为所述数据信息的属性记录在文件目录树的对应所述数据信息的节点中。
可以理解的,在步骤S203所述主服务器接收所述客户端发送的加载数据信息的请求并提取所述数据信息时,由于从属服务器还未接收或未将所述数据信息写入成功,所以在文件目录树的对应所述数据信息的节点中记录所述数据信息,在接收所述从属服务器发送的状态信息后,根据所述状态信息对文件目录树的对应所述数据信息的节点中记录的属性进行更新。
需要说明的是,在将所述数据信息的写入状态信息作为所述数据信息的属性进行记录时,若所述数据信息的写入状态为成功,则将所述数据信息写入到基于内存的文件系统中的从属服务器信息记录到所述数据信息的属性中。
作为一个优选实施方式,本申请实施例提供的内存数据的写入方法中,由于在分布式系统中,会遇到各种各样的操作错误,用户预先设置的对所述数据信息的处理逻辑也可能发生错误,为了使所述数据信息进行处理发生错误时,能够继续提供服务,当用户预设的对所述数据信息的处理方式对所述数据信息进行处理发生错误,在所述将数据信息的写入状态信息作为所述数据信息的属性进行记录时,若所述数据信息的写入状态为失败,需要判断所述数据信息的写入次数是否超过预设的写入阈值,具体包括步骤S206-1至S206-2:
在所述主服务器接收所述从属服务器发送的状态信息时,若所述从属服务器发送的状态信息中所述数据信息的写入状态为失败,则判断所述数据信息的写入次数是否超过预设的写入阈值。例如:预设的写入阈值为5次。
步骤S208-1,若是,则记录所述数据信息的属性为失败。
在本实施例中,所述记录所述数据信息的属性为失败,可以采用如下方式实现:所述主服务器从所述状态信息中提取所述数据信息的写入状态信息(写入失败),并将其作为所述数据信息的属性记录在文件目录树的对应所述数据信息的节点中。
在本实施例中,所述数据信息的属性,包括:
所述数据信息的状态信息以及将所述数据信息写入到基于内存的文件系统中的从属服务器信息。
可以理解的,若所述数据信息的状态信息为写入失败,则所述数据信息写入到基于内存的文件系统中的从属服务器信息为空。
步骤S208-2,若否,则重新执行所述向从属服务器转发所述数据信息的步骤。
在本实施例中,所述重新执行所述向从属服务器转发所述数据信息的步骤,是指重新执行步骤S203所述主服务器接收所述客户端发送的加载数据信息的请求并提取所述数据信息,向从属服务器转发所述数据信息。
需要说明的是,所述从属服务器在将所述数据信息写入多次后(写入的次数超过阈值)仍未将所述数据信息写入成功,所以在重新执行所述向从属服务器转发所述数据信息时,是向其他的从属服务器转发所述数据信息。
在上述的实施例中,提供了一种内存数据共享系统以及一种内存数据的写入方法,此外,本申请还提供了一种内存数据的读取方法,所述方法在上述内存数据共享系统中实施;所述内存数据的读取方法实施例如下:
请参考图3,其示出了根据本申请的实施例提供的内存数据的读取方法的流程图。
所述内存数据的读取方法,包括:
步骤S301,客户端向所述主服务器发送获取需求数据信息的请求。
在本实施例中,所述客户端向所述主服务器发送获取需求数据信息的请求,可以采用如下方式实现:当前客户端通过TCP/IP连接等网络协议与主服务器连接后进行信息交互,当前客户端向主服务器发送获取需求数据信息的请求。
需要说明的是,所述需求数据信息是用户需要的数据信息,由于该数据信息存储在分布式系统中的从属服务器中,且在所述主服务器中存储的所述数据信息的属性中存有所述数据信息的状态以及将所述数据信息写入到基于内存的文件系统中的从属服务器信息。
具体的,所述获取需求数据信息的请求中,携带用户需求的所述数据信息的名称。
步骤S303,所述主服务器接收所述客户端发送的获取需求数据信息的请求,并向所述客户端反馈所述数据信息的属性。
在本实施例中,所述主服务器接收所述客户端发送的获取需求数据信息的请求后,通过所述获取需求数据信息的请求中,携带用户需求的所述数据信息的名称,在文件目录树中查询对应的所述数据信息。
在本实施例中,所述向所述客户端反馈所述属性,可以采用如下方式实现:所述主服务器通过TCP/IP连接等网络协议与所述客户端连接后进行信息交互,向所述客户端反馈所述数据信息的属性。
需要说明的是,所述数据信息的属性,包括:所述数据信息的状态以及将所述数据信息写入到基于内存的文件系统中的从属服务器信息。
步骤S305,所述客户端接收所述主服务器反馈的所述数据信息的属性,根据所述属性向对应的从属服务器发送获取所述数据信息的请求。
在本实施例中,所述客户端接收所述主服务器反馈的所述数据信息的属性,可以采用如下方式实现:当前客户端通过TCP/IP连接等网络协议与主服务器连接后进行信息交互,当前客户端接收所述主服务器反馈的所述数据信息的属性。
需要说明的是,所述根据所述属性向对应的从属服务器发送获取所述数据信息的请求,具体包括步骤S305-1至S305-3:
步骤S305-1,获取所述属性中的从属服务器信息。
在本实施例中,所述获取所述属性中的从属服务器信息,可以采用如下方式实现:读取所述所述属性记录的信息,获取从属服务器信息。
需要说明的是,所述从属服务器信息是描述所述从属服务器信息所在物理计算机的位置信息。
步骤S305-2,根据所述从属服务器信息获取与当前客户端的位置关系。
在本实施例中,所述根据所述从属服务器信息获取与当前客户端的位置关系,可以采用如下方式实现:根据所述从属服务器信息所在机器的位置信息判断所述从属服务器信息是否在当前客户端所在的物理计算机上。
步骤S305-3,根据所述位置关系向从属服务器发送获取所述数据信息的请求。
在本实施例中,所述根据所述位置关系向从属服务器发送获取所述数据信息的请求,可以采用如下方式实现:
若所述从属服务器与当前客户端的地址相同,则通过内存映射的方式向所述从属服务器发送获取所述数据信息的请求;
若所述从属服务器与当前客户端的地址不相同,则通过远程调用协议向所述从属服务器发送获取所述数据信息的请求。
需要说明的是,所述地址是指:所述从属服务器的ip地址以及当前客户端的ip地址。
可以理解的,若所述从属服务器与当前客户端的地址相同,则说明所述从属服务器与当前客户端的ip地址相同;同样的道理,若所述从属服务器与当前客户端的地址不相同,则说明所述从属服务器与当前客户端的ip地址不相同。
步骤S307,所述从属服务器接收所述客户端发送的获取数据信息的请求。
在本实施例中,所述从属服务器接收所述客户端发送的获取数据信息的请求,可以采用如下方式实现:当前从属服务器通过TCP/IP连接等网络协议与所述客户端连接后进行信息交互,当前从属服务器接收客户端发送的获取数据信息的请求。
步骤S309,所述从属服务器从所述基于内存的文件系统中获取所述数据信息,并向所述客户端发送所述数据信息。
在本实施例中,所述从属服务器从所述基于内存的文件系统中获取所述数据信息,可以采用如下方式实现:从tmpfs中获取与所述数据信息的请求中名称相同的数据信息。
需要说明的是,由于tmpfs是安装在所述从属服务器中的软件,所以从tmpfs中是通过内存中提取获取与所述数据信息的请求中名称相同的数据信息。
步骤S311,所述客户端接收所述从属服务器发送的数据信息。
在本实施例中,所述客户端接收所述从属服务器发送的数据信息,可以采用如下方式实现:若所述从属服务器与当前客户端的地址相同,CacheClient会通过内存映射的方式,将tmpfs中的数据直接映射到用户进程中;若所述从属服务器与当前客户端的地址不相同,CacheClient会通过远程调用协议接收所述从属服务器发送的数据信息。
可以理解的,若所述从属服务器与当前客户端的ip地址相同,则说明所述从属服务器与当前客户端在相同的物理计算机上,则通过内存映射的方式将tmpfs中的数据直接映射到用户进程中,使客户端接收到所述数据信息;若所述从属服务器与当前客户端的ip地址不相同,则说明所述从属服务器与当前客户端不在相同的物理计算机上,则需要通过TCP/IP连接等网络协议与所述从属服务器连接后进行信息交互,接收所述从属服务器发送的数据信息。
在上述的实施例中,提供了一种内存数据共享系统、一种内存数据的写入方法以及一种内存数据的读取方法,此外,本申请还提供了一种主服务器重载方法,所述方法在上述内存数据共享系统中实施;所述主服务器重载方法实施例如下:
请参考图4,其示出了根据本申请的实施例提供的主服务器重载方法的流程图。
所述主服务器重载方法,包括:
步骤S401,根据已记录的数据信息以及数据信息的特征标识创建所述数据信息的属性。
在本实施例中,所述根据已记录的数据信息以及数据信息的特征标识创建所述数据信息的属性,可以采用如下方式实现:从checkpoint中获取已记录的数据信息以及数据信息的特征标识,将所述数据信息以及数据信息的特征标识作为文件节点的属性,创建所述数据信息的属性。
需要说明的是,在该分布式系统中,所述checkpoint由CacheMaster负责维护。CacheMaster以文件目录树的形式管理数据文件,当接收到客户端发送的加载数据信息的请求时,CacheMaster会为该数据信息创建一个节点,并将节点属性写到checkpoint中,最后再将该节点插入到目录树中,当CacheMaster发生重启时,可以根据checkpoint的内容重建目录树。由于写checkpoint时,系统自身的状态不能发生变化,这就导致CacheMaster无法新增或删除文件节点,因此,为了保证系统的可服务性,checkpoint的内容不能太多。
步骤S403,将所述属性中数据信息的写入状态设置为未调度。
在本实施例中,所述将所述属性中数据信息的写入状态设置为未调度,可以采用如下方式实现:将CacheMaster重启后,由于CacheMaster无法从checkpoint中获取数据信息的调度状态,所以CacheMaster会将所有数据信息的状态标记为未调度。
步骤S405,接收每一从属服务器发送的已写入数据信息的状态信息。
在本实施例中,所述接收每一从属服务器发送的已写入数据信息的状态信息,可以采用如下方式实现:主服务器通过TCP/IP连接等网络协议与每一从属服务器连接后进行信息交互,主服务器接收每一从属服务器发送的已写入数据信息的状态信息。
在所述接收每一从属服务器发送的已写入数据信息的状态信息,具体包括如下步骤:
接收每一从属服务器发送的状态信息;
向每一从属服务器发送获取已写入数据信息的状态信息的请求。
步骤S407,根据所述状态信息修改所述属性中数据信息的写入状态。
在本实施例中,所述根据所述状态信息修改所述属性中数据信息的写入状态,可以采用如下方式实现:将所述属性中数据信息的写入状态修改为接收到的所述状态信息。
在所述根据所述状态信息修改所述属性中数据信息的写入状态的步骤之后,包括:
判断是否存在数据信息的写入状态为未调度的属性;
若存在,则启动计时器;
在超过预设的时间后,判断所述属性的数据信息的写入状态是否为未调度;
若是,则向从属服务器发送所述数据信息。
可以理解的,在超过预设的时间后所述属性的数据信息的写入状态仍为未调度时,则说明用户的对所述数据信息预设的处理方式无法对所述数据信息进行处理或所述数据信息预设的处理方式对所述数据信息进行处理时会发生错误,则使所述主服务器重新进行调度,将所述数据信息发送至分布式系统中的其他从属服务器中进行写入。
在上述的实施例中,提供了一种主服务器重载方法,与上述主服务器重载方法相对应的,本申请还提供了一种主服务器重载装置。由于装置的实施例基本相似于方法的实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。所述主服务器重载装置实施例如下:
请参考图5,其示出了根据本申请的实施例提供的主服务器重载装置的示意图。
所述主服务器重载装置,包括:属性创建单元501、写入状态设置单元503、写入状态接收单元505以及状态修改单元507;
所述属性创建单元501,用于根据已记录的数据信息以及数据信息的特征标识创建所述数据信息的属性;
所述写入状态设置单元503,用于将所述属性中数据信息的写入状态设置为未调度;
所述写入状态接收单元505,用于接收每一从属服务器发送的已写入数据信息的状态信息;
所述写入状态修改单元507,用于根据所述状态信息修改所述属性中数据信息的写入状态。
可选的,所述的主服务器重载装置,其特征在于,还包括:状态接收单元以及写入状态请求发送单元;
所述状态接收单元,用于在所述接收每一从属服务器发送的已写入数据信息的状态信息之前,接收每一从属服务器发送的状态信息;
所述写入状态请求发送单元,用于向每一从属服务器发送获取已写入数据信息的状态信息的请求。
可选的,所述的主服务器重载装置,还包括:属性判断单元、计时器启动单元、状态判断单元以及数据发送单元;
所述属性判断单元,用于在所述根据所述状态信息修改所述属性中数据信息的写入状态之后,判断是否存在数据信息的写入状态为未调度的属性;
所述计时器启动单元,用于接收所述属性判断单元的判断结果,若存在,则启动计时器;
所述状态判断单元,用于在超过预设的时间后,判断所述属性的数据信息的写入状态是否为未调度;
所述数据发送单元,用于接收所述状态判断单元的判断结果,若是,则向其他从属服务器发送所述数据信息。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
Claims (42)
1.一种内存数据共享系统,其特征在于,包括:主服务器、从属服务器、客户端以及基于内存的文件系统;每一客户端与所述主服务器、至少一个所述从属服务器通信连接;所述主服务器与每一从属服务器通信连接;所述每一从属服务器中均安装基于内存的文件系统;
其中,所述从属服务器,用于接收所述主服务器发送的数据信息,并将所述数据信息写入到所述基于内存的文件系统中、接收所述客户端发送的获取数据信息的请求,从所述基于内存的文件系统中获取所述数据信息,并向所述客户端发送所述数据信息;
所述主服务器,用于接收所述客户端发送的加载数据信息的请求,所述加载数据信息的请求携带所述数据信息,提取并记录所述数据信息的属性,并向所述从属服务器转发所述数据信息、接收所述客户端发送的获取需求数据信息的请求,并向所述客户端反馈所述数据信息的属性;
所述客户端,用于向所述主服务器发送加载数据信息的请求,所述加载数据信息的请求携带所述数据信息、向所述主服务器发送获取需求数据信息的请求,接收所述主服务器反馈的所述数据信息的属性,根据所述属性向对应的从属服务器发送获取所述数据信息的请求,并接收所述从属服务器发送的数据信息;
所述基于内存的文件系统,用于在内存中存储所述数据信息。
2.根据权利要求 1 所述的内存数据共享系统,其特征在于,所述客户端还用于在向所述主服务器发送加载数据信息的请求之前,向所述每一从属服务器发送预设的对数据信息的处理方式;
相应的,所述每一从属服务器在接收所述主服务器发送的数据信息之前,还用于接收预设的对所述数据信息的处理方式。
3.根据权利要求 2 所述的内存数据共享系统,其特征在于,所述客户端还用于在向所述主服务器发送加载数据信息的请求之前,将所述数据信息划分为至少一个切片数据信息,并为所述数据信息创建特征标识,使每一切片数据信息携带所述数据信息的特征标识;
相应的,所述主服务器在接收所述客户端发送的加载数据信息的请求时,所述加载数据信息的请求还携带所述数据信息的特征标识。
4.根据权利要求 3 所述的内存数据共享系统,其特征在于,在接收客户端发送的加载数据信息的请求之后,所述主服务器还用于判断所述加载数据信息的请求中携带的所述数据信息的特征标识是否存在;
若是,则向所述客户端发送加载所述数据信息失败的反馈信息;
若否,则记录所述数据信息以及所述数据信息的特征标识。
5.根据权利要求 4 所述的内存数据共享系统,其特征在于,所述客户端还用于向主服务器发送加载数据信息的请求之后,若接收到所述主服务器发送的加载所述数据信息失败的反馈信息,则修改所述数据信息的特征标识,并重新向所述主服务器发送加载数据信息的请求。
6.根据权利要求 5 所述的内存数据共享系统,其特征在于,所述从属服务器还用于按照预设的时间间隔向所述主服务器发送状态信息;
相应的,所述主服务器还用于接收所述每一从属服务器发送的状态信息;
其中,所述状态信息,至少包括:从属服务器的内存剩余量。
7.根据权利要求 6 所述的内存数据共享系统,其特征在于,在接收所述每一从属服务器发送的状态信息之后,所述主服务器还用于判断所述每一从属服务器的内存剩余量是否低于预设的阈值;
若是,则释放所述从属服务器的内存,使所述从属服务器的内存剩余量大于预设的阈值。
8.根据权利要求 6 所述的内存数据共享系统,其特征在于,所述主服务器向从属服务器发送所述数据信息,包括:
根据所述加载数据信息的请求携带的所述数据信息获取所述数据信息占用的内存空间;
根据每一从属服务器的内存剩余量选取从属服务器的内存剩余量大于所述数据信息占用的内存空间的从属服务器;
向选取的所述从属服务器发送所述数据信息。
9.根据权利要求 8 所述的内存数据共享系统,其特征在于,所述从属服务器将所述数据信息写入到基于内存的文件系统中,包括:
按照所述预设的对数据信息的处理方式对所述数据信息进行处理;
将处理后的所述数据信息写入到基于内存的文件系统中。
10.根据权利要求 9 所述的内存数据共享系统,其特征在于,所述从属服务器具体用于将处理后的所述数据信息以文件的形式写入到基于内存的文件系统中。
11.根据权利要求 9 所述的内存数据共享系统,其特征在于,所述从属服务器还用于在所述按照所述预设的处理方式对所述数据信息进行处理时,将所述数据信息的处理结果设置为所述数据信息的写入状态。
12.根据权利要求 11 所述的内存数据共享系统,其特征在于,所述从属服务器还用于将所述数据信息的写入状态作为该数据信息的状态信息,按照预设的时间间隔向所述主服务器发送状态信息;
相应的,所述主服务器在接收所述从属服务器发送的状态信息时,所述状态信息,至少包括:从属服务器的内存剩余量以及所述数据信息的写入状态信息。
13.根据权利要求 12 所述的内存数据共享系统,其特征在于,所述主服务器还用于在所述接收所述从属服务器发送的状态信息时,若所述从属服务器发送的状态信息为失败,则判断所述数据信息的写入次数是否超过预设的写入阈值;
若是,则记录所述数据信息的属性为失败;
若否,则重新向所述从属服务器转发所述数据信息。
14.根据权利要求 13 所述的内存数据共享系统,其特征在于,所述数据信息的属性,包括:
所述数据信息的状态信息以及将所述数据信息写入到基于内存的文件系统中的从属服务器信息。
15.根据权利要求 14 所述的内存数据共享系统,其特征在于,所述客户端根据所述属性向对应的从属服务器发送获取所述数据信息的请求,包括:
获取所述属性中的从属服务器信息;
根据所述从属服务器信息获取与当前客户端的位置关系;
根据所述位置关系向从属服务器发送获取所述数据信息的请求。
16.根据权利要求 15 所述的内存数据共享系统,其特征在于,所述客户端所述根据所述位置关系向从属服务器发送获取所述数据信息的请求,包括:
若所述从属服务器与当前客户端的地址相同,则通过内存映射的方式向所述从属服务器发送获取所述数据信息的请求;
若所述从属服务器与当前客户端的地址不相同,则通过远程调用协议向所述从属服务器发送获取所述数据信息的请求;
相应的,所述从属服务器从所述基于内存的文件系统中获取所述数据信息,并向所述客户端发送所述数据信息时,若通过内存映射的方式接收到所述客户端发送的获取数据信息的请求,则通过内存映射的方式向所述客户端发送所述数据信息;
若通过远程调用协议接收到所述客户端发送的获取数据信息的请求,则通过远程调用协议向所述客户端发送所述数据信息。
17.一种内存数据的写入方法,其特征在于,所述方法在权利要求1-16任意一项所述的内存数据共享系统中实施,包括:
客户端向主服务器发送加载数据信息的请求,所述加载数据信息的请求携带所述数据信息;
所述主服务器接收所述客户端发送的加载数据信息的请求并提取所述数据信息,向从属服务器转发所述数据信息;
所述从属服务器接收所述主服务器发送的数据信息,并将所述数据信息写入到基于内存的文件系统中。
18.根据权利要求 17 所述的内存数据的写入方法,其特征在于,在所述客户端向所述主服务器发送加载数据信息的请求的步骤之前,包括:
所述客户端向每一从属服务器发送预设的对数据信息的处理方式;
相应的,在所述从属服务器接收所述主服务器发送的数据信息的步骤之前,包括:
所述从属服务器接收预设的对所述数据信息的处理方式。
19.根据权利要求 18 所述的内存数据的写入方法,其特征在于,在所述客户端向所述主服务器发送加载数据信息的请求的步骤之前,还包括:
将所述数据信息划分为至少一个切片数据信息,并为所述数据信息创建特征标识,使每一切片数据信息携带所述数据信息的特征标识;
相应的,在所述主服务器接收所述客户端发送的加载数据信息的请求时,所述加载数据信息的请求还携带所述数据信息的特征标识。
20.根据权利要求 19 所述的内存数据的写入方法,其特征在于,在所述主服务器接收所述客户端发送的加载数据信息的请求的步骤之后,包括:
判断所述加载数据信息的请求中携带的所述数据信息的特征标识是否存在;
若是,则向所述客户端发送加载所述数据信息失败的反馈信息;
若否,则记录所述数据信息以及所述数据信息的特征标识。
21.根据权利要求 20 所述的内存数据的写入方法,其特征在于,在所述客户端向主服务器发送加载数据信息的请求的步骤之后,包括:
若接收到所述主服务器发送的加载所述数据信息失败的反馈信息,则修改所述数据信息的特征标识,并重新向所述主服务器发送加载数据信息的请求。
22.根据权利要求 20 所述的内存数据的写入方法,其特征在于,还包括:
所述从属服务器按照预设的时间间隔向所述主服务器发送状态信息;
相应的,所述主服务器接收所述每一从属服务器发送的状态信息;
其中,所述状态信息,至少包括:从属服务器的内存剩余量。
23.根据权利要求 22 所述的内存数据的写入方法,其特征在于,在所述主服务器接收所述每一从属服务器发送的状态信息的步骤之后,包括:
所述主服务器判断所述每一从属服务器的内存剩余量是否低于预设的阈值;
若是,则释放所述从属服务器的内存。
24.根据权利要求 22 所述的内存数据的写入方法,其特征在于,所述主服务器向从属服务器发送所述数据信息,包括:
根据所述加载数据信息的请求携带的所述数据信息获取所述数据信息占用的内存空间;
根据每一从属服务器的内存剩余量选取从属服务器的内存剩余量大于所述数据信息占用的内存空间的从属服务器;
向选取的所述从属服务器发送所述数据信息。
25.根据权利要求 24 所述的内存数据的写入方法,其特征在于,所述从属服务器将所述数据信息写入到基于内存的文件系统中,包括:
按照所述预设的对数据信息的处理方式对所述数据信息进行处理;
将处理后的所述数据信息写入到基于内存的文件系统中。
26.根据权利要求 25 所述的内存数据的写入方法,其特征在于,所述将处理后的所述数据信息写入到基于内存的文件系统中,采用如下方式实现:
将处理后的所述数据信息以文件的形式写入到基于内存的文件系统中。
27.根据权利要求 25 所述的内存数据的写入方法,其特征在于,在所述按照所述预设的处理方式对所述数据信息进行处理时,将所述数据信息的处理结果设置为所述数据信息的写入状态。
28.根据权利要求 27 所述的内存数据的写入方法,其特征在于,在所述将所述数据信息的处理结果设置为所述数据信息的写入状态的步骤之后,包括:
所述主服务器在接收所述从属服务器发送的状态信息时,所述状态信息,至少包括:从属服务器的内存剩余量以及所述数据信息的写入状态信息。
29.根据权利要求 28 所述的内存数据的写入方法,其特征在于,在所述主服务器接收所述从属服务器发送的状态信息后,将所述数据信息的写入状态信息作为所述数据信息的属性进行记录。
30.根据权利要求 29 所述的内存数据的写入方法,其特征在于,在将所述数据信息的写入状态信息作为所述数据信息的属性进行记录时,若所述数据信息的写入状态为失败,则判断所述数据信息的写入次数是否超过预设的写入阈值;
若是,则记录所述数据信息的属性为失败;
若否,则重新执行所述向从属服务器转发所述数据信息的步骤。
31.根据权利要求 29 所述的内存数据的写入方法,其特征在于,在将所述数据信息的写入状态信息作为所述数据信息的属性进行记录时,若所述数据信息的写入状态为成功,则将所述数据信息写入到基于内存的文件系统中的从属服务器信息记录到所述数据信息的属性中。
32.一种内存数据的读取方法,所述方法在权利要求1-16任意一项所述的内存数据共享系统中实施,其特征在于,包括:
客户端向主服务器发送获取需求数据信息的请求;
所述主服务器接收所述客户端发送的获取需求数据信息的请求,并向所述客户端反馈所述数据信息的属性;
所述客户端接收所述主服务器反馈的所述数据信息的属性,根据所述属性向对应的从属服务器发送获取所述数据信息的请求;
所述从属服务器接收所述客户端发送的获取数据信息的请求;
所述从属服务器从基于内存的文件系统中获取所述数据信息,并向所述客户端发送所述数据信息;
所述客户端接收所述从属服务器发送的数据信息。
33.根据权利要求 32 所述的内存数据的读取方法,其特征在于,所述数据信息的属性,包括:所述数据信息的写入状态以及将所述数据信息写入到基于内存的文件系统中的从属服务器信息。
34.根据权利要求 33 所述的内存数据的读取方法,其特征在于,所述根据所述属性向对应的从属服务器发送获取所述数据信息的请求,包括:
获取所述属性中的从属服务器信息;
根据所述从属服务器信息获取与当前客户端的位置关系;
根据所述位置关系向从属服务器发送获取所述数据信息的请求。
35.根据权利要求 34 所述的内存数据的读取方法,其特征在于,所述根据所述位置关系向从属服务器发送获取所述数据信息的请求,包括:
若所述从属服务器与当前客户端的地址相同,则通过内存映射的方式向所述从属服务器发送获取所述数据信息的请求;
若所述从属服务器与当前客户端的地址不相同,则通过远程调用协议向所述从属服务器发送获取所述数据信息的请求。
36.根据权利要求 35 所述的内存数据的读取方法,其特征在于,所述从属服务器向所述客户端发送所述数据信息,包括:
若通过内存映射的方式接收到所述客户端发送的获取数据信息的请求,则通过内存映射的方式向所述客户端发送所述数据信息;
若通过远程调用协议接收到所述客户端发送的获取数据信息的请求,则通过远程调用协议向所述客户端发送所述数据信息。
37.一种主服务器重载方法,其特征在于,所述方法在权利要求1-16任意一项所述的内存数据共享系统中实施,所述方法包括:
根据已记录的数据信息以及数据信息的特征标识创建所述数据信息的属性;
将所述属性中数据信息的写入状态设置为未调度;
接收每一从属服务器发送的已写入数据信息的状态信息;
根据所述状态信息修改所述属性中数据信息的写入状态。
38.根据权利要求 37 所述的主服务器重载方法,其特征在于,在所述接收每一从属服务器发送的已写入数据信息的状态信息的步骤之前,包括:
接收各个从属服务器发送的状态信息;
向每一从属服务器发送获取已写入数据信息的状态信息的请求。
39.根据权利要求 37 所述的主服务器重载方法,其特征在于,在所述根据所述状态信息修改所述属性中数据信息的写入状态的步骤之后,包括:
判断是否存在数据信息的写入状态为未调度的属性;
若存在,则启动计时器;
在超过预设的时间后,判断所述属性的数据信息的写入状态是否为未调度;
若是,则向其他从属服务器发送所述数据信息。
40.一种主服务器重载装置,其特征在于,所述装置应用于权利要求1-16任意一项所述的内存数据共享系统中,所述装置包括:
属性创建单元,用于根据已记录的数据信息以及数据信息的特征标识创建所述数据信息的属性;
写入状态设置单元,用于将所述属性中数据信息的写入状态设置为未调度;
写入状态接收单元,用于接收每一从属服务器发送的已写入数据信息的状态信息;
写入状态修改单元,用于根据所述状态信息修改所述属性中数据信息的写入状态。
41.根据权利要求 40 所述的主服务器重载装置,其特征在于,还包括:
状态接收单元,用于在所述接收每一从属服务器发送的已写入数据信息的状态信息之前,接收各个从属服务器发送的状态信息;
写入状态请求发送单元,用于向每一从属服务器发送获取已写入数据信息的状态信息的请求。
42.根据权利要求 40 所述的主服务器重载装置,其特征在于,还包括:
属性判断单元,用于在所述根据所述状态信息修改所述属性中数据信息的写入状态之后,判断是否存在数据信息的写入状态为未调度的属性;
计时器启动单元,用于接收所述属性判断单元的判断结果,若存在,则启动计时器;
状态判断单元,用于在超过预设的时间后,判断所述属性的数据信息的写入状态是否为未调度;
数据发送单元,用于接收所述状态判断单元的判断结果,若是,则向其他从属服务器发送所述数据信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610953168.3A CN108023914B (zh) | 2016-11-03 | 2016-11-03 | 一种内存数据共享系统、内存数据的写入以及读取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610953168.3A CN108023914B (zh) | 2016-11-03 | 2016-11-03 | 一种内存数据共享系统、内存数据的写入以及读取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108023914A CN108023914A (zh) | 2018-05-11 |
CN108023914B true CN108023914B (zh) | 2021-03-02 |
Family
ID=62070894
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610953168.3A Active CN108023914B (zh) | 2016-11-03 | 2016-11-03 | 一种内存数据共享系统、内存数据的写入以及读取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108023914B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114911725A (zh) * | 2021-02-10 | 2022-08-16 | 华为技术有限公司 | 通信方法、装置及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880529A (zh) * | 2012-09-13 | 2013-01-16 | 新浪网技术(中国)有限公司 | 内存数据备份方法及内存数据备份系统 |
CN103078927A (zh) * | 2012-12-28 | 2013-05-01 | 合一网络技术(北京)有限公司 | 一种key-value数据分布式缓存系统及其方法 |
CN103475716A (zh) * | 2013-09-11 | 2013-12-25 | 北京京东尚科信息技术有限公司 | 通过共享存储实现数据共享的方法和系统 |
CN103577500A (zh) * | 2012-08-10 | 2014-02-12 | 腾讯科技(深圳)有限公司 | 分布式文件系统进行数据处理的方法及该分布式文件系统 |
CN105426439A (zh) * | 2015-11-05 | 2016-03-23 | 腾讯科技(深圳)有限公司 | 一种元数据的处理方法和装置 |
CN105488047A (zh) * | 2014-09-16 | 2016-04-13 | 华为技术有限公司 | 元数据读写方法和装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPWO2008139521A1 (ja) * | 2007-04-27 | 2010-07-29 | 富士通株式会社 | リモートファイルシステム、端末装置およびサーバ装置 |
JP5577471B2 (ja) * | 2011-09-14 | 2014-08-20 | 株式会社日立製作所 | サーバ計算機、サーバ計算機システム、及びサーバ計算機制御方法 |
CN103037002A (zh) * | 2012-12-21 | 2013-04-10 | 中标软件有限公司 | 一种云计算集群环境中服务器集群的部署方法及系统 |
CN103389884A (zh) * | 2013-07-29 | 2013-11-13 | 华为技术有限公司 | 处理输入/输出请求的方法、宿主机、服务器和虚拟机 |
CN104049918B (zh) * | 2014-07-03 | 2016-12-07 | 浪潮集团有限公司 | 一种双控存储服务器的缓存管理方法 |
-
2016
- 2016-11-03 CN CN201610953168.3A patent/CN108023914B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103577500A (zh) * | 2012-08-10 | 2014-02-12 | 腾讯科技(深圳)有限公司 | 分布式文件系统进行数据处理的方法及该分布式文件系统 |
CN102880529A (zh) * | 2012-09-13 | 2013-01-16 | 新浪网技术(中国)有限公司 | 内存数据备份方法及内存数据备份系统 |
CN103078927A (zh) * | 2012-12-28 | 2013-05-01 | 合一网络技术(北京)有限公司 | 一种key-value数据分布式缓存系统及其方法 |
CN103475716A (zh) * | 2013-09-11 | 2013-12-25 | 北京京东尚科信息技术有限公司 | 通过共享存储实现数据共享的方法和系统 |
CN105488047A (zh) * | 2014-09-16 | 2016-04-13 | 华为技术有限公司 | 元数据读写方法和装置 |
CN105426439A (zh) * | 2015-11-05 | 2016-03-23 | 腾讯科技(深圳)有限公司 | 一种元数据的处理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108023914A (zh) | 2018-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11153380B2 (en) | Continuous backup of data in a distributed data store | |
US10977245B2 (en) | Batch data ingestion | |
US11327799B2 (en) | Dynamic allocation of worker nodes for distributed replication | |
US11010240B2 (en) | Tracking status and restarting distributed replication | |
US20200348852A1 (en) | Distributed object replication architecture | |
US20190188406A1 (en) | Dynamic quorum membership changes | |
US9785510B1 (en) | Variable data replication for storage implementing data backup | |
EP3223165B1 (en) | File processing method, system and server-clustered system for cloud storage | |
US8832234B1 (en) | Distributed data storage controller | |
US11314444B1 (en) | Environment-sensitive distributed data management | |
US20150263909A1 (en) | System and method for monitoring a large number of information processing devices in a communication network | |
US20160364407A1 (en) | Method and Device for Responding to Request, and Distributed File System | |
CN113094430B (zh) | 一种数据处理方法、装置、设备以及存储介质 | |
US9298765B2 (en) | Apparatus and method for handling partially inconsistent states among members of a cluster in an erratic storage network | |
CN114594914A (zh) | 用于分布式存储系统的控制方法及系统 | |
CN111225003B (zh) | 一种nfs节点配置方法和装置 | |
CN108023914B (zh) | 一种内存数据共享系统、内存数据的写入以及读取方法 | |
KR20130038517A (ko) | 분산된 컨테이너들을 사용하여 데이터를 관리하는 시스템 및 방법 | |
CN115562933A (zh) | 作业监控数据的处理方法及装置、存储介质、电子设备 | |
US20130318040A1 (en) | Data replication apparatus and method using hierarchical organization of data servers | |
KR20150083276A (ko) | 대용량 메모리 기반 데이터 처리를 위한 원격 메모리 데이터 관리 방법 및 시스템 | |
TWI826093B (zh) | 虛擬機器備援方法及系統 | |
CN116974482A (zh) | Ess弹性存储系统、方法及装置 | |
CN116233123A (zh) | 信息的处理方法及装置、处理器和电子设备 | |
CN117354141A (zh) | 应用服务管理方法、设备和计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |