一种基于路由表的搜索系统集群服务管理的方法及系统与流程

文档序号:11133741阅读:268来源:国知局
一种基于路由表的搜索系统集群服务管理的方法及系统与制造工艺

本发明属于海量数据搜索技术领域,具体涉及一种针对多搜索集群对外提供搜索服务的管理方法及系统。



背景技术:

搜索系统从海量数据中检索相匹配的目标数据提供给用户浏览,是目前主流电子商务平台(B2B,B2C等)的主要应用场景。在数据日趋庞大,搜索匹配规则日趋复杂的今天,单靠一个搜索应用的集群对外服务,在追求高可用服务的今天,已经不能满足用户的需求。构建搜索系统集群服务,能够解决国内目前实际上网络分为电信,网通两个不同网络下的访问速度,尤其针对多数据中心(简称DC)部署的业务系统,搜索系统天然就面临一个跨DC部署应用的现实环境。

物理DC的区分如果还能够人工进行搜索系统集群服务管理的话,那么由于逻辑功能上的区分集群的需求,则不可能单单依靠根据网络硬件条件所划分的几个固定集群即可满足。例如搜索业务是随着用户需求可能随时需要调整搜索的匹配规则,包括不同的匹配规则可能需要在线上进行并行的用户实际应用试验,根据搜索结果和用户行为的反馈,再动态进行搜索规则和参数的调整。再例如搜索除了用户实际使用外,各大搜索引擎的爬虫也会自动进行爬虫抓取网站内容,而当这种抓取量对搜索服务器造成极大负荷的时候,我们想要人为的区分爬虫触发的搜索请求和真实用户访问的搜索请求,将两种请求进行不同的服务对待的时候。这都需要我们能够灵活的通过配置不同的搜索系统集群服务来满足这种管理要求。而本发明就是为了针对这种现实的技术应用场景,通过路由表技术的方式,将搜索集群对外服务的路由进行管理,达到集群服务调度的目的。目前一般的搜索系统,都是通过将搜索服务对外服务的地址,配置在固化的搜索客户端中,一般会配置多个对外服务地址,作为提高可用性的保证。但如果这些地址都不可用时,搜索客户端会直接报错。另外一般的搜索系统,在对外服务中是不允许同时存在两个同名的搜索服务,会出现同名错误。而本发明支持对外服务中的可以存在任意多个重名的搜索业务,且可以通过配置不同的访问策略,支持多个同名搜索业务的不同集群按照不同的业务逻辑对外提供搜索服务,并且本发明通过客户端缓存路由表信息的方式,即使客户端配置的服务地址全部出错,仍然能够与可用服务器建立连接,检索得到正常的搜索结果。



技术实现要素:

为了解决搜索客户端配置的搜索地址出错和满足搜索需要同名搜索服务同时存在的问题,本发明目的在于,提供一种基于路由表的搜索系统集群服务管理的方法及系统,旨在提高搜索系统集群服务的可用性,即使客户端配置的搜索集群的服务节点出现故障,客户端仍然能够通过路由表找到其他可用的搜索集群服务节点;同时通过路由表存放不同集群的服务信息,使搜索系统可以根据不同访问策略调用若干集群下的同名搜索服务。同时本发明也能改良后应用与其他分布式应用系统的集群服务管理。

本发明技术方案如下:一种基于路由表的搜索系统集群服务管理的方法,通过对搜索服务器进行逻辑集群划分,将划分所得的集群信息存在路由表模块中,并构建多个对外提供集群服务的搜索应用请求转发器,这些请求转发器能统一从路由表信息中获取集群服务的分布,并面向搜索客户端提供服务结果应答和搜索请求转发;搜索客户端client提出的搜索服务的索引数据被复制多份,分配在不同的搜索服务应用中;通过搜索路由表系统记录搜索服务在搜索服务应用的分配情况,同时记录所有搜索服务应用和由他们组合而成的搜索集群;搜索请求分发系统接收客户端发出的搜索服务请求,根据请求内容查询路由表系统router中关于本次搜索服务的路由信息,将搜索请求转发给相应的搜索服务应用replica-search server,得到结果后再把结果回发给搜索客户端,具体步骤包括:

