数据写请求处理方法、装置及分布式数据存储系统制造方法及图纸

技术编号:15695659 阅读:335 留言:0更新日期:2017-06-24 11:10
本发明专利技术公开了一种数据写请求处理方法、装置及分布式数据存储系统。其中,方法基于调用端发送的数据写请求向存储节点中写入数据,其中数据写请求包含主请求和至少一个子请求,方法包括:对于一个子请求,调用访问接口从全局变量中选择待写入数据的存储节点的存储节点地址,向存储节点发送子请求,其中将选择的存储节点地址保存至子请求的上下文中;从子请求的上下文中提取出所选择的存储节点地址,并保存至存储节点的上下文中;从存储节点的上下文中提取出存储节点地址,与存储节点建立连接,将数据写入到相应的存储节点,能够满足调用端的定制化要求向指定存储节点写入数据,实现了定制化的负载均衡,解决了KV存储的单点限制。

【技术实现步骤摘要】
数据写请求处理方法、装置及分布式数据存储系统
本专利技术涉及计算机网络
,具体涉及一种数据写请求处理方法、装置及分布式数据存储系统。
技术介绍
在分布式数据存储系统中,一般会利用分布式组件来将调用端发送的数据写请求转发给存储引擎,其中,分布式组件为反向代理服务器,具体地,可以为Nginx服务器。对于KV存储来说,Nginx内置的负载均衡的策略,无论是round-robin,还是ip_hash,还是url_hash,都不能实现根据key来进行负载均衡的需求,举例说明,以分布式组件采用的是1Primary-1ReplicaShard的存储模式为例,这必然涉及到两次写存储的操作,而这两次的写入需要是两台完全不同的节点,但Nginx内置的负载均衡策略无法满足这样高度定制化的需求,其根本原因在于,Nginx的负载均衡策略将存储节点的地址等细节完全对外层屏蔽了,在编写http模块时不可能通过任何一个内置函数拿到某个存储节点的地址,也就是说这些细节对于开发者是透明的,从而限制了定制化的负载均衡策略的实现。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的数据写请求处理方法、数据写请求处理装置和相应的分布式数据存储系统。根据本专利技术的一个方面,提供了一种数据写请求处理方法,该方法基于调用端发送的数据写请求向存储节点中写入数据,其中数据写请求包含主请求和至少一个子请求,方法包括:对于每一个子请求,调用访问接口从全局变量中选择待写入数据的存储节点的存储节点地址,向存储节点发送子请求,其中将选择的存储节点地址保存至子请求的上下文中;从子请求的上下文中提取出所选择的存储节点地址,并保存至存储节点的上下文中;从存储节点的上下文中提取出存储节点地址,与存储节点建立连接,将数据写入到相应的存储节点。根据本专利技术的另一方面,提供了一种数据写请求处理装置,该装置基于调用端发送的数据写请求向存储节点中写入数据,其中数据写请求包含主请求和至少一个子请求,装置包括:用于处理子请求的处理器;用于处理子请求的处理器包括:选择单元,适于对于每一个子请求,调用访问接口从全局变量中选择待写入数据的存储节点的存储节点地址;子请求处理单元,适于向存储节点发送子请求,其中将选择的存储节点地址保存至子请求的上下文中;提取单元,适于从子请求的上下文中提取出所选择的存储节点地址;上下文写入单元,适于将提取出的存储节点地址保存至存储节点的上下文中;连接单元,适于从存储节点的上下文中提取出存储节点地址,与存储节点建立连接;数据写入单元,适于将数据写入到相应的存储节点。根据本专利技术的另一方面,提供了一种分布式数据存储系统,包括:调用端、分布式组件和存储节点;其中,分布式组件包括上述数据写请求处理装置。根据本专利技术提供的方案,对于每一个子请求,调用访问接口从全局变量中选择待写入数据的存储节点的存储节点地址,向存储节点发送子请求,其中将选择的存储节点地址保存至子请求的上下文中,从子请求的上下文中提取出所选择的存储节点地址,并保存至存储节点的上下文中,从存储节点的上下文中提取出存储节点地址,与存储节点建立连接,将数据写入到相应的存储节点。在本专利技术方案中,利用全局变量记录存储节点的存储节点地址,而且该全局变量提供有供访问的访问接口,通过调用该访问接口即可获取待写入数据的存储节点的存储节点地址,使存储节点地址暴露出来,从而能够满足调用端的定制化要求向指定存储节点写入数据,实现了定制化的负载均衡,解决了KV存储的单点限制。上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了根据本专利技术一个实施例的数据写请求处理方法的流程示意图;图2示出了根据本专利技术另一个实施例的数据写请求处理方法的流程示意图;图3示出了根据本专利技术一个实施例的数据写请求处理装置的结构示意图;图4示出了根据本专利技术另一个实施例的数据写请求处理装置的结构示意图;图5示出了根据本专利技术一个实施例的分布式数据存储系统的结构示意图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。本专利技术提出了一种数据写请求处理方法及装置,适用于分布式数据存储系统,该系统包括:客户端、Linux虚拟服务器集群(LVS)、分布式组件(HustDBHA,简称HA)和存储引擎(HustDB)。其中,分布式组件为反向代理服务器,具体可以是Nginx服务器。客户端和LVS可作为调用端,例如,客户端和LVS之间由于业务交互产生数据,LVS发送数据写请求,期望将业务相关数据写入存储节点中。另外,在一些特殊业务场景中,调用端可能为其它上层应用或调用程序,例如,分布式组件内部的调用程序。调用端具体与实际业务情况相关联,本专利技术对此不作限制。在该分布式数据存储系统中,将分布式组件与存储引擎分离,存储引擎只负责数据存储,以及对外提供http接口,以供分布式组件根据所提供的http接口向对应的存储节点写入数据,其中,存储引擎包括多个存储节点,各个存储节点是相互独立的,存储节点彼此之间不会直接进行通信,从而降低了存储引擎的复杂度。存储节点可以为键值(Key-Value,以下简称:KV)存储数据库,这是一种NoSQL(非关系型数据库)模型,其数据按照键值对的形式进行组织、索引和存储。KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能。目前在生产环境,使用较多的K-V存储有Memcached,Redis,LevelDB等。在通信方面,主要使用专有的二进制协议,这样做的好处是协议解析的的性能比较高,不足的地方在于通用性差,需要为不同的语言实现专门的客户端,开发成本高,同时二进制协议的可调试性差,导致定位问题困难;在架构设计方面,上述存储的分布式基本都需要客户端来实现,Redis从3.0之后开始支持集群,但从生产环境中的测试情况来看,单点故障导致集群不可用的情况依然存在,且Redis的定位是缓存,对于持久化的支持程度有限。本专利技术主要是对系统中的分布式组件的功能进行的改进,分布式组件向存储引擎写入数据时,能够根据Key来进行负载均衡,将数据写入指定的存储节点。分布式组件作为客户端与存储引擎之间的反向代理,对客户端屏蔽负载均衡的细节,保证存储节点的http接口的透明性。当某一个存储节点宕机时,HA会自动对数据写请求进行负载均衡,保证整个系统依然可用,从而解决KV存储的单点限制。另外,分布式组件中的每个节点都是独立的,当某一HA节点宕机时,LVS会自动将数据写请求发送至分布式组件中的其他可用的本文档来自技高网...
数据写请求处理方法、装置及分布式数据存储系统

