本发明涉及分布式对象存储系统领域,尤其涉及基于日志的ceph(一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统)对象存储追加写实现方法。
背景技术:
随着物联网,云计算,大数据、以及5g等技术的发展。医疗,电信,互联网,政企,等行业应用的快速发展,促使海量数据快速增长,对传统的存储系统造成很大的挑战,对象存储作为新兴的存储技术在越来越多的行业得到广泛使用。相对于传统的文件系统,对象存储摒弃了文件系统复杂的目录和语义设计,通过扁平化的键值方式进行数据存储,大大简化了元数据管理的复杂度,在存储容量上几乎没有限制,从而更加适用于当今各种行业的海量数据存储,特别是大数据行业的应用场景。随着5g和超高清码率的推广应用,音频,视频文件的大小从原有的几十g增长到几百g,对于单一存储系统所需要的存储容量也从传统的几百tb增长到pb级,甚至几十pb级。对于大容量的存储系统,通常都是采用对象存储系统以支撑海量数据的存储和应用。
在媒体应用场景中,对象存储成为了热点音视频文件的主流存储方式,经常需要对音频,视频文件进行边读取,边编辑的方式处理数据。但是由于目前对象存储io(输入输出)特性的局限性,不支持追加写操作,只允许覆盖写操作,因此对象存储急需一种能支撑用户边读取,边编辑的新的io处理方式,以迎合市场不断的变化,加强市场的竞争力。
技术实现要素:
本发明的目的在于提供一种基于日志的对象存储追加写实现方法,在不需要重复上传原始对象文件的前提下实现数据追加合成,同时在上传数据的时候记录日志避免意外中断导致数据丢失。
实现上述目的的技术方案是:
一种基于日志的对象存储追加写实现方法,包括:
通过客户端发送追加写请求给对象存储系统;
对象存储系统的对象存储web(全球广域网)端处理层检查追加写请求参数的合法性,若检查失败,返回错误;若检查通过,将追加写请求转发到对象存储处理层;
对象存储处理层记录日志状态为数据初始化,并进行对象合法性检查,若检查失败,返回错误;若检查通过,判断目标对象是否存在;
若目标对象存在,更新日志状态为写入数据,解析目标对象的元数据并判断目标对象类型,根据目标对象类型以对应方式写入待追加的数据;
若目标对象不存在,更新日志状态为写入数据,初始化目标对象的条带信息,然后从第一个分片开始,以新的条带为开始位置写入待追加的数据;
对象存储处理层更新日志状态为数据处理完成,把元数据写入目标对象的头对象中;
元数据更新完成,待所有操作成功后记录日志,对象存储系统返回响应信息给客户端。
优选的,客户端通过对象存储系统提供的restful(restful是一种网络应用程序的设计风格和开发方式,基于http,可以使用xml格式定义或json格式定义)api(应用程序接口)接口发送追加写请求给对象存储系统;
对象存储系统通过restfulapi接口返回响应信息给客户端。
优选的,所述的追加写请求的请求参数包括目标对象名称和目标对象的实际大小。
优选的,所述的对象合法性检查包括:对象权限校验和对象长度检查。
优选的,元数据包括修改时间、分片信息以及修改后总数据长度。
优选的,若目标对象为整体上传对象,则依据目标对象的元数据信息,获取目标对象的最后一个底层对象,把待追加的数据从末尾开始写入;
若目标对象类型为分段上传对象,则依据目标对象的元数据信息,获取分片号码,并使其和目标对象分片号码连续,以新的条带为开始位置写入待追加的数据。
本发明的有益效果是:本发明提供给业务系统使用,无需重复上传原有对象,节约存储系统资源,减少对象的上传时间,并大大提升了应用系统的业务效率。同时,在原有追加写的基础上拓宽了追加写方法的使用范围,使追加写不再局限于类型为追加对象的追加写,也支持automicobject(整体上传对象),multpartobject(分段上传对象)对象的追加写,使写入更加灵活。另外,本发明在日志保护机制加固下,一定程度上保证了异常中断后,数据不会丢失的问题,从而增加了系统的可靠性。而且,对于业务系统而言无需感知追加的目标对象是automicobject还是multpartobject,保持restfulapi接口不变的前提下,系统内部自动识别目标对象类型进行数据处理,能够确保与市场绝大多数对象存储系统使用的兼容,从而提升用户使用体验。
附图说明
图1是本发明的基于日志的对象存储追加写实现方法的流程图。
具体实施方式
下面将结合附图对本发明作进一步说明。
请参阅图1,本发明的基于日志的对象存储追加写实现方法,包括下列步骤:
s1、客户端通过对象存储系统提供的restfulapi接口发送追加写请求给对象存储系统。追加写请求的请求参数包括目标对象名称和目标对象的实际大小。
s2、对象存储系统的对象存储web端处理层检查追加写请求参数的合法性(即:对象大小字段输入是否为空或者内容是否是全数字;追加请求关键字段得值是否为append),若检查失败,返回错误;若检查通过,将追加写请求转发到对象存储处理层。
s3、对象存储处理层记录日志状态为数据初始化,并进行对象合法性检查,若检查失败,返回错误;若检查通过,判断目标对象是否存在。对象合法性检查包括:对象权限校验(即:比较请求用户的acl访问控制信息和目标对象元数据中的acl访问控制信息是否相等)和对象长度检查(即:比较请求传入的位置长度大小和目标对象元数据中保存的长度是否相等)。
s31、若目标对象存在,更新日志状态为写入数据,解析目标对象的元数据并判断目标对象类型,根据目标对象类型以对应方式写入待追加的数据。若目标对象类型为automicobject,则依据目标对象的元数据信息,获取目标对象的最后一个底层对象(最后一个raods对象),把待追加的数据从末尾开始写入。若目标对象类型为multpartobject,则依据目标对象的元数据信息,获取分片号码,并使其和目标对象分片号码连续,以新的条带(条带从0开始)为开始位置写入待追加的数据
s32、若目标对象不存在,更新日志状态为写入数据,初始化目标对象的条带信息,然后分片从1开始(从第一个分片开始),以新的条带为开始位置写入待追加的数据。
s4、对象存储处理层更新日志状态为数据处理完成,把元数据写入目标对象的头对象中。元数据包括修改时间、分片信息以及修改后总数据长度。
s5、元数据更新完成,待所有操作成功后记录日志,对象存储系统通过restfulapi接口返回响应信息给客户端。
以上实施例仅供说明本发明之用,而非对本发明的限制,有关技术领域的技术人员,在不脱离本发明的精神和范围的情况下,还可以作出各种变换或变型,因此所有等同的技术方案也应该属于本发明的范畴,应由各权利要求所限定。
1.一种基于日志的对象存储追加写实现方法,其特征在于,包括:
通过客户端发送追加写请求给对象存储系统;
对象存储系统的对象存储web端处理层检查追加写请求参数的合法性,若检查失败,返回错误;若检查通过,将追加写请求转发到对象存储处理层;
对象存储处理层记录日志状态为数据初始化,并进行对象合法性检查,若检查失败,返回错误;若检查通过,判断目标对象是否存在;
若目标对象存在,更新日志状态为写入数据,解析目标对象的元数据并判断目标对象类型,根据目标对象类型以对应方式写入待追加的数据;
若目标对象不存在,更新日志状态为写入数据,初始化目标对象的条带信息,然后从第一个分片开始,以新的条带为开始位置写入待追加的数据;
对象存储处理层更新日志状态为数据处理完成,把元数据写入目标对象的头对象中;
元数据更新完成,待所有操作成功后记录日志,对象存储系统返回响应信息给客户端。
2.根据权利要求1所述的基于日志的对象存储追加写实现方法,其特征在于,客户端通过对象存储系统提供的restfulapi接口发送追加写请求给对象存储系统;
对象存储系统通过restfulapi接口返回响应信息给客户端。
3.根据权利要求1所述的基于日志的对象存储追加写实现方法,其特征在于,所述的追加写请求的请求参数包括目标对象名称和目标对象的实际大小。
4.根据权利要求1所述的基于日志的对象存储追加写实现方法,其特征在于,所述的对象合法性检查包括:对象权限校验和对象长度检查。
5.根据权利要求1所述的基于日志的对象存储追加写实现方法,其特征在于,元数据包括修改时间、分片信息以及修改后总数据长度。
6.根据权利要求1所述的基于日志的对象存储追加写实现方法,其特征在于,
若目标对象为整体上传对象,则依据目标对象的元数据信息,获取目标对象的最后一个底层对象,把待追加的数据从末尾开始写入;
若目标对象类型为分段上传对象,则依据目标对象的元数据信息,获取分片号码,并使其和目标对象分片号码连续,以新的条带为开始位置写入待追加的数据。
技术总结