步骤1:在搜索服务器上构建多个能备份搜索服务信息的搜索服务应用(replica-searh Server),并将实际的搜索服务(collection)分配在这些搜索服务器(replica-Searh Server)上;

步骤2:若干个搜索服务应用(replica-Searh Server)集合,组成一个搜索系统集群(cluster);

步骤3:在路由表系统(router)中注册、记录及管理所有搜索系统集群内的搜索服务分布的信息;

步骤4:配置与搜索客户端(client)指定连接的搜索请求分发系统,当客户端发出搜索请求时,能直接与搜索请求分发系统Dispatcher通信;当客户端与该指定连接的搜索请求分发系统成功建立通信后,客户端同时从路由表系统中自动获取其他可用的搜索请求分发系统的地址信息;

所述搜索服务信息会复制多个备份,并被分配到不同的搜索服务应用replica-search server中;所述搜索路由表系统router包含搜索服务应用replica-search server和其内搜索服务的属性信息及分布信息;所述搜索请求转发系统dispatcher接收客户端发出的搜索服务请求,并根据请求中的信息,通过根据在router查询所需搜索服务的地址信息,将搜索服务请求转发至相应的搜索服务集群及其内的搜索服务应用,获取到结果后经由搜索请求转发系统dispatcher返回给客户端;

步骤5:搜索请求分发系统(dispatcher)收到来自搜索客户端Client的搜索服务请求后,检索路由表系统(router)内有关该搜索服务的搜索集群配置信息;

所述搜索服务请求中包含cookie信息、指定的搜索集群、搜索服务名称,在没有启用搜索流量集群分发策略时,dispatcher将根据搜索服务请求中的信息决定搜索服务请求转发至哪一个搜索集群内;

步骤6:根据本次搜索请求中搜索服务在router内的集群配置信息,包括搜索服务对应的集群名称、搜索服务名称、是否启用搜索流量集群分发策略、集群内的搜索服务器名称及地址信息,进而确定dispatcher将client的搜索服务请求转发具体至哪一个集群和集群内的搜索服务应用replica-search server进行搜索服务;

步骤7:搜索服务应用(replica-search server)根据收到的搜索请求,得到搜索服务结果,并将该结果返回给client端。

步骤5搜索客户端client通过初始化配置可用的搜索请求分发dispatcher访问信息,初始化连接第一个可用的搜索请求分发系统dispatcher后,进入步骤5-1;

步骤5-1:搜索客户端client成功连接dispatcher后,获取与该dispatcher相连的Router内其他所有dispatcher的信息,并持久化存储在客户端本地,作为与dispatcher连接的备用信息;

步骤5-2:client发送搜索请求给已建立连接的dispatcher,搜索请求中包含用户的cookie信息、是否指定搜索集群cluster、所请求的搜索服务名称。搜索请求中的信息被作为dispatcher执行路由检索的参考信息;

步骤5-3:dispatcher收到来自客户端client的请求信息,并根据请求信息检查router内是否有请求中的搜索服务的地址信息和已指定的搜索集群,如果上述两个信息都没有被找到,抛出异常,通知客户端client搜索失败;如果查询到相关信息,转步骤4;

步骤5-4:搜索请求分发系统dispatcher在Router中已查询到客户端请求的搜索服务,但若客户端请求指定的集群信息为空或找不到对应的集群,且发现同名的搜索服务分布在其他多个集群中,搜索请求分发系统dispatcher则任意挑选一个集群作为目标集群,将搜索请求发送至该集群内包含该搜索服务的搜索服务应用replica-search server,搜索服务应用成功返回结果,由搜索请求分发系统传给客户端;

