本发明涉及计算机技术领域,更具体地,涉及一种hbase连接动态保持方法、设备、存储介质及系统。
背景技术:
随着大数据技术的日益完善,越来越多的企业开始使用hadoop平台来管理自己t级pb级的数据资源。hbase是基于hdfs的一个列式数据库,根据列式存储的特点使得一些业务数据处理性能数十倍提升,且基于hdfs分布式存储的特点,即使存储了海量数据,依然具备较高的数据可靠性。
相比与其他传统关系型数据库,hbase数据库具备以下优点:
1)由于列式存储特点,hbase能够有效存储多维数据,如web页面、电子邮件、音频、视频等。
2)由于其分布式存储特点,hbase在海量数据场景下依旧具有高性能、高可用性。
3)由于分布式架构设计,hbase易于拓展,当存储容量不足时可以简单增加节点来拓展hbase的存储能力。
正是因为hbase是应用在大数据海量存储的场景,hbase也会同时给大量用户使用,因此除了需要提供较高的数据存储性能外,还需要提供较高的数据访问性能。在hbase架构设计中,客户端通过zookeeper获取meta表所在hregionservera,然后连接该hregionservera获取到所需访问数据所在的hregionserverb,最后直接与hregionserverb建立连接并进行数据交互。这种架构设计的初衷是使得所有访问能够均衡到所有服务器上,以提高应对高并发场景的能力。但是这非常依赖于完美的表结构设计,只有hbase表的rowkey设计的非常出色,使得常用热点数据能够非常均衡的散落在各个服务器上才能达到目标。通常这是难以做到的,尤其是在hbase表初始建立时和批量导入数据之后,后者又是在大数据场景下经常遇到的操作。因此最终会导致大量的数据访问集中在几个服务器上,如果这时服务器没有应对措施,大量连接请求的创建会耗尽节点资源最终导致宕机,引发hmaster数据迁移任务,数据迁移会消耗集群性能,从而进一步影响用户访问hbase数据库,逐渐形成雪崩效应导致hbase服务不可用。由于大量并发请求造成的hbase故障包括以下几个方面:
1)短时大量并发请求,使得hbase服务端监听进程难以响应从而造成服务宕机;
2)持续较大增量的请求连接,hbase服务端在不停的创建连接和销毁连接中,耗费较多的服务器资源从而影响hbase数据库的访问性能;
3)当同时有大量用户连接时,hbase服务端需要对每个客户端保持连接,并不断轮询监听连接的i/o操作。单个服务器受限于物力资源,因此可服务能力有限,无法支撑较大量的用户访问,导致服务阶段性不可用。
为了解决上述问题,就需要有效应对高并发连接请求,防止客户端连接耗尽服务器资源。通常做法是在服务端提前创建一个hbase连接池,当有新的连接请求时从连接池分配一个连接,当客户端断开连接后再将连接放回池内,这种做法的好处是节省了连接的创建开销,当有高并发需求时可以使用已有的连接。但是要确定连接池的大小是非常复杂的问题,如果连接池太小,高并发请求连接时依旧需要创建额外连接,依然会引发宕机问题,如果连接池太大,大量连接没有使用时是对资源的巨大浪费。且单个物理机的资源有限,所能支持的最大连接池大小也难以支撑大量用户连接。
综上所述,hbase数据库在存储高可用性上具备很多优势,但是在高并发数据访问场景下,hbase目前使用的连接池技术不能提供足够的性能保障,且目前业界没有非常好的解决方案。
技术实现要素:
本发明的目的是提出一种hbase连接动态保持方法、设备、存储介质及系统,在高并发连接请求场景下,实现降低资源消耗、提高大规模并发请求的处理性能。
为实现上述目的,本发明提出了一种hbase连接动态保持方法,包括:
步骤1:建立hbase连接池,所述hbase连接池包括多个hbase连接对象,每个所述hbase连接对象对应一个hbase服务端;
步骤2:基于reacter模式,监听每个hbase服务端的客户端连接请求,并对发起所述连接请求的客户端信息进行认证;
步骤3:若认证通过,则调用操作系统api创建与所述客户端关联的tcp连接块,并将每个所述tcp连接块插入至消息队列中并设置为激活状态;
步骤4:从所述hbase连接池中为设置为激活状态的每个所述tcp连接块对应的所述客户端分配一个hbase服务端作为hbase连接对象,实现所述客户端对所述hbase服务端的访问;
步骤5:当所述客户端访问结束时,回收所述hbase连接对象并将所述消息队列中的所述tcp连接块设置为未激活状态;
步骤6:当所述客户端断开连接时,调用所述操作系统api将所述tcp连接块从所述消息队列中删除。
可选地,还包括:
监听所述消息队列中所述激活状态的tcp连接块的数量,并根据所述激活状态的tcp连接块的数量动态对所述hbase连接池进行扩容或减容。
可选地,所述步骤5还包括:
将所述tcp连接块中的所述客户端信息注册到所述hbase连接对象中。
可选地,所述步骤6包括:
当所述客户端访问结束时,回收所述hbase连接对象的同时回调所述hbase连接对象中的注册信息,并通过连接处理主程序将访问的处理结果信息返回给客户端以及将所述消息队列中的所述tcp连接块设置为未激活状态。
可选地,在所述步骤1之前还包括:
基于nsq平台建立用于缓存所述tcp连接块的所述消息队列。
本发明还提出一种电子设备,所述电子设备包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的hbase连接动态保持方法。
本发明还提出一种非暂态计算机可读存储介质该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行上述的hbase连接动态保持方法。
本发明还提出一种hbase连接动态保持系统,包括:连接缓存模块,以及基于reacter模式建立的连接认证模块、业务处理模块、连接池管理模块和连接处理模块;
所述连接缓存模块用于提供缓存tcp连接块的消息队列,并为每个tcp连接块保存激活状态;
所述业务处理模块用于监听所有客户端的连接请求并调用操作系统api创建或注销与客户端关联的所述tcp连接块,以及设置每个tcp连接块的激活状态;
所述连接认证模块用于接收所述收业务处理模块发送的客户端信息对客户端进行认证,并将认证结果返回给所述业务处理模块;
所述连接处理模块用于监测所述消息队列中处于激活状态的tcp连接块,并请求所述连接池管理模块为每个激活状态的tcp连接块分配一个hbase连接对象;
所述连接池管理模块用于建立所述hbase连接池,并基于所述连接处理模块的请求从hbase连接池中为每个激活状态的tcp连接块分配一个hbase连接对象,以及在客户端访问结束时回收所述hbase连接对象。
可选地,所述连接处理模块还用于监听所述消息队列中所述激活状态的tcp连接块的数量,并根据所述激活状态的tcp连接块的数量动态向所述连接池管理模块请求对所述hbase连接池进行扩容或减容。
可选地,还包括回调模块,所述回调模块用于将所述tcp连接块中的客户端信息注册到hbase连接对象中,并在回收所述tcp连接块时将访问的结果信息通过所述业务处理模块返回至客户端。
本发明的有益效果在于:
基于reactor模式实现监听客户端连接请求,通过操作系统api为客户端请求创建tcp连接块,然后为客户端分配连接对象,大大降低资源消耗,防止在高并发请求下耗尽cpu、内存资源,提高并发处理性能;使用消息队列缓存连接请求,仅为需要进行业务处理的激活态连接从hbase连接池中分配连接对象,并在业务处理结束后将连接请求的tcp连接块状态置为非激活态,直到客户端连接断开,使得每一个连接对象可以处理多个客户端的业务,大大提高了连接对象的利率效果,提升了hbase大规模请求的处理性能。
本发明的装置具有其它的特性和优点,这些特性和优点从并入本文中的附图和随后的具体实施方式中将是显而易见的,或者将在并入本文中的附图和随后的具体实施方式中进行详细陈述,这些附图和具体实施方式共同用于解释本发明的特定原理。
附图说明
通过结合附图对本发明示例性实施例进行更详细的描述,本发明的上述以及其它目的、特征和优势将变得更加明显,在本发明示例性实施例中,相同的参考标号通常代表相同部件。
图1示出了根据本发明的一种hbase连接动态保持方法的步骤图。
图2示出了根据本发明的一个实施例的一种hbase连接动态保持系统的架构图。
具体实施方式
下面将参照附图更详细地描述本发明。虽然附图中显示了本发明的优选实施例,然而应该理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本发明更加透彻和完整,并且能够将本发明的范围完整地传达给本领域的技术人员。
根据本发明的一种hbase连接动态保持方法,包括:
步骤1:建立hbase连接池,所述hbase连接池包括多个hbase连接对象,每个所述hbase连接对象对应一个hbase服务端;
步骤2:基于reacter模式,监听每个hbase服务端的客户端连接请求,并对发起所述连接请求的客户端信息进行认证;
步骤3:若认证通过,则调用操作系统api创建与所述客户端关联的tcp连接块,并将每个所述tcp连接块插入至消息队列中并设置为激活状态;
步骤4:从所述hbase连接池中为设置为激活状态的每个所述tcp连接块对应的所述客户端分配一个hbase服务端作为hbase连接对象,实现所述客户端对所述hbase服务端的访问;
步骤5:当所述客户端访问结束时,回收所述hbase连接对象并将所述消息队列中的所述tcp连接块设置为未激活状态;
步骤6:当所述客户端断开连接时,调用所述操作系统api将所述tcp连接块从所述消息队列中删除。
本实施例中,还包括:
监听所述消息队列中所述激活状态的tcp连接块的数量,并根据所述激活状态的tcp连接块的数量动态对所述hbase连接池进行扩容或减容。
本实施例中,所述步骤5还包括:
将所述tcp连接块中的所述客户端信息注册到所述hbase连接对象中。
本实施例中,所述步骤6包括:
当所述客户端访问结束时,回收所述hbase连接对象的同时回调所述hbase连接对象中的注册信息,并通过连接处理主程序将访问的处理结果信息返回给客户端以及将所述消息队列中的所述tcp连接块设置为未激活状态。
本实施例中,在所述步骤1之前还包括:
基于nsq平台建立用于缓存所述tcp连接块的所述消息队列。
具体地,基于reactor模式实现监听客户端连接请求,通过操作系统api为客户端请求创建tcp连接块,然后为客户端分配连接对象,大大降低资源消耗,防止在高并发请求下耗尽cpu、内存资源,提高并发处理性能;使用消息队列缓存连接请求,仅为需要进行业务处理的激活态连接从hbase连接池中分配连接对象,并在业务处理结束后将连接请求的tcp连接块状态置为非激活态,直到客户端连接断开,使得每一个连接对象可以处理多个客户端的业务,大大提高了连接对象的利率效果,提升了hbase大规模请求的处理性能。进一步地,通过感知nsqqueue中激活态连接数的压力,可以动态扩容连接池大小,提高服务器资源利用率,防止因连接池过小导致的客户端连接超时和因连接池过大造成的资源浪费。
在一种具体实施方式中,基于现有的反应器设计模式(reactor模式)实现连接处理主程序(mainprocessor)、连接分发子程序(subprocessor)和基于nsq实现的连接缓存模块以提供消息队列(nsqqueue)。其中连接处理主程序包括回调模块(conncallback)、连接认证模块(connauth)和业务处理模块(conntrans)。连接分发子程序包括hbase连接池管理模块(poolmanager)和连接处理模块(connprod)。
各模块的功能如下:
1)业务处理模块
基于reactor模式实现的主监听程序,负责监听维护所有客户端的连接请求,调用操作系统api创建注销与客户端关联的tcp连接块,并在客户端业务处理请求完成后返回最终结果给客户端。
2)连接认证模块
主要配合业务处理模块对客户端信息进行认证。接收业务处理模块发送的客户端信息,并对客户端进行认证后反正结果给业务处理模块。
3)回调模块
当连接处理模块消费消息队列中的tcp块并通过连接池管理模块分配到hbase连接对象时,会将回调信息注册到该连接对象,该连接对象被回收时会通过回调模块返回一些结果信息。注册信息包括了tcp信息和客户端信息,因此通过业务处理模块可以将结果信息反馈给客户端。
4)连接缓存模块
基于nsq消息队列技术,保存所有当前操作系统创建的和客户端连接的tcp连接块,并为每个tcp连接块保存状态码和客户端相关信息,连接处理模块通过状态码来感知需要处理的客户端连接请求。
5)连接处理模块
负责感知消息队列中需要处理的客户端连接并消费,针对每一个激活态的客户端连接tcp块,连接处理模块从连接池管理模块请求分配一个hbase连接对象,同时连接处理模块会统计消息队列中待消费的激活态tcp块,计算当前连接池处理压力,在需要时向连接池管理模块申请临时扩容hbase连接池。
6)连接池管理模块
负责维护管理hbase连接池,根据需求动态从连接对象池中取用连接对象,并可以根据需求动态调整连接对象池的大小。
参考图2,基于上述系统架构的一种hbase连接动态保持方法包括:
在每个hbase服务端运行连接处理主程序和连接分发子程序,连接处理主程序的业务处理模块负责监听该服务端的hbase客户端连接请求;
当接收到客户端的连接请求后根据配置可调用连接认证模块对客户端信息进行认证;
认证通过后通过操作系统api创建服务端到客户端tcp连接块,并将tcp连接块插入到消息队列中置为激活态;
连接分发子程序中的连接池管理模块负载在初始化阶段创建一个可配置大小的hbase连接池,并在后续对该连接池进行管理;
连接处理模块负责消费消息队列中的tcp块后,并通过连接池管理模块分配一个hbase连接对象,同时将tcp块的客户端信息通过连接池管理模块注册到该hbase连接对象中,此时客户端已经获取到hbase服务端的hbase连接对象,可以正常进行数据访问;
当访问处理结束后,连接池管理模块负责回收该hbase连接对象,回收时会回调hbase连接对象中的注册信息,返回连接的访问的处理结果信息;
此时连接处理主程序中的回调模块接收到处理结果消息,并将连接的处理结果信息返回到业务处理模块最后通过tcp连接返回消息给客户端,同时tonntrans将消息队列中该tcp块置为未激活态;
当业务处理模块监听到客户端断开连接时,会调用操作系统api将该客户端的tcp块从消息队列中删除。
需要说明的是,反应器设计模式是一种为处理并发服务请求,并将请求提交到一个或者多个服务处理程序的事件设计模式,当客户端请求抵达后,服务处理程序使用多路分配策略,由一个非阻塞的线程来接收所有的请求,然后派发这些请求至相关的工作线程进行处理。nsq是一个实时分布式消息传递平台,能够大规模处理每天数十亿的消息。反应器设计模式和nsq为现有技术,本领域技术人员基于reactor模式和nsq容易实现本发明的方法,此处不再赘述。
本发明实施例还提供一种电子设备,电子设备包括:
至少一个处理器;以及,
与至少一个处理器通信连接的存储器;其中,
存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行上述的hbase连接动态保持方法。
本发明还提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行上述的hbase连接动态保持方法。
参考图2,本发明实施例还提供一种hbase连接动态保持系统,包括:连接缓存模块,以及基于reacter模式建立的连接认证模块、业务处理模块、连接池管理模块和连接处理模块;
所述连接缓存模块用于提供缓存tcp连接块的消息队列,并为每个tcp连接块保存激活状态;
所述业务处理模块用于监听所有客户端的连接请求并调用操作系统api创建或注销与客户端关联的所述tcp连接块,以及设置每个tcp连接块的激活状态;
所述连接认证模块用于接收所述收业务处理模块发送的客户端信息对客户端进行认证,并将认证结果返回给所述业务处理模块;
所述连接处理模块用于监测所述消息队列中处于激活状态的tcp连接块,并请求所述连接池管理模块为每个激活状态的tcp连接块分配一个hbase连接对象;
所述连接池管理模块用于建立所述hbase连接池,并基于所述连接处理模块的请求从hbase连接池中为每个激活状态的tcp连接块分配一个hbase连接对象,以及在客户端访问结束时回收所述hbase连接对象。
本实施例中,所述连接处理模块还用于监听所述消息队列中所述激活状态的tcp连接块的数量,并根据所述激活状态的tcp连接块的数量动态向所述连接池管理模块请求对所述hbase连接池进行扩容或减容。
本实施例中,还包括回调模块,所述回调模块用于将所述tcp连接块中的客户端信息注册到hbase连接对象中,并在回收所述tcp连接块时将访问的结果信息通过所述业务处理模块返回至客户端。
本发明可以在hbase高并发连接时快速响应客户端连接请求、提升用户体验;可以大幅度提升hbase的性能,提高单个服务器所能支持的用户规模;还可以充分利用hbase连接对象资源,提高物理资源利用率。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。
1.一种hbase连接动态保持方法,其特征在于,包括:
步骤1:建立hbase连接池,所述hbase连接池包括多个hbase连接对象,每个所述hbase连接对象对应一个hbase服务端;
步骤2:基于reacter模式,监听每个hbase服务端的客户端连接请求,并对发起所述连接请求的客户端信息进行认证;
步骤3:若认证通过,则调用操作系统api创建与所述客户端关联的tcp连接块,并将每个所述tcp连接块插入至消息队列中并设置为激活状态;
步骤4:从所述hbase连接池中为设置为激活状态的每个所述tcp连接块对应的所述客户端分配一个hbase服务端作为hbase连接对象,实现所述客户端对所述hbase服务端的访问;
步骤5:当所述客户端访问结束时,回收所述hbase连接对象并将所述消息队列中的所述tcp连接块设置为未激活状态;
步骤6:当所述客户端断开连接时,调用所述操作系统api将所述tcp连接块从所述消息队列中删除。
2.根据权利要求1所述的hbase连接动态保持方法,其特征在于,还包括:
监听所述消息队列中所述激活状态的tcp连接块的数量,并根据所述激活状态的tcp连接块的数量动态对所述hbase连接池进行扩容或减容。
3.根据权利要求1所述的hbase连接动态保持方法,其特征在于,所述步骤5还包括:
将所述tcp连接块中的所述客户端信息注册到所述hbase连接对象中。
4.根据权利要求3所述的hbase连接动态保持方法,其特征在于,所述步骤6包括:
当所述客户端访问结束时,回收所述hbase连接对象的同时回调所述hbase连接对象中的注册信息,并通过连接处理主程序将访问的处理结果信息返回给客户端以及将所述消息队列中的所述tcp连接块设置为未激活状态。
5.根据权利要求1所述的hbase连接动态保持方法,其特征在于,在所述步骤1之前还包括:
基于nsq平台建立用于缓存所述tcp连接块的所述消息队列。
6.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-5任一所述的hbase连接动态保持方法。
7.一种非暂态计算机可读存储介质,其特征在于,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行权利要求1-5任一所述的hbase连接动态保持方法。
8.一种hbase连接动态保持系统,其特征在于,包括:连接缓存模块,以及基于reacter模式建立的连接认证模块、业务处理模块、连接池管理模块和连接处理模块;
所述连接缓存模块用于提供缓存tcp连接块的消息队列,并为每个tcp连接块保存激活状态;
所述业务处理模块用于监听所有客户端的连接请求并调用操作系统api创建或注销与客户端关联的所述tcp连接块,以及设置每个tcp连接块的激活状态;
所述连接认证模块用于接收所述收业务处理模块发送的客户端信息对客户端进行认证,并将认证结果返回给所述业务处理模块;
所述连接处理模块用于监测所述消息队列中处于激活状态的tcp连接块,并请求所述连接池管理模块为每个激活状态的tcp连接块分配一个hbase连接对象;
所述连接池管理模块用于建立所述hbase连接池,并基于所述连接处理模块的请求从hbase连接池中为每个激活状态的tcp连接块分配一个hbase连接对象,以及在客户端访问结束时回收所述hbase连接对象。
9.根据权利要求8所述的hbase连接动态保持系统,其特征在于,所述连接处理模块还用于监听所述消息队列中所述激活状态的tcp连接块的数量,并根据所述激活状态的tcp连接块的数量动态向所述连接池管理模块请求对所述hbase连接池进行扩容或减容。
10.根据权利要求8所述的hbase连接动态保持系统,其特征在于,还包括回调模块,所述回调模块用于将所述tcp连接块中的客户端信息注册到hbase连接对象中,并在回收所述tcp连接块时将访问的结果信息通过所述业务处理模块返回至客户端。
技术总结