【技术保护点】
一种数据写请求处理方法,所述方法基于调用端发送的数据写请求向存储节点中写入数据,其中数据写请求包含主请求和至少一个子请求,所述方法包括:对于每一个子请求,调用访问接口从全局变量中选择待写入数据的存储节点的存储节点地址,向所述存储节点发送子请求,其中将选择的存储节点地址保存至子请求的上下文中;从子请求的上下文中提取出所选择的存储节点地址,并保存至所述存储节点的上下文中;从所述存储节点的上下文中提取出存储节点地址,与存储节点建立连接,将数据写入到相应的存储节点。

【技术特征摘要】
1.一种数据写请求处理方法,所述方法基于调用端发送的数据写请求向存储节点中写入数据,其中数据写请求包含主请求和至少一个子请求,所述方法包括:对于每一个子请求,调用访问接口从全局变量中选择待写入数据的存储节点的存储节点地址,向所述存储节点发送子请求,其中将选择的存储节点地址保存至子请求的上下文中;从子请求的上下文中提取出所选择的存储节点地址,并保存至所述存储节点的上下文中;从所述存储节点的上下文中提取出存储节点地址,与存储节点建立连接,将数据写入到相应的存储节点。2.根据权利要求1所述的方法,其中,在发送子请求之前,所述方法还包括:加载配置文件,获取存储节点地址列表相关的配置信息;将存储节点地址列表保存到所述全局变量中,生成所述全局变量的访问接口。3.根据权利要求1或2所述的方法,其中,在发送子请求之前,所述方法还包括:获取主请求的上下文;判断所述主请求的上下文是否已创建;若所述主请求的上下文未创建,创建所述主请求的上下文,并将所述主请求的上下文与主请求关联。4.根据权利要求3所述的方法,其中,在发送子请求之前,所述方法还包括:若所述主请求的上下文已创建,判断待写入数据的存储节点是否为空;若是,则向发送数据写请求的调用端返回响应结果;若否,则执行发送子请求的步骤。5.根据权利要求1-4中任一项所述的方法,其中,在将数据写入到相应的存储节点之后,所述方法还包括:调用子请求完成回调函数,回到主循环过程中;在主循环过程中,调用用于处理子请求的处理器的入口函数,利用所述用于处理子请求的处理器处理下一个子...

【专利技术属性】
技术研发人员:徐锐波程卓
申请(专利权)人:北京奇虎科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1