步骤5-5:若在步骤5-4中,由搜索请求分发系统dispatcher发送至搜索服务应用replica-search server的搜索请求出错或者无响应时,dispatcher将继续在Router中查找下一个可用的搜索服务应用replica-search server;若继续出错,进而导致尝试次数达到设置的最大限制或者超过服务端超时时间设置,则搜索请求分发系统dispatcher直接抛出搜索异常信息给客户端client;

步骤5-6:当客户端收到步骤5-5中抛出的异常时,客户端client自动在已持久化本地的搜索请求分发系统dispatcher信息列表中获取另一个可用dispatcher,并连接;重复步骤2-步骤6,直至dispatcher信息列表中记录的dispatcher都被尝试与客户端连接,若dispatcher还抛出搜索异常或者超过客户端超时时间设置,则客户端抛出异常,本次搜索请求失败;

步骤5-7:若在步骤5-2中,客户端请求的搜索服务在路由表系统router中被标识为启用“搜索流量集群分配”策略,dispatcher根据搜索请求中的用户cookie信息,经计算后,与路由表系统router中已设置的各个集群的权重值比照,经比照一致的搜索集群将被选择为搜索请求的发送方,该搜索集群内包含该搜索服务的搜索服务应用replica-search server将作为接收本次搜索请求的目标搜索服务应用,搜索服务应用成功返回搜索结果,由搜索请求分发系统传给客户端;

所述步骤4中还包括客户端对dispatcher的缓存,具体步骤有:

步骤4-1:客户端client首次成功连接指定的dispatcher后,将自动从路由表系统(Router)中远程获取当前所有可用的dispatcher列表信息,并通过文件存储Dispatcher信息实现在本地持久化缓存;

步骤4-2:客户端client拥有Dispatcher列表信息后,当配置的Dispatcher地址不可用,客户端调用本地缓存的且已在router中注册的dispatcher列表,并自动从列表中依次选择其他dispatcher进行连接,直至连接成功;

步骤4-3:当本地缓存中所有记录的dispatcher都尝试连接后,若仍存在连接异常,则搜索客户端抛出异常,本次搜索请求失败;

步骤6中启用所述的搜索流量集群分发策略,具体步骤包括:

步骤6-1:在router存放的路由表信息中会通过一个字段来记录是否启用搜索集群流量分发;步骤6-2:当标示为启用搜索流量集群分发时,Dispatcher调用本次搜索业务请求,并按照用户特性进行流量切分;

其中,搜索业务对应的多个集群的流量占比由人为设定,存储在路由表系统Router中,所有集群的流量占比总和为100%;

步骤6-3:执行搜索流量集群分发时,依据client端所发搜索请求中的用户特征信息,利用一致性哈希算法计算一个权重值;

步骤6-4:根据步骤6-3得到的权重值,通过对照router中该搜索业务对应的所有集群的权重值,确认搜索请求转发的目的集群cluster;

一种基于路由表的搜索系统集群服务管理的系统,其特征在于,系统包括搜索请求客户端client、搜索请求分发系统dispatcher、搜索路由表系统router、搜索服务应用replica-search server;所述四个部分之间都通过网络进行通信,各自有不同的服务端口,按照一定的规则匹配一起完成搜索服务;

搜索路由表系统router负责所有搜索服务应用replica-search server的登记注册及管理,并负责记录所有搜索服务应用replica-search server的属性信息及所有搜索服务在各搜索服务应用replica-search server内的分布情况;

搜索请求分发系统dispatcher在搜索客户端client和搜索服务应用replica-search server之间承担代理和转发角色,负责接收搜索请求客户端client的搜索请求,并根据搜索路由表系统router中的搜索服务路由信息、以及搜索服务和搜索集群的配置信息,对搜索请求进行不同策略的转发;

所有搜素服务应用划分为不同的搜索集群cluster,关于“每个搜索集群内的搜索服务应用的分布”、“每个搜索服务应用包含的搜索服务”等涉及到搜索集群cluster、搜索服务应用及搜索服务三者的对应关系,均被记录在搜索路由表系统router中;

所述搜索集群Cluster,是包含若干个replica-search server的集合;

