本发明涉及对象存储技术,尤其涉及一种radosgateway的多媒体处理方法。
背景技术:
openresty集成了nginx核心以及众多lua库和第三方模块,是一个能无阻塞地处理高并发连接的全功能的web平台,工程师可以使用lua脚本分阶段调动nginx的资源,而且将任务拆解后通过socket技术分发到分布式计算服务端并进行结果处理。对象存储所用的radosgateway本身并不支持多媒体处理,但是提供多媒体存储服务,利用openresty技术就可以解决这一矛盾,提升用户体验并扩展对象存储的功能。
技术实现要素:
为了解决以上技术问题,本发明提出了一种radosgateway的多媒体处理方法,支持多媒体处理、提供多媒体存储服务,提升用户体验并扩展对象存储的功能。
本发明的技术方案是:
一种radosgateway的多媒体处理方法,
利用s3协议可以自定义元数据的特性,将多媒体的资源处理参数放在请求header中的用户自定义元数据字段(x-amz-meta-开头)中,客户端将请求发送至openresty服务网关中,网关根据多媒体数据的大小选择同步或异步两种方式下发多媒体处理任务,openresty将请求转发到radosgateway中,当radosgateway完成操作后,同步方式使用http_image_filter_module模块直接处理多媒体数据并返回给客户端,异步方式将任务下发到kafka再由专门的多媒体处理程序进行处理,进而更新处理结果到数据库中以方便后续客户端查询,从而利用一个请求同时完成了对象存储一般服务和多媒体数据处理。
进一步的,包括以下三个部分:
1)在请求中添加用户自定义元数据标识数据处理参数,
2)openresty分发任务到不同的多媒体处理模块,
3)数据状态返回。
在请求中添加用户自定义元数据标识数据处理参数,这种方式通过灵活定义元数据可以满足几乎所有的多媒体数据处理要求。
在请求中添加用户自定义元数据标识数据处理参数,不改变原生radosgateway接口和鉴权体系,对原生radosgateway的入侵极小。
在请求中添加用户自定义元数据标识数据处理参数,这种方式的特点在于同时在一个请求中既能完成一般的对象存储提供的功能又能处理多媒体数据。
使用openresty的特点在于openresty不仅可以直接同步处理多媒体数据,而且可以将复杂的数据处理任务转发到专门的多媒体处理模块异步进行。
进一步的,
将多媒体数据处理参数写入到s3请求中的用户自定义元数据字段:
定制s3协议中requestheader中自定义元数据字段,将多媒体处理的相关参数通过header的方式传给对象存储服务端。
进一步的,
复杂均衡层根据处理数据的大小决定同步还是异步进行多媒体数据的处理。
同步处理:
请求发送到openresty以后,处理图片和音频的时候,直接向radosgateway请求数据,拿到数据后利用http_image_filter_module模块完成对象数据的多媒体处理过程,处理结束后将结果返回给客户端;
当同步处理多媒体数据时,处理完成后数据状态直接返回客户端,不需要额外设计查询接口。
同步的处理多媒体数据合理利用了openresty数据缓存能力,这样做的特点是可以减轻对象存储服务的压力,缩短io路径。
异步处理:
请求发送到openresty以后,处理视频的时候,openresty先将请求转发到radosgateway,返会后利用log_by_lua_file模块向多媒体处理服务端发送异步任务到kafka,然后多媒体处理程序进行处理并将处理状态存入数据库中,等待客户端查询。
具体的过程为:
1).先将请求转分发到radosgateway进行除多媒体处理外的其他任务;
2).将多媒体处理任务通过kafka转发到多媒体处理模块;
3).多媒体处理模块从radosgateway中拿到对象后进行数据处理;
4).多媒体处理模块完成数据处理后将结果存入数据库,等待客户端查询。
进一步的,
多媒体数据处理状态的返回:
当异步完成多媒体数据处理时,客户端向openresty层发起任务查询请求,openresty接收到请求后去数据库中查询相应的处理状态返回给客户端。
当采用异步处理多媒体数据时,客户端需要通过额外增加的状态查询接口去数据库中将数据处理状态取回。
本发明的有益效果是
本方法通过在header中添加自定义元数据的方式利用openresty的数据缓存和处理能力,在不改变radosgateway现有接口以及鉴权方式的情况下,完成了多媒体数据的处理。同时在异步场景,用户发一个请求就可以完成上传对象或者其他对象存储提供的功能以及多媒体数据的处理,大大减少了请求数量。同步场景下由于在openresty中完成了小数据的多媒体处理,从而降低了radosgateway的压力。总体来看,本方法实现方式较为简单,且对已有的radosgateway和iam系统侵入性与依赖性小,基本上适用于所有云平台。
附图说明
图1是本发明的多媒体处理流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的一种radosgateway的多媒体处理方法,该方法的步骤如下
1、将多媒体数据处理参数写入到s3请求中的用户自定义元数据字段:
定制s3协议中requestheader中自定义元数据字段,如为图片数据的resize处理定义x-amz-meta-height和x-amz-meta-width来声明resize后的高和宽,将多媒体处理的相关参数通过header的方式传给对象存储服务端。
2、复杂均衡层根据处理数据的大小决定同步还是异步进行多媒体数据的处理:
请求发送到openresty以后,数据量小的时候直接向radosgateway请求数据,拿到数据后利用http_image_filter_module模块完成对象数据的多媒体处理过程,处理结束后将结果返回给客户端;数据量大的时候,openresty先将请求转发到radosgateway,返会后利用log_by_lua_file模块向多媒体处理服务端发送异步任务到kafka,然后多媒体处理程序进行处理并将处理状态存入数据库中,等待客户端查询。
3、多媒体数据处理状态的返回:
当异步完成多媒体数据处理时,客户端向openresty层发起任务查询请求,openresty接收到请求后去数据库中查询相应的处理状态返回给客户端。
以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。