一种数据访问方法及系统与流程

文档序号:11156837阅读:283来源:国知局
一种数据访问方法及系统与制造工艺

本发明涉及互联网技术领域,尤其涉及一种数据访问方法及系统。



背景技术:

随着互联网和云计算的快速发展,各行各业的业务需求复杂膨胀且用户量急剧增长,如今的大型网站,面对这样的业务量和用户量,往往是通过使用高性能的服务器、高性能的数据库、高效率的编程语言、高性能的Web容器等方式来解决这种需求。但如果服务器出现宕机,一般会影响大范围的用户,特别是当大量用户同时访问服务器的情况下,单纯的在网络中加硬件等方式是不能保证服务在高并发场景的高可用的。

现有的网络架构,比如,12306火车票订票网站的web服务架构,当某个Web服务器出现宕机时,该Web服务器将不能处理自己负责的访问请求,导致发出这些请求的客户端不能正常接收所请求的访问数据,从而降低了数据访问的成功率,进而降低了用户的网络体验。



技术实现要素:

有鉴于此,本发明实施例的主要目的在于提供一种数据访问方法及系统,能够提高数据访问的成功率。

本发明提供了一种数据访问方法,所述方法应用于一种数据访问系统,所述系统包括至少一个客户端、第一负载服务器、前端服务器集群和后端服务器集群;所述方法包括:

所述第一负载服务器在接收到所述客户端发送的访问请求后,采样第一负载均衡算法为所述客户端分配一目标前端服务器,并向所述客户端发送携带所述目标前端服务器信息的分配消息,其中,所述目标前端服务器为所述前端服务器集群中的一台处于正常工作状态的服务器;

所述客户端在接收到所述分配消息后,向所述目标前端服务器发送业务请求;

所述目标前端服务器在接收到所述业务请求后,获取为所述业务请求分配的目标后端服务器的信息,并向所述目标后端服务器发送所述业务请求,其中,所述目标后端服务器为所述后端服务器集群中的一台服务器;

所述目标后端服务器在接收到所述业务请求后,获取所述业务请求所请求的目标数据,并通过所述目标前端服务器向所述客户端返回所述目标数据。

可选的,所述系统还包括Zookeeper集群,所述Zookeeper集群用于监测所述前端服务器集群的运行状态;

所述采用第一负载均衡算法为所述客户端分配一目标前端服务器,包括:

获取所述Zookeeper集群反馈的所述前端服务器集群的运行状态,根据所述运行状态确定处于正常工作状态的全部前端服务器;

采用第一负载均衡算法,从所述全部前端服务器中为所述客户端分配一目标前端服务器。

可选的,所述系统还包括第二负载服务器,所述方法还包括:

所述第二负载服务器采样第二负载均衡算法,为所述业务请求分配一目标后端服务器;

则,所述获取为所述业务请求分配的目标后端服务器的信息,包括:

获取所述第二负载服务器返回的所述目标后端服务器的信息。

可选的,所述第二负载均衡算法为一致性Hash算法。

可选的,所述目标前端服务器与所述目标后端服务器之间通过远程过程调用协议RPC组件进行数据传输。

可选的,所述方法还包括:

所述目标后端服务器通过所述目标前端服务器向所述客户端推送信息。

本发明还提供了一种数据访问系统,所述系统包括至少一个客户端、第一负载服务器、前端服务器集群和后端服务器集群;

所述第一负载服务器,用于在接收到所述客户端发送的访问请求后,采样第一负载均衡算法为所述客户端分配一目标前端服务器,并向所述客户端发送携带所述目标前端服务器信息的分配消息,其中,所述目标前端服务器为所述前端服务器集群中的一台处于正常工作状态的服务器;

所述客户端,用于在接收到所述分配消息后,向所述目标前端服务器发送业务请求;

所述目标前端服务器,用于在接收到所述业务请求后,获取为所述业务请求分配的目标后端服务器的信息,并向所述目标后端服务器发送所述业务请求,其中,所述目标后端服务器为所述后端服务器集群中的一台服务器;

所述目标后端服务器,用于在接收到所述业务请求后,获取所述业务请求所请求的目标数据,并通过所述目标前端服务器向所述客户端返回所述目标数据。

可选的,所述系统还包括Zookeeper集群,所述Zookeeper集群用于监测所述前端服务器集群的运行状态;

所述第一负载服务器,包括:

状态获取单元,用于获取所述Zookeeper集群反馈的所述前端服务器集群的运行状态,根据所述运行状态确定处于正常工作状态的全部前端服务器;

负载均衡单元,用于采用第一负载均衡算法,从所述全部前端服务器中为所述客户端分配一目标前端服务器。

可选的,所述系统还包括第二负载服务器;

所述第二负载服务器,用于采样第二负载均衡算法,为所述业务请求分配一目标后端服务器;