所述搜索服务,是指通过客户端向搜索服务器发出针对某个搜索业务索引的搜索请求,并得到搜索结果的服务模型。

所述搜索请求客户端client,是搜索服务调用请求的发起人,是搜索服务的直接使用人;客户端的初始dispatcher的连接地址由手工配置,当搜索客户端client成功与初始搜索请求分发系统dispatcher建立通讯关系,搜索客户端client将获取到其他有用的dispatcher地址信息;

客户端从搜索路由表系统router内获取其他可用的搜索请求分发系统dispatcher地址信息,并不缓存关于搜索服务的详细完整的路由信息;客户端不需要知道服务端具体的搜索服务节点的分布情况,只需要知道当前所有可用的搜索服务转发代理dispatcher;

所述搜索请求分发系统dispatcher,是路由信息的实际执行者,能根据搜索路由表系统router内记录的集群分布信息及分布策略,执行搜索服务请求的转发和调度;

所述搜索服务应用replica-search server,是具备自我注册能力的搜索服务端,它包含搜索服务的索引数据,负责完成搜索服务的索引查询匹配;多个搜索服务应用构成搜索集群cluster,搜索服务应用replica-search server的集群通过自注册加入的方式成立,当第一个replica-search server启动时,它需要在router内配置地址,同时在router中增加一个初始配置信息,并在router配置信息中加入一个唯一标识id号,这个唯一标识id号会被当作一个新的搜索集群id号记录在搜索路由表系统router中;如果再有其他的搜索服务应用replica-search server想要加入已存在的搜索集群中,以现有的搜索集群id号配置在该搜索服务应用在搜索路由表系统router中;

任意一个replica-search server只能从属于一个cluster,而任何一个cluster中,都不允许出现同名的replica-search server的集合collection。

所述搜索客户端client:负责发送搜索请求,搜索请求中包含搜索客户端的用户特征信息,以及本次搜索服务对应的搜索服务信息(collection);

所述搜索请求分发系统dispatcher:即搜索路由信息的执行者,与搜索客户端直接通讯;同时负责从搜索路由表模块router中获取本次搜索业务在搜索服务应用内分布情况;

所述搜索路由表系统router:用于管理所有处于启动状态的搜索服务应用,记录各个搜索服务应用的属性信息,以及每个搜索服务在搜索服务应用内的实际分布;同时用于将不同搜索服务应用集成为不同的集群,记录所有集群的属性信息及集群内的搜索服务应用分布情况;当有新的搜索服务应用启动时,需要及时在搜索搜索路由表系统router内注册和更新搜索业务分布信息;

所述搜索服务应用replica-search server:搜索服务应用存放实际的搜索服务的索引信息,若干个搜索服务应用可以组成一个搜索系统集群cluster,每一个搜索服务应用只能从属于一个集群cluster;

关于“每个搜索集群内的搜索服务应用的分布”、“每个搜索服务应用包含的搜索服务”等涉及到搜索集群cluster、搜索服务应用及搜索服务三者的对应关系,均被记录在搜索路由表系统router中;

所述搜索请求分发系统dispatcher并不具备搜索服务的能力,也不需要大量的计算和存储能力;本发明中的搜索请求分发系统dispatcher能支持高并发的大量的用户访问,能通过增加搜索服务应用replica-search server实现扩展整个搜索系统的服务能力时,而不是增加太多的dispatcher模块;

所述搜索服务应用集合而成的集群采用自注册方式组合,当第一个搜索服务应用启动时,在搜索路由表系统router配置地址信息,同时标识唯一的集群标识ID;当其他搜索服务应用欲加入已有的搜索集群中,以现有的集群标识ID作为该搜索服务应用在router中的地址信息。

本方明与现有技术相比,其有益效果:

(1)本发明中的客户端除了配置的固定dispatcher地址外,还加入客户端持久化文件,可以自动定期更新服务端的所有的可用搜索服务请求转发应用(简称dispatcher)信息,这样大大的提高了搜索集群服务系统的可用性,一个或少数dispatcher的不可用,或是client初始化连接的dispatcher不可用,都不会导致client无法连接搜索服务。

