基于网关的elasticsearch搜索服务方法、系统、介质及终端
技术领域
1.本发明涉及互联网搜索服务领域,特别是涉及基于网关的elasticsearch搜索服务方法、系统、介质及终端。
背景技术:2.搜索引擎在业界广泛用于搜索信息、日志查询、数据存储等领域,其中elasticsearch(下文简称es)是其中最主要的搜索解决方案。然而es在生产环境中存在各种问题:在安全方面,es无法对访问进行审查,索引容易被非法删除,却没有日志审计,es也无法提供基于角色的访问控制和索引管理(rbac
‑
role
‑
based access control);在监控报警方面,es只提供原生的监控指标rest api接口,无法提供监控指标图形化界面展示;在日志采集方面,es提供了原生日志,但随着节点增多,日志查看十分不方便;在可用性方面,es部署在物理服务器上,没有自动化横向扩展能力,一旦遇到访问量突增,cpu/内存资源紧缺,需要新增物理服务器并且安装es,既耗费时间又容易出错。
3.针对上述es在生产环境中存在的各种问题,已有的改进方案如下所述:在安全方面,通过修改es源码或开发es插件,增加白名单,从而限制部分节点访问es,但是代码改动只支持部分es版本,如果es升级,还需要额外开发;采用nginx作为网关,在提高安全性的同时提高了检索速度,但是该方法基于lua,编程灵活性较差;采用es 7.x原生网关,安全性强,支持https且索引按照权限分配,但es 5.x、es 6.x不支持ldap,并且集成需要收费。综上可知,现有技术在提高es搜索的安全性能方面适用范围小、编程灵活差、且所需成本较高。
技术实现要素:4.鉴于以上所述现有技术的缺点,本发明的目的在于提供一种基于网关的elasticsearch搜索服务方法、系统、介质及终端,用于解决现有技术中的es搜索方法的安全性能不足、访问和管理权限不合理、日志查看不便以及缺乏自动化横向扩展能力等技术问题。
5.为实现上述目的及其它相关目的,本发明的第一方面提供一种基于网关的elasticsearch搜索服务方法,包括:标准容器化部署es集群;基于spring cloud gateway部署网关以代理所述es集群;采用cmdb对网关代理的es集群进行管理,以响应用户请求并提供搜索服务。
6.于本发明的第一方面的一些实施例中,所述方法采用ldap设置用户的账号权限;所述网关基于所设置的权限并结合用户信息以管理用户对所述es集群的操作。
7.于本发明的第一方面的一些实施例中,所述网关的部署方式包括分布式网关部署;所述分布式网关部署包括:每个网关节点代理所述es集群中的一个es节点,以节约网关代理es的性能开销。
8.于本发明的第一方面的一些实施例中,所述方法包括:采用kubernetes部署所述
es集群;所述kubernetes使用statefulset部署es集群的data节点和master节点;其中,data节点配置有高配cpu、高配内存、固态硬盘且设置有污点,master节点配置有低配cpu、低配内存、nas存储且不设置污点。
9.于本发明的第一方面的一些实施例中,所述kubernetes通过比较实际资源使用率和目标资源使用率来决定资源扩容数量。
10.于本发明的第一方面的一些实施例中,所述方法包括:对所述es集群采用灾难管理模式。
11.于本发明的第一方面的一些实施例中,所述方法包括:采集并管理网关审计日志、es服务日志、es慢日志,供追踪对所述es集群进行的操作。
12.为实现上述目的及其它相关目的,本发明的第二方面提供一种基于网关的elasticsearch搜索服务系统,包括:es集群部署模块,标准容器化部署es集群;网关部署模块,基于spring cloud gateway部署网关以代理所述es集群;es集群管理模块,采用cmdb对网关代理的es集群进行管理,以响应用户请求并提供搜索服务。
13.为实现上述目的及其它相关目的,本发明的第三方面提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述基于网关的elasticsearch搜索服务方法。
14.为实现上述目的及其它相关目的,本发明的第四方面提供一种电子终端,包括:处理器及存储器;所述存储器用于存储计算机程序,所述处理器用于执行所述存储器存储的计算机程序,以使所述终端执行所述基于网关的elasticsearch搜索服务方法。
15.如上所述,本发明提出的基于网关的elasticsearch搜索服务方法、系统、介质及终端,具有以下有益效果:采用spring cloud gateway网关代理es,使得es安全得到明显加强,不仅可以将用户的所有操作都记录在日志里面,而且如果用户不携带ldap信息,其访问es会被拒绝以防止非法访问;es索引管理得到加强,所有索引和部门相关联,各个部门只能操作本角色授权的索引;得益于kubernetes的横向扩容机制,网关/es数据节点都会调整资源,这样既能够保证在高流量下用户访问顺利,又能够保证低流量下不浪费资源;由于采用普罗米修斯(promethous)监控报警以及elk日志采集,es可用性大大加强,运维难度降低。
附图说明
16.图1显示为本发明一实施例中一种基于网关的elasticsearch搜索服务方法流程示意图。
17.图2显示为本发明一实施例中另一种基于网关的elasticsearch搜索服务方法流程示意图。
18.图3显示为本发明一实施例中一种基于网关的elasticsearch搜索服务系统结构示意图。
19.图4显示为本发明一实施例中电子终端的结构示意图。
具体实施方式
20.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其它优点与功效。本发明还可以通过另外不同的具体实
施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
21.需要说明的是,在下述描述中,参考附图,附图描述了本发明的若干实施例。应当理解,还可使用其它实施例,并且可以在不背离本发明的精神和范围的情况下进行机械组成、结构、电气以及操作上的改变。下面的详细描述不应该被认为是限制性的,并且本发明的实施例的范围仅由公布的专利的权利要求书所限定。这里使用的术语仅是为了描述特定实施例,而并非旨在限制本发明。
22.再者,如同在本文中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示。应当进一步理解,术语“包含”、“包括”表明存在所述的特征、操作、元件、组件、项目、种类、和/或组,但不排除一个或多个其它特征、操作、元件、组件、项目、种类、和/或组的存在、出现或添加。此处使用的术语“或”和“和/或”被解释为包括性的,或意味着任一个或任何组合。因此,“a、b或c”或者“a、b和/或c”意味着“以下任一个:a;b;c;a和b;a和c;b和c;a、b和c”。仅当元件、功能或操作的组合在某些方式下内在地互相排斥时,才会出现该定义的例外。
23.本发明的目的在于提供一种基于网关的elasticsearch搜索服务方法、系统、介质及终端,用于解决现有技术中的es搜索方法的安全性能不足、访问和管理权限不合理、日志查看不便以及缺乏自动化横向扩展能力等技术问题。
24.为了使本发明的目的、技术方案及优点更加清楚明白,通过下述实施例并结合附图,对本发明实施例中的技术方案进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
25.实施例一
26.图1显示为本发明实施例的一种基于网关的elasticsearch搜索服务方法流程示意图,具体包括步骤如下:
27.步骤s11.标准容器化部署es集群。具体的,基于云原生的方式对es集群进行标准容器化部署,从而为所述es集群提供更丰富可靠的高可用运维手段。可选的标准容器化方式包括:基于swarm进行封装或基于kubernetes(k8s)进行封装。并且,es(elasticsearch)集群角色包括:data节点(数据节点)、master节点(主节点)和负载均衡节点,其中,data节点用于存储数据并承担搜索和索引任务;master节点为集群的管理节点,用于维护数据并管理集群各个节点的状态,负载均衡节点主要用于查询负载均衡。
28.步骤s12.基于spring cloud gateway部署网关以代理所述es集群。具体的,采用可编程方式,基于spring cloud gateway实现es搜索服务的落地,具有较高的编程灵活性,不仅可以完成针对特定访问的路由,还可以为所述搜索服务增加索引管理、日志审计、限流/熔断等功能。
29.步骤s13.采用cmdb对网关代理的es集群进行管理,以响应用户请求并提供搜索服务。cmdb(configuration management database,配置管理数据库)除包括虚拟机、ip、域名等狭义上的资源类管理外,还包括中间件、es、企业组织架构、应用拓扑结构等的资源类管理。本实施例采用cmdb可实现对es集群的精细化分类管理。
30.图2显示为采用kubernetes(k8s)部署所述es集群的搜索服务方法流程示意图。由
于k8s内部自带负载均衡服务,所以舍去es集群的负载均衡节点。并且,所述kubernetes使用statefulset部署es集群的data节点和master节点,其中,data节点配置有高配cpu、高配内存、固态硬盘(ssd,solid state disk)且设置有污点(taints),master节点配置有低配cpu、低配内存、nas存储且不设置污点。本实施方式支持节点自动获取pvc存储,方便es集群的横向扩容(hpa,horizontal pod autoscaling)。
31.在本实施例较佳的实施方式中,所述网关部署方式包括分布式网关部署。可选的,采用sidecar模式部署网关,即一个网关节点代理一个es节点。本实施方式可以有效节约网关代理es的性能开销。
32.在一些示例中,所述网关部署方式为集中式网关部署,即采用一个网关代理多个es集群,网关内部根据url做出路由转发。
33.在本实施例较佳的实施方式中,采用k8s负载均衡svc代理网关节点,其中k8s负载均衡svc内置round
‑
robin算法,能够使流量平均分配在所有es网关节点。
34.在本实施例较佳的实施方式中,所述方法还包括:采用ldap设置用户的账号权限;所述网关基于所设置的权限并结合用户信息以管理用户对所述es集群的操作。具体的,基于ldap(lightweight directory access protocol,轻型目录访问协议)目录树指定用户的账号权限,并结合cmdb,从而实现对es集群基于角色的权限管理。
35.在本实施例较佳的实施方式中,所述方法还包括:采用k8s hpa机制,通过比较实际资源使用率和目标资源使用率来决定资源扩容数量。举例,在生产环境中对es配置如下:
36.cpu.hpa.autoscaling.banzaicloud.io/targetaverageutilization(目标cpu使用率):"70";
37.hpa.autoscaling.banzaicloud.io/maxreplicas(副本最大值):"50";
38.hpa.autoscaling.banzaicloud.io/minreplicas(副本最小值):"10";
39.memory.hpa.autoscaling.banzaicloud.io/targetaverageutilization(目标内存使用率):"80";
40.上述配置表示:节点数量扩容范围为10~50,如果pod(包括网关和es数据节点)的平均cpu使用率为140%,pod数量会翻倍;如果pod平均内存使用率为40%,pod数量会减半。
41.由上述举例可知,得益于k8s hpa横向扩容机制,网关/es数据节点可以自由增加/减少资源数量,这样既能够保证在高流量下用户访问顺利,又能够保证低流量下不浪费资源。
42.在本实施例较佳的实施方式中,所述方法还包括:在网关/es节点加入readiness探针,使得只有当网关和es完全启动后,才能接受用户的请求。本实施方式可有效避免节点还没启动完毕的情况下,用户请求被直接发送至节点,导致请求失败。
43.在本实施例较佳的实施方式中,所述方法还包括:在es客户端通过http协议rest接口请求es服务端的情况下,网关可以获取用户信息,并结合所获取的用户信息和ldap设置的权限管理用户对所述es集群的操作。所述用户信息包括但不限于:url、用户名、密码(http header)、rest方法(post,get,delete,put...)等等。例如,公司ldap服务可以给出相关用户的部门,网关可以设置为只允许用户访问指定部门的es系统。又例如,ldap可设置文档索引delete权限只对es管理员开放,其他权限对所有人开放,以防其他人误删索引。诸如此类,本实施方式利用网关可以设置用户对es的访问权限,提高es搜索服务的安全性和
为用户提供服务的多样性、灵活性。
44.在本实施例较佳的实施方式中,所述方法还包括:通过网关分配索引以实现索引管理。具体的,网关将获得的部门信息与索引相互关联,并将索引和部门信息对应存储于cmdb,这样用户在前端只会看到其所属部门的索引,避免其它部门的信息对用户产生干扰。
45.在本实施例较佳的实施方式中,所述方法还包括:对并发请求进行限流。可选的,限流的方式有拒绝服务、排队等待、降级等。本实施例基于spring cloud gateway部署的网关主要依靠过滤器实现限流。优选的,spring cloud gateway采用令牌桶算法,结合应用路由对es请求限流。
46.在一些示例中,所述方法设置es业务的优先级别。如将业务分为低优先级别业务和高优先级别业务,其中,低优先级别业务的访问流量不超过整体集群的30%,紧急情况可切断访问;高优先级别业务的访问流量不设限。
47.在本实施例较佳的实施方式中,所述方法还包括:引入定时任务框架xxl
‑
job,定时通过rest接口抽取es监控数据插入时序数据库promethous(普罗米修斯),grafana把promethous时序数据库中的数据展示到前端界面,alert manager对所有组件进行报警。举例,表1为es的报警指标及其他信息。
48.表1.es报警指标
[0049][0050]
在本实施例较佳的实施方式中,所述方法还包括:采集并管理网关审计日志、es服务日志、es慢日志,供追踪对所述es集群进行的操作。具体的,采用经典的elk(filebeat+kafka+logstash+elasticsearch+kibana)系统采集所述日志。其中,网关审计日志包括:请求体、相应体、url、用户名、密码(http header)、rest方法(post,get,delete,put...)等等;es服务日志包括:记录时间、错误等级、java方法、java类、线程、正文等等;es慢日志包括:记录查询、dsl执行时间、执行索引、rest api请求体等等。本实施方式通过elk系统采集所述日志到kibana供运维人员查看,这样可以实现对es所有操作的可追踪。
[0051]
在本实施例较佳的实施方式中,所述方法还包括:利用cmdb对es集群的服务进行平台化管理,所述es集群的服务包括:集群列表,用于展示es集群的连接地址、功能、集群状态、节点数量、版本信息、k8s集群信息以及网关信息等;集群部署,业务部门可以自助创建/
删除es集群;索引管理,用于展示索引分区数量/副本数量、提供创建/删/修改副本数量功能;开发工具,类似kibana的dev tools,用于对所选择的集群发送rest请求。
[0052]
在本实施例较佳的实施方式中,所述方法还包括:对所述es集群采用灾难管理模式。具体的,每个网关代理两个es集群,该两个集群日常同时写,但正常情况下只访问其中一个集群;当正常情况访问的es集群不可用(升级或者灾难发生)时,下线该es集群,由另一个es集群提供所需功能服务。
[0053]
在一些示例中,基于k8s和spring cloud gateway,在同一个k8s集群部署esrally容器,随后登陆esrally对容器内的es网关压测,对直接访问es和通过网关访问es的搜索服务方法的性能进行比较。表2.1为es配置表,表2.2为指标比较结果,表2.3为性能测试报告。由表2.1~表2.3可知,本发明实施例通过spring cloud gateway网关访问es集群,有效节约了es的性能开销。
[0054]
表2.1 es配置表
[0055] 环境内存(gb)cpu(m)节点数量存储数据节点阿里云82003ssd
[0056]
表2.2指标比较结果(+代表增加,
‑
代表减少)
[0057] 内存消耗写入吞吐量写入延迟搜索吞吐量搜索延迟通过网关访问es+50%+10%
ꢀꢀꢀ
直接访问es
ꢀꢀ‑
20%
‑
80%+10%
[0058]
在一些实施方式中,所述方法可应用于控制器,所述电控单元例如为arm(advanced risc machines)控制器、fpga(field programmable gate array)控制器、soc(system on chip)控制器、dsp(digital signal processing)控制器、或者mcu(microcontroller unit)控制器等等。在一些实施方式中,所述方法也可应用于包括存储器、存储控制器、一个或多个处理单元(cpu)、外设接口、rf电路、音频电路、扬声器、麦克风、输入/输出(i/o)子系统、显示屏、其它输出或控制设备,以及外部端口等组件的计算机;所述计算机包括但不限于如台式电脑、笔记本电脑、平板电脑、智能手机、智能电视、个人数字助理(personal digital assistant,简称pda)等个人电脑。在另一些实施方式中,所述方法还可应用于服务器,所述服务器可以根据功能、负载等多种因素布置在一个或多个实体服务器上,也可以由分布的或集中的服务器集群构成。
[0059]
综上所述,本发明实施例提出的基于网关的elasticsearch搜索服务方法具有以下有益效果:es安全得到明显加强,不仅可以将用户的所有操作都记录在日志里面,而且如果用户不携带ldap信息,其访问es会被拒绝以防止非法访问;es索引管理得到加强,所有索引和部门相关联,各个部门只能操作本角色授权的索引;得益于k8s hpa横向扩容机制,网关/es数据节点都会调整资源,这样既能够保证在高流量下用户访问顺利,又能够保证低流量下不浪费资源;由于采用普罗米修斯(promethous)监控报警以及elk日志采集,es可用性大大加强,运维难度降低。
[0060]
实施例二
[0061]
图3显示为本发明实施例中一种基于网关的elasticsearch搜索服务系统结构示意图,包括:es集群部署模块31,标准容器化部署es集群;网关部署模块32,基于spring cloud gateway部署网关以代理所述es集群;es集群管理模块33,采用cmdb对网关代理的es
集群进行管理,以响应用户请求并提供搜索服务。
[0062]
需要说明的是,本实施例提供的模块与上文中提供的方法、实施方式类似,故不再赘述。另外需要说明的是,应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,es集群部署模块可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上es集群部署模块的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里所述的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
[0063]
例如,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(application specific integrated circuit,简称asic),或,一个或多个微处理器(digital signal processor,简称dsp),或,一个或者多个现场可编程门阵列(field programmable gate array,简称fpga)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(central processing unit,简称cpu)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system
‑
on
‑
a
‑
chip,简称soc)的形式实现。
[0064]
实施例三
[0065]
本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序。所述计算机程序被处理器执行时实现所述基于网关的elasticsearch搜索服务方法。
[0066]
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过计算机程序相关的硬件来完成。前述的计算机程序可以存储于一计算机可读存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
[0067]
实施例四
[0068]
图4显示为本发明实施例提供的一种电子终端的结构示意图。本实施例提供的电子终端,包括:处理器41、存储器42、通信器43;存储器42通过系统总线与处理器41和通信器43连接并完成相互间的通信,存储器42用于存储计算机程序,通信器43用于和其它设备进行通信,处理器41用于运行计算机程序,使电子终端执行如上基于网关的elasticsearch搜索服务方法的各个步骤。
[0069]
上述提到的系统总线可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。该系统总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于实现数据库访问装置与其它设备(例如客户端、读写库和只读库)之间的通信。存储器可能包含随机存取存储器(random access memory,简称ram),也可能还包括非易失性存储器(non
‑
volatile memory),例如至少一个磁盘存储器。
[0070]
上述的处理器可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processing,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
[0071]
综上所述,本发明提供的基于网关的elasticsearch搜索服务方法、系统、介质及终端,解决了现有技术中的es搜索方法的安全性能不足、访问和管理权限不合理、日志查看不便以及缺乏自动化横向扩展能力等技术问题。本发明采用spring cloud gateway网关代理es,使得es安全得到明显加强,不仅可以将用户的所有操作都记录在日志里面,而且如果用户不携带ldap信息,其访问es会被拒绝以防止非法访问;es索引管理得到加强,所有索引和部门相关联,各个部门只能操作本角色授权的索引;得益于k8s hpa横向扩容机制,网关/es数据节点都会调整资源,这样既能够保证在高流量下用户访问顺利,又能够保证低流量下不浪费资源;由于采用普罗米修斯(promethous)监控报警以及elk日志采集,es可用性大大加强,运维难度降低。因此,本发明有效克服了现有技术中的种种缺点而具有高度产业利用价值。
[0072]
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。