则,所述目标后端服务器,具体用于获取所述第二负载服务器返回的所述目标后端服务器的信息。

可选的,所述第二负载均衡算法为一致性Hash算法。

本发明实施例提供的数据访问方法及系统,第一负载服务器在接收到客户端发送的访问请求后,采样第一负载均衡算法为客户端分配一目标前端服务器,并向客户端发送携带目标前端服务器信息的分配消息,其中,所述目标前端服务器为前端服务器集群中的一台处于正常工作状态的服务器;客户端在接收到该分配消息后,向目标前端服务器发送业务请求;目标前端服务器在接收到业务请求后,获取为业务请求分配的目标后端服务器的信息,并向目标后端服务器发送该业务请求,其中,所述目标后端服务器为后端服务器集群中的一台服务器;目标后端服务器在接收到业务请求后,获取业务请求所请求的目标数据,并通过目标前端服务器向客户端返回所述目标数据。可见,通过为客户端分配一处于正常工作状态的服务器进行请求连接,可以提高客户端获取所请求访问数据的几率,从而提高了数据访问的成功率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1示出了数据访问方法的流程示意图;

图2示出了数据访问系统的组成示意图之一;

图3示出了数据访问系统的组成示意图之二。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在介绍本发明实施例之前,首先介绍本发明实施例涉及的名词术语:

1、用户客户端User Client:指发起请求的客户端设备。

2、前端服务器Front Server:主要用来做Socket连接承载维持,保持连接状态,不做具体业务处理和规划。

3、后端服务器Backend Server:主要用来做业务处理服务。

4、用户连接标识符:主要是用户客户端User Client与前端服务器Front Server连接时,产生的服务器连接句柄id(即单台服务器某个socket连接的唯一标识)。

5、Zookeeper:采用分布式服务框架,是Apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

6、RPC:即远程过程调用协议(Remote Procedure Call Protocol),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

7、一致性Hash算法:具体原理是,先构造一个长度为232的整数环,这个环被称为一致性Hash环,将服务器节点的Hash值(其分布也为[0,232-1])放置在这个Hash环上,然后根据需要缓存到服务器的数据的Key值,计算该Key值的Hash值(其分布也为[0,232-1]),接着在Hash环上顺时针查找距离这个Key值的Hash值最近的服务器节点,并将数据存储到该服务器节点上,从而完成了Key到服务器节点的映射查找。所以,每个服务器节点仅需维护少量相邻节点的信息,并且在节点加入/退出系统时,仅有相关的少量节点参与到拓扑的维护中,这样,可以保证在服务器宕机下线的情况下,能够让尽量多的请求路由到原来的服务器节点,从而保证服务器集群的高可用。

在当今移动互联网、云计算和大数据的成熟和快速发展的时代,对于能够瞄准用户需求的产品,用户数量能够在短时间内指数型增长,然而,面对用户数量的增长,尤其是短时间内的指数型增长,不得不面临一些严峻的技术挑战,比如,如何支持高并发、如何避免因为单台机器当机导致服务不可用、如何避免在服务容量不足时导致的用户体验下降,等等。因此,在网络系统构建之初就采用高可用和可伸缩架构,将能有效避免这些问题。

为避免上述问题,本发明实施例提供的数据访问系统,在水平和垂直方向都做分层处理。具体地,在水平方向上,主要是在现有服务器容量或性能不足的情况下,能够在现有网络架构中直接增加服务器,同时,在增加的服务器中部署同样的代码;在垂直方向上,主要是将服务器的职能进行分离,比如,部分服务器用来实现Socket连接、另一部分服务器用来实现业务服务等;这样,便能够灵活的应对业务或者并发连接数高等场景。

本发明实施例主要是采用前端服务器集群和后端服务器集群分离的形式,做到水平和垂直方向的职能划分,达到功能与逻辑上的分层,此外,使用Zookeeper管理集群或者具有集群监控管理的开源服务,能够在集群部分故障时及时反馈,能保证大部分现有服务和用户能够正常进行流程,做到高并发高可用的目的。

下面具体介绍本发明实施例。

参见图1,为本发明实施例提供的数据访问方法的流程示意图,该方法可以应用于图2所示的一种数据访问系统,该系统包括至少一个客户端、第一负载服务器、前端服务器集群和后端服务器集群。该方法包括以下步骤S101-S104:

S101:所述第一负载服务器在接收到所述客户端发送的访问请求后,采样第一负载均衡算法为所述客户端分配一目标前端服务器,并向所述客户端发送携带所述目标前端服务器信息的分配消息;其中,所述目标前端服务器为所述前端服务器集群中的一台处于正常工作状态的服务器。