(2)本发明在client和dispatcher,searcher-server之间加入多级故障重试机制。若dispatcher无法服务,client会依次将所有缓存在client本地可用的多个dispatcher服务依次故障重试。如果searcher-server出现故障,dispatcher会按照router信息,将包含该collection的所有replica-searcher server依次故障重试。这种两级故障重试机制,确保了在发生服务器软硬件故障的条件下,只要有一丝可能,搜索服务就能正常对外使用,提高了用户的满意度和平台整体可靠观感。

(3)本发明在router应用中的路由表信息内加入collection,replica集群的访问的策略控制,无需客户端进行任何修改,即可按照不同的collection,结合业务实际需求进行类似AB测试,及流量切分的搜索系统集群服务的管理。尤其对于搜索系统来说,不同搜索规则在线上并行发布使用,但对应的是同名的搜索collection的业务场景,是非常具有使用价值的;当发生服务器机房升级换代,搜索服务器的硬件维修替换时,能将线上的搜索流量切分到备用的搜索集群上,当原集群完成升级换代及硬件维护后,能立即平滑地完成两个集群的切换。

(4)本发明结合router的路由表,能将原来并不能同时对外一起提供服务的replica-search server组织起来,构建成一个虚拟的搜索集群,同时还能支持搜索系统服务管理的数据权限分权要求,实现在测试版上的搜索服务管理集群和正式应用的集群能进行权限隔离,大大方便了搜索平台的日常管理。

附图说明

图1为本发明实施例的系统架构图;

图2为本发明实施例的路由表系统结构图;

图3为本发明实施例的基于路由表的搜索系统请求集群服务方法的流程图;

图4为本发明实施例的搜索流量集群分发方法的流程图。

具体实施方式

为了使本发明的目的,技术方案和优点更加清楚,下面结合附图和具体实施例对本发明继续详细描述。

如图1所示,为本发明实施例的系统结构。为了描述方便,我们假设整个搜索系统只包含了两个搜索索引,分别为Collection_1 107,Collection_2,这两个搜索索引即为搜索系统对外提供的搜索服务,这两个搜索所分别分布在三个Cluster 105中,每个Cluster中包含了2个Replica-Server 106。搜索Client端的Dispatcher_Route_List 102中存放了服务端3个Dispatcher 103的列表信息。每个Cluster中的的所有Replica-Server 106和包含其中的索引Collection 107的相关信息都会注册到Router 104中。Router 104模块是整个系统架构中的核心模块,它负责管理所有搜索集群的业务信息。Dispatcher 103则通过和Router 104之间的通讯来获取和感知搜索集群的业务状态和分布,以将来自Client的搜索请求转发到对应的Replica Server 106上。

如图2所示,为本发明实施例的路由表结构图。路由表是存放在Router 104中的。它实际分为集群Key 201、2集群流量比202、搜索索引名称203、是否启用流量分配开关204、Replica-Server ID 205、Replica-Server的实际IP和端口206。

图2中举例了说明了路由表里的数据样式了,当然为了简便说明,数据样式做了简化。Cluster_A 207表示了存放在路由表中一条集群信息,路由表中的数据是由集群Key 201和搜索索引名称203组合成为唯一主键,即相同的Cluster中不能有同名搜索索引。路由表中还包含了Replica—Server的具体信息209和210,209表示的是一个集群key和一个索引名称组成的主键可对应多个Replica-Server ID 205和Replica-Server的实际IP和端口206。

图中208所表示的collection_2表示该业务对应的集群是具备了流量分配功能,分配的百分比为Cluster_B和Cluster_C各占50%。

如图3所示,为本发明实施例的基于路由表系统搜索请求集群服务方法的流程图,具体包括:

步骤301:Client发出搜索请求。Client端为整个搜索系统的服务客户端,负责向服务端发出搜索服务请求,接收搜索结果。

步骤302:Client发出搜索请求时会首先判断是否已经配置了可连接的Dispatcher地址。Client不直接和搜索的实际服务器Replica-Search Server 106发生关联,所以必须在Client配置可以连接的Dispatcher地址

步骤303:如果没有配置Dispatcher地址,则Client直接抛出异常,表示无法进行搜索服务连接。搜索请求异常终止。

步骤304:如果已配置Dispatcher地址,则会与该地址进行连接,发出搜索服务请求,判断该Dispatcher是否能正常对外服务

步骤305:一旦成功建立连接后,假设该Client是第一次与Dispatcher进行通讯,则会将该Dispatcher所连接的Router上的所有Dispatcher信息全部获取,并传回客户端本地进行持久化,持久化以文件方式存储。

步骤306:Dispatcher收到Client发过来的有效搜索查询请求后,会在Router上进行路由检索,获取所有相关该查询Collection名称的所有路由表信息

步骤307:Dispatcher会解析Client发过来的搜索请求中是否明确指定了需要连接的Cluster信息。如果明确指明了目标Cluster信息,则在该Cluster的所有Replica-Server信息中选择一个可用的Replica-Server转发搜索请求。选择Cluster中的Replica-Server的方法有多种,有按照分配的负荷权重进行分配,也可以按照查询请求的条件进行Hash后,选择将特定Hash数值的请求转发给特定的Server。

步骤308:如果没有指定目标的Cluster信息,则会随机从当前可用的Cluster中选择一个(也可以采用的规则是选择最新创建的Cluster作为目标Cluster),然后在该Cluster中按照步骤307的算法选择一个Replica-Server进行搜索服务请求转发

步骤309:Replica-Server进行搜索实际查询服务执行,因为搜索应用是一个高CPU和高内存消耗的应用,且由于硬件资源的条件限制,搜索应用可能不一定能够得到需要的搜索结果,可能出现搜索实例超时或者内存溢出等异常情况

步骤310:如果出现搜索得到结果失败的情况,则表示当前所执行搜索服务请求的Replica-Server出现故障,需要更换Cluster中的其他可用Replica进行重试

步骤311:如果所有当前Cluster下的Replica都尝试过出现无法服务的故障,则Dispatcher会将异常信息抛出给客户端Client,Client会放弃当前的Dispatcher,切换到本地所缓存的其他Dispatcher地址,进行重新搜索服务请求。重复步骤304-310

步骤312:如果replica执行成功,得到搜索请求的结果,则返回给client,表示一个完正的搜索请求服务流程完毕。

如图4所示,为本发明实施例的搜索流量集群分发方法的流程图,具体包括

步骤401:类似图3所描述的搜索请求服务流程的起点,Client发出搜索服务请求。

步骤402:类似图3部分的流程此处进行简化,不做具体描述。当Dispatcher收到Client发出的搜索请求后,会检索Router上的相关路由管理信息,当判断发现如果该次搜索请求需要进行流量集群分发,即将调用同一个搜索业务的请求按照用户特性进行流量切分,切分的相关百分比配置已经在Router的路由表信息中进行了约定。

步骤403:计算Client传入的搜索服务请求中包含的用户特征信息,一般来说,采用的用户端Cookie信息中包含的UUID组成的一个数值型字串。

步骤404:针对用户的特征值然后进行取模计算,再结合一致性哈希的算法,进行不同的比例的权重计算,最后得出该次用户的搜索请求服务应该分配的目标对应Cluster结果。

步骤405:在对应的Cluster包含的Replica中选择一个Replica作为本次搜索请求服务的执行方。选择的算法类似于图3中的步骤307

步骤406:搜索服务端得到搜索结果,返回给Dispatcher,再传递给Client结果。如果出现搜索异常,则抛出异常给Client。此处重试的机制在图3的步骤中已经做过描述,此处不再赘述。

本发明还可有其他多种实施方式,在不违背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明做出相应的改变和变形,这些改变和变形都应属于本发明所附的权利要求的保护范围。

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