参见图2,关于所述前端服务器集群,其包括至少一个前端服务器,前端服务器主要用于承载连接,可以利用开源协议SocketIO为每个前端服务器配置分布式承载连接组件。这样,当用户客户端请求一后端服务器做实时业务处理时,用户客户端先是发起一个超文本传输协议(HyperText Transfer Protocol,简称HTTP)或者一个传输控制协议(Transmission Control Protocol,简称TCP)请求,该请求经过域名系统(Domain Name System,简称DNS)等解析到第一负载服务器后,第一负载服务器利用负载均衡算法计算出一前端服务器域名分配给用户客户端。

在本实施例中,图2所示系统还包括Zookeeper集群,所述Zookeeper集群用于监测所述前端服务器集群的运行状态。具体地,可以通过建立Zookeeper服务管理集群,稳定的监控各个前端服务器的运行状态,动态的向第一负载服务器反馈宕机或者其他情形导致不能正常工作的前端服务器的状态信息,以便第一负载服务器调整负载均衡分配策略,从正常工作的所有前端服务器中为客户端分配一服务器,以便利用分配的服务器承载客户端的请求连接。

为便于描述,本实施例将分配给用户客户端的这一前端服务器称为目标前端服务器。

基于上述内容,S101中的“采用第一负载均衡算法为所述客户端分配一目标前端服务器”,可以包括步骤A1-A2:

A1:第一负载服务获取Zookeeper集群反馈的前端服务器集群的运行状态,根据所述运行状态确定处于正常工作状态的全部前端服务器。

由于Zookeeper集群可以实时监控各个前端服务器的运行状态,并将所述运行状态信息反馈给第一负载服务器,第一负载服务器便可以根据所述运行状态判断前端服务器集群中哪些服务器处于正常工作状态(能够承载连接)、哪些服务器处于不正常的工作状态(不能承载连接)。

A2:第一负载服务采用第一负载均衡算法,从所述全部前端服务器中为所述客户端分配一目标前端服务器。

第一负载服务器可以采用负载均衡算法将各个客户端的请求连接均衡分配到各个正常工作的前端服务器上。

这样,如果出现高并发场景即很多客户端同时发起连接请求,本实施例可以合理地将连接请求负载到不同的前端服务器上,从而把单机服务的压力(无论是硬件还是软件等方面),均衡的进行了平均分发。此外,通过把各个前端服务器注册到分布式管理开源组件Zookeeper进行管理,通过宕机检测反馈机制(即Zookeeper分布式集群管理功能),将检测结果同步到第一负载服务器,从而使第一负载服务器感知各个前端服务器的状态,以便客户端的连接请求到达第一负载服务器后,为其分配到正常的前端服务器进行连接。所以,本实施例采用的分布式连接层,可以有效应对高并发和高可用的应用场景。

S102:所述客户端在接收到所述分配消息后,向所述目标前端服务器发送业务请求。

当为客户端分配了一前端服务器即所述目标前端服务器后,比如,图2中的前端服务器1,客户端再发起真正的Socket业务请求,以与前端服务器1建立业务连接。

S103:所述目标前端服务器在接收到所述业务请求后,获取为所述业务请求分配的目标后端服务器的信息,并向所述目标后端服务器发送所述业务请求;其中,所述目标后端服务器为所述后端服务器集群中的一台服务器。

在一些实施方式中,所述目标前端服务器与所述目标后端服务器之间可以通过远程过程调用协议RPC组件进行数据传输。

在一些实施方式中,图2所示系统还可以包括第二负载服务器,则,本实施例的数据访问方法还可以包括:所述第二负载服务器采样第二负载均衡算法,为所述业务请求分配一目标后端服务器,具体地,所述第二负载均衡算法可以为一致性Hash算法。

在这种实施方式中,对于各种各样的业务场景需求,例如,直播秀场等实时互动场景,当每一前端服务器(其可以不处理具体业务)承载着大量客户端发起的业务请求连接时,每一前端服务器可以把每一请求连接的连接信息发送至第二负载服务器,所述连接信息可以包括:用户连接标识符、前端服务器标识Front Server Id、客户端类型Client type等。由于后端服务器集群的各个服务器节点的Hash值可以被放置在一Hash环上,所以,第二负载服务器可以通过一致性Hash算法,即根据所述连接信息中的某个特征信息(比如,用户访问的秀场房间号或客户端IP地址)的Key值,计算该Key值的Hash值,在Hash环上顺时针查找距离这个Key值的Hash值最近的后端服务器节点,将所述请求信息路由到该后端服务器上,为便于描述,将该后端服务器称为目标后端服务器,比如,假设目标后端服务器为后端服务器1,则将所述请求信息发送到后端服务器1上。

基于上述内容,S101中的“获取为所述业务请求分配的目标后端服务器的信息”,可以包括:获取所述第二负载服务器返回的所述目标后端服务器的信息。

可见,本实施例可以对后端服务器进行容灾处理,即通过一致性Hash算法,当出现服务宕机的后端服务器,也能在一定程度上保证对大部分的请求进行响应,只影响了分配给宕机的后端服务器的客户端请求,只要用户自动重连socket,并负载到其他正常后端服务器,这在一定程度上保证了业务机的高可用性。

S104:所述目标后端服务器在接收到所述业务请求后,获取所述业务请求所请求的目标数据,并通过所述目标前端服务器向所述客户端返回所述目标数据。

此时,各个后端服务器会对接收到的所述请求信息进行管理并获取所述请求信息所请求的数据,然后,通过所述请求信息中的前端服务器标识Front Server Id锁定所述目标前端服务器,通过RPC组件向所述目标前端服务器的连接层发送客户端所请求的目标数据,接着,所述目标前端服务器根据用户连接标识符寻找Socket句柄向所述客户端发送所述目标数据。

通过上述流程,完成了用户客户端到目标后端服务端的一个高并发业务分层和路由。

进一步地,在一些实施方式中,本实施例提供的数据访问方法还可以包括:所述目标后端服务器通过所述目标前端服务器向所述客户端推送信息。

在这种实施方式中,后端服务器可以主动发送消息到各个用户客户端。基于后端服务器集群的设计,后端服务器可以对客户端信息(即所述连接信息)进行管理,比如,将用户连接标识符,前端服务器标识Front Server Id、以及客户端来源信息等做分组管理。后端服务器可以提供统一的方法封装(底层通过统一的RPC方法调用前端服务器)推送用户感兴趣的消息到客户端。

本发明实施例提供的数据访问方法,第一负载服务器在接收到客户端发送的访问请求后,采样第一负载均衡算法为客户端分配一目标前端服务器,并向客户端发送携带目标前端服务器信息的分配消息,其中,所述目标前端服务器为前端服务器集群中的一台处于正常工作状态的服务器;客户端在接收到该分配消息后,向目标前端服务器发送业务请求;目标前端服务器在接收到业务请求后,获取为业务请求分配的目标后端服务器的信息,并向目标后端服务器发送该业务请求,其中,所述目标后端服务器为后端服务器集群中的一台服务器;目标后端服务器在接收到业务请求后,获取业务请求所请求的目标数据,并通过目标前端服务器向客户端返回所述目标数据。可见,通过为客户端分配一处于正常工作状态的服务器进行请求连接,可以提高客户端获取所请求访问数据的几率,从而提高了数据访问的成功率。

参见图3,为本发明实施例提供的数据访问系统的组成示意图,所述系统包括至少一个客户端301、第一负载服务器302、前端服务器集群303和后端服务器集群304;

所述第一负载服务器302,用于在接收到所述客户端301发送的访问请求后,采样第一负载均衡算法为所述客户端分配一目标前端服务器,并向所述客户端发送携带所述目标前端服务器信息的分配消息,其中,所述目标前端服务器为所述前端服务器集群303中的一台处于正常工作状态的服务器;

所述客户端301,用于在接收到所述分配消息后,向所述目标前端服务器发送业务请求;

所述目标前端服务器,用于在接收到所述业务请求后,获取为所述业务请求分配的目标后端服务器的信息,并向所述目标后端服务器发送所述业务请求,其中,所述目标后端服务器为所述后端服务器集群304中的一台服务器;

所述目标后端服务器,用于在接收到所述业务请求后,获取所述业务请求所请求的目标数据,并通过所述目标前端服务器向所述客户端301返回所述目标数据。

在一些实施方式中,所述系统还包括Zookeeper集群,所述Zookeeper集群用于监测所述前端服务器集群的运行状态;

所述第一负载服务器302,包括:

状态获取单元,用于获取所述Zookeeper集群反馈的所述前端服务器集群的运行状态,根据所述运行状态确定处于正常工作状态的全部前端服务器;

负载均衡单元,用于采用第一负载均衡算法,从所述全部前端服务器中为所述客户端分配一目标前端服务器。

在一些实施方式中,所述系统还包括第二负载服务器;

所述第二负载服务器,用于采样第二负载均衡算法,为所述业务请求分配一目标后端服务器;

则,所述目标后端服务器,具体用于获取所述第二负载服务器返回的所述目标后端服务器的信息。

在一些实施方式中,所述第二负载均衡算法为一致性Hash算法。

在一些实施方式中,所述目标前端服务器与所述目标后端服务器之间通过远程过程调用协议RPC组件进行数据传输。

在一些实施方式中,所述目标后端服务器,还用于通过所述目标前端服务器向所述客户端301推送信息。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如媒体网关等网络通信设备,等等)执行本发明各个实施例或者实施例的某些部分所述的方法。

需要说明的是,对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1