CN111314141B - 路由更新方法及装置 - Google Patents
路由更新方法及装置 Download PDFInfo
- Publication number
- CN111314141B CN111314141B CN202010106646.3A CN202010106646A CN111314141B CN 111314141 B CN111314141 B CN 111314141B CN 202010106646 A CN202010106646 A CN 202010106646A CN 111314141 B CN111314141 B CN 111314141B
- Authority
- CN
- China
- Prior art keywords
- gateway
- service
- configuration file
- route
- routing configuration
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0803—Configuration setting
- H04L41/0813—Configuration setting characterised by the conditions triggering a change of settings
- H04L41/082—Configuration setting characterised by the conditions triggering a change of settings the condition being updates or upgrades of network functionality
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0876—Aspects of the degree of configuration automation
- H04L41/0886—Fully automatic configuration
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Automation & Control Theory (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种路由更新方法、装置、电子设备及计算机可读存储介质;方法包括:发送新的路由配置文件至代码管理工具仓库;触发所述代码管理工具仓库的网络钩子,以通过所述网络钩子将所述新的路由配置文件加载至服务注册与配置中心;监听针对所述服务注册与配置中心的路由配置文件的更新事件;基于所监听到的更新事件,将所述新的路由配置文件加载至网关中,以更新所述网关的路由配置。通过本发明,能够实现从新的路由配置文件发布到网关的路由配置更新全流程的自动化实现。
Description
技术领域
本发明涉及网络技术领域,尤其涉及一种路由更新方法、装置、电子设备及计算机可读存储介质。
背景技术
在微服务架构中,通常会有多个微服务提供者。例如在一个电商系统,可能会有商品、订单、支付、用户等多个类型的微服务。不同的微服务一般对应不同的网络地址。其中,网关作为这个电商系统的前置门户入口,客户端发送的所有调用服务请求首先通过网关,进行路径的路由,将服务请求定位到具体的微服务节点上进行处理。同时,电商系统内部的微服务也不是固定的,可能存在某些微服务的增加和删除,例如:新增了某个热门商品的微服务或者删除了某些冷门商品的微服务,因此,开发人员需要针对电商系统的实时运营情况提交新的路由配置文件。
然而,相关技术缺乏从新的路由配置文件发布到网关的路由配置更新全流程自动化实现的方案。
发明内容
本发明实施例提供一种路由更新方法、装置、电子设备及计算机可读存储介质,能够实现从新的路由配置文件发布到网关的路由配置更新全流程的自动化实现。
本发明实施例的技术方案是这样实现的:
本发明实施例提供一种路由更新方法,包括:
发送新的路由配置文件至代码管理工具仓库;
触发所述代码管理工具仓库的网络钩子,以通过所述网络钩子将所述新的路由配置文件加载至服务注册与配置中心;
监听针对所述服务注册与配置中心的路由配置文件的更新事件;
基于所监听到的更新事件,将所述新的路由配置文件加载至网关中,以更新所述网关的路由配置。
本发明实施例提供一种路由更新装置,包括:
发送模块,用于发送新的路由配置文件至代码管理工具仓库;
加载模块,用于触发所述代码管理工具仓库的网络钩子,以通过所述网络钩子将所述新的路由配置文件加载至服务注册与配置中心;
监听模块,用于监听针对所述服务注册与配置中心的路由配置文件的更新事件;
所述加载模块,还用于基于所监听到的更新事件,将所述新的路由配置文件加载至网关中,以更新所述网关的路由配置。
上述方案中,所述装置还包括注册模块,用于将所述网关的多个实例注册到所述服务注册与配置中心、以及将所述网关的路由配置文件保存至所述服务注册与配置中心。
上述方案中,所述监听模块,还用于调用可刷新的路由定位器接口,以
基于所述可刷新的路由定位器接口,监听针对所述服务注册与配置中心的路由配置文件的更新事件;
当监听到所述更新事件时,触发执行用于更新所述网关的路由配置的刷新函数。
上述方案中,所述装置还包括配置模块,用于为所述代码管理工具仓库配置所述网络钩子,且所述网络钩子指向所述服务注册与配置中心;
当所述代码管理工具仓库接收到推送指令时,触发所述代码管理工具仓库配置的网络钩子。
上述方案中,所述加载模块,还用于基于所触发的网络钩子执行脚本程序,以
将所述新的路由配置文件加载至所述服务注册与配置中心。
上述方案中,所述加载模块,还用于当监听到所述服务注册与配置中心的路由配置文件的更新事件时,触发执行用于更新所述网关的路由配置文件的刷新函数,以执行以下操作:
通过类加载程序将所述新的路由配置文件载入至所述网关的内存中,以使所述网关执行所述新的路由配置文件对应的网关路由配置。
上述方案中,所述装置还包括转发模块,用于当接收到客户端发送的调用服务请求时,将所述服务请求转发至更新后的网关路由配置对应的微服务实例上进行处理。
上述方案中,所述装置还包括检测模块,用于对发送所述服务请求的客户端的身份信息进行验证,或者对所述服务请求的头部进行检测;
当检测出所述服务请求为恶意请求时,忽略所述服务请求。
上述方案中,所述注册模块,还用于将多个微服务注册到所述服务注册与配置中心,以生成微服务列表;
当确定出所注册的多个微服务中存在发生异常的微服务时,从所述微服务列表中删除所述发生异常的微服务。
本发明实施例提供一种电子设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本发明实施例提供的路由更新方法。
本发明实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本发明实施例提供的路由更新方法。
本发明实施例具有以下有益效果:
结合了代码管理工具仓库的网络钩子和服务注册与配置中心,触发代码管理工具仓库的网络钩子自动将新的路由配置文件加载至服务注册与配置中心,当监听到更新事件时,通过将新的路由配置文件加载至网关中的方式自动更新网关的路由配置,从而实现了从新的路由配置文件发布到网关的路由配置更新全流程的自动化。
附图说明
图1是本发明实施例提供的路由更新系统的一个可选的架构示意图;
图2是本发明实施例提供的路由更新设备的一个可选的结构示意图;
图3是本发明实施例提供的路由更新方法的一个可选的前序步骤流程示意图;
图4是本发明实施例提供的路由更新方法的一个可选的流程示意图;
图5本发明实施例提供的具体实现类继承父类、并实现可刷新的路由定位器接口示意图;
图6是本发明实施例提供的路由更新方法的一个可选的流程示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,所描述的实施例不应视为对本发明的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。
对本发明实施例进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。
1)代码管理工具:用于代码版本管理和多用户并发修改管理等。相关技术中提供的代码管理工具包括:Git和Svn等。
其中,Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。在多人开发过程中,Git能够很好的管理代码,能够对代码历史进行追溯。
2)网络钩子(Web hook):通过自定义回调函数的方式来改变网络(Web)应用的一种行为。通过网络钩子,可以自定义一些行为通知到指定的统一资源定位符(URL,UniformResource Locator)。当请求数据完成后,网络钩子会通过用户设置的统一资源定位符将对应的请求数据响应给用户。
例如,当查询状态有更新,且触发了用户设置中的状态更新提醒时,系统会做出一个发布(POST)请求发送至用户在网络钩子页面自定义的回调URL上。
3)服务注册与配置中心:微服务架构中的基础设施,主要面向分布式、服务化的系统提供服务注册、服务发现和配置管理的功能。相关技术中提供的服务注册与配置中心包括:Consul、Zookeeper、Etcd和Euerka等。
其中,Consul是基于GO语言开发的开源工具,是一个服务网格解决方案,它是一个分布式的、高度可用的系统,而且开发使用都很简便。它提供了一个功能齐全的控制平面,包括:服务发现、健康检查、键值存储、安全服务通信和多数据中心等。
4)网关:又称网间连接器,是一个网络连接到另一个网络的“关口”。在微服务架构中,主要负责对客户端发送的调用服务请求进行权限控制、负载均衡、日志管理、接口调用监控等操作。相关技术中提供的网关包括:Zuul网关、Gateway网关和Nginx网关等。
其中,Zuul网关是Spring Cloud提供的微服务应用程序接口(API,ApplicationProgramming Interface)网关,所有从设备或者网站来的请求都会经过Zuul达到后端的微服务实例。作为一个边界性质的应用程序,Zuul网关提供了动态路由、监控、弹性负载和安全功能等。
发明人在实施本发明实施例的过程中发现,相关技术提供的方案在路由配置文件发生变化时,如果不重启服务,网关的路由配置是不会自动生效的。然而,通过重启服务来使网关的路由配置生效的方式,会在服务重启期间导致系统无法提供正常的业务服务。
对此,考虑结合服务注册与配置中心和代码管理工具的网络钩子来实现从新的路由配置文件发布到网关的路由配置更新全流程的自动化实现,故可以发送新的路由配置文件至代码管理工具仓库;触发代码管理工具仓库的网络钩子,以通过网络钩子将新的路由配置文件加载至服务注册与配置中心;监听针对服务注册与配置中心的路由配置文件的更新事件;基于所监听到的更新事件,将新的路由配置文件加载至网关中,以更新网关的路由配置。
鉴于此,本发明实施例提供一种路由更新方法、装置、电子设备和存储介质,能够实现从新的路由配置文件发布到网关的路由配置更新全流程的自动化实现。
下面说明本发明实施例提供的路由更新设备的示例性应用,本发明实施例提供的路由更新设备可以实施为服务器或服务器集群,也可以采用由用户终端和服务器协同的方式实施。下面,将说明路由更新设备实施为服务器时的示例性应用。
参见图1,图1是本发明实施例提供的路由更新系统的一个可选的架构示意图。如图1所示,路由更新系统包括代码管理工具仓库100、服务注册与配置中心200和网关300,代码管理工具仓库100和服务注册与配置中心200通过网络400进行连接,服务注册与配置中心200和网关300也通过网络400进行连接。其中,网络400可以是广域网或者局域网,又或者是两者的结合。
如图1所示,开发人员将新的路由配置文件提交至代码管理工具仓库100,触发代码管理工具仓库100的网络钩子,并基于所触发的网络钩子将新的路由配置文件加载至服务注册与配置中心200中。同时,网关300实时监听针对服务注册与配置中心200中的路由配置文件的更新事件,当监听到更新事件时,触发执行用于更新网关300的路由配置的刷新函数,将新的路由配置文件加载至网关300中,以更新网关300的路由配置。
参见图2,图2是本发明实施例提供的路由更新设备的结构示意图,图2所示的路由更新设备包括:至少一个处理器210、存储器250、至少一个网络接口220和用户接口230。路由更新设备中的各个组件通过总线系统240耦合在一起。可理解,总线系统240用于实现这些组件之间的连接通信。总线系统240除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统240。
处理器210可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口230包括使得能够呈现媒体内容的一个或多个输出装置231,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口230还包括一个或多个输入装置232,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器250可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器250可选地包括在物理位置上远离处理器210的一个或多个存储设备。
存储器250包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本发明实施例描述的存储器250旨在包括任意适合类型的存储器。
在一些实施例中,存储器250能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统251,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块252,用于经由一个或多个(有线或无线)网络接口220到达其他计算设备,示例性的网络接口220包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
呈现模块253,用于经由一个或多个与用户接口230相关联的输出装置231(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块254,用于对一个或多个来自一个或多个输入装置232之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本发明实施例提供的路由更新装置可以采用软件方式实现,图2示出了存储在存储器250中的路由更新装置255,其可以是程序和插件等形式的软件,包括以下软件模块:发送模块2551、加载模块2552、监听模块2553、注册模块2554、配置模块2555、转发模块2556和检测模块2557,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
在另一些实施例中,本发明实施例提供的路由更新装置可以采用硬件方式实现,作为示例,本发明实施例提供的路由更新装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本发明实施例提供的动态路由更新方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific IntegratedCircuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
下面将结合本发明实施例提供的路由更新设备实施为服务器时的示例性应用,说明本发明实施例提供的路由更新方法。
在一些实施例中,在执行本发明实施例提供的路由更新方法之前,还包括一些前序步骤。参见图3,图3是本发明实施例提供的路由更新方法的一个可选的前序步骤流程示意图,将结合图3示出的步骤进行说明。
在步骤S301中,服务器将网关的多个实例注册到服务注册与配置中心、以及将网关的路由配置文件也保存在服务注册与配置中心。
在一些实施例中,网关可以是Zuul网关、Gateway网关和Nginx网关等。其中,Zuul网关是一种基于Java语言实现的网关,具备限流、负载均衡、安全和认证、以及路由等功能,由Netflix开发,并由Spring Cloud引入集成。Gateway网关是另一种基于Java语言实现的网关,具备限流、负载均衡、安全和认证、以及路由等功能,性能优于Zuul网关,并且得到Spring Cloud更好的兼容和支持。Nginx网关是一种基于C语言实现的网关,具备负载均衡、限流等功能,但不能实现安全和认证。
服务注册与配置中心可以使用Consul、Zookeeper、Etcd和Euerka等。其中,Consul是基于GO语言开发的开源工具,主要面向分布式、服务化的系统提供服务注册、服务发现和配置管理的功能。Consul的主要功能包括:服务注册/发现、健康检查、键值存储、多数据中心和分布式一致性保证等。Zookeeper是一个开源的分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、分布式锁和分布式队列等功能。Etcd也是一个基于GO语言开发的开源工具,其目标是构建一个高可用的分布式键值数据库,内部采用Raft协议作为一致性算法,其主要应用于服务发现。
示例的,当网关是Zuul网关,且使用Consul作为服务注册与配置中心时,将Zuul网关的多个实例注册到Consul中,同时Zuul网关的路由配置也会保存在Consul中。这里,之所以在Consul中注册多个Zuul网关实例,是为了避免单点故障,由于网关非常重要,所以一般需要配置多个实例。
示例的,当网关是Zuul网关,且使用Zookeeper作为服务注册与配置中心时,将Zuul网关的多个实例注册到Zookeeper中,同时Zuul网关的路由配置也会保存在Zookeeper中。
在步骤S302中,网关调用可刷新的路由定位器接口,以基于可刷新的路由定位器接口,监听针对服务注册与配置中心的路由配置文件的更新事件;当监听到更新事件时,触发执行用于更新网关的路由配置的刷新函数。
示例的,以Zuul网关为例,Zuul网关默认的路由都是在配置文件里配置的,如果需要动态路由,需要实现可刷新的路由定位器接口RefreshableRouteLocator,并可以继承默认的实现SimpleRouteLocator,具体的实现类是MyRefreshableRouteLocator,实现动态路由的具体过程如下:
protected List<Route>getRoutes():此方法是加载路由配置的,父类SimpleRouteLocator中是获取配置文件中的路由配置的,可以通过扩展此方法,来达到动态获取路由配置的目的。这里,getRoutes()是一个抽象方法,其具体实现可以从数据库、服务注册与配置中心或者配置文件中获取路由配置,它的格式类似/api/server1/**192.168.1.12。扩展上述抽象方法的代码如下:
Public class
MyRefreshableRouteLocator extends SimpleRouteLocator(具体实现类继承父类)
implements RefreshableRouteLocator{protected List<Route>getRoutes()}(实现可刷新的路由定位器接口)
具体的实现类MyRefreshableRouteLocator继承了父类SimpleRouteLocator,并实现了可刷新的路由定位器接口RefreshableRouteLocator,因此,可以监听服务注册与配置中心的路由配置文件的更新事件,并在监听到更新事件时,触发执行用于更新网关的路由配置的刷新函数。
在步骤S303中,服务器为代码管理工具仓库配置网络钩子,且网络钩子指向服务注册与配置中心;当代码管理工具仓库接收到推送指令时,触发代码管理工具仓库配置的网络钩子。
示例的,以使用Git作为代码管理工具、使用Consul作为服务注册与配置中心为例,在创建好Git仓库后,为Git仓库配置网络钩子(Web hook),且该网络钩子指向服务注册与配置中心Consul。具体的,开发人员可以在Git的图形界面对应的Payload URL中输入服务注册与配置中心Consul所在的URL,并设置触发网络钩子的条件是当Git仓库接收到推送指令,如此,当在Git仓库接收到Git Push指令和新的路由配置文件时,会触发网络钩子(Web hook)回调,这个回调将执行一个将Git仓库中接收到的新的路由配置文件加载至服务注册与配置中心Consul的脚本。
参见图4,图4是本发明实施例提供的路由更新方法的一个可选的流程示意图,将结合图4示出的步骤进行说明。
在步骤S401中,服务器将开发人员提交的新的路由配置文件发送至代码管理工具仓库中。
在一些实施例中,当应用系统内部提供的微服务发生变化或者负载均衡的需要时,开发人员需要提交新的路由配置文件,以更新网关的路由配置。例如当电商系统中新增了某个热门商品的微服务或者下架了某些冷门商品的微服务时,开发人员需要根据电商系统实时的运营情况及时提交新的路由配置文件,以更新网关的路由配置,从而可以将客户端提交的调用服务请求转发至真实的微服务实例上进行处理。
示例的,以网关为Zuul网关,代码管理工具使用Git为例,当因为有新的微服务上线或者负载均衡的需要,开发人员提交了Zuul网关的新的路由配置文件,随后,服务器将Zuul网关的新的路由配置文件发送至Git代码仓库中。
在步骤S402中,触发代码管理工具仓库的网络钩子,以通过网络钩子将新的路由配置文件加载至服务注册与配置中心。
这里,由于在步骤S303中预先为代码管理工具仓库配置了网络钩子,且该网络钩子指向服务注册与配置中心,因此,当代码管理工具仓库接收到新的路由配置文件时,会触发代码管理工具的网络钩子,并通过所触发的网络钩子将新的路由配置文件加载至服务注册与配置中心。
示例的,以网关为Zuul网关、代码管理工具使用Git、服务注册与配置中心使用Consul为例,当Git仓库接收到开发人员提交的Zuul网关的新的路由配置文件和Git Push指令时,触发Git仓库的Web hook,基于所触发的Web hook使用脚本将Git仓库接收到的Zuul网关的新的路由配置文件加载到服务注册与配置中心Consul中。
在步骤S403中,网关监听针对服务注册与配置中心的路由配置文件的更新事件。
在步骤S404中,基于所监听到的更新事件,服务器将新的路由配置文件加载至网关中,以更新网关的路由配置。
这里,由于在步骤S302中网关预先调用了可刷新的路由定位器接口,因此,可以实现针对服务注册与配置中心的路由配置文件的更新事件的监听,且当监听到更新事件时,触发执行用于更新网关的路由配置的刷新函数,从而将新的路由配置文件加载至网关中,以更新网关的路由配置。
示例的,以网关为Zuul网关、服务注册与配置中心使用Consul为例,由于Zuul网关中具体实现MyRefreshableRouteLocator类的实例实现了可刷新的路由定位器接口RefreshableRouteLocator,因此,Zuul网关会监听服务注册与配置中心Consul中存储的路由配置文件的变化,且当监听到Consul中存储的路由配置文件发生变化时,执行刷新函数refresh(),以通过类加载程序将更新后的路由配置文件载入至Zuul网关的内存中,以使Zuul网关执行更新后的路由配置文件对应的网关路由配置。如此,当接收到客户端发送的调用服务请求时,该服务请求首先需要经过Zuul网关,由于Zuul网关获得了最新的路由配置,因此,可以将该服务请求转发至真实的微服务实例上进行处理。其中,服务请求包括查看商品、下单支付等。
在另一些实施例中,为了避免安全隐患,在接收到客户端发送的调用服务请求后,还可以对发送服务请求的客户端的身份信息进行验证,或者对服务请求的头部进行检测,以判断该服务请求是否为恶意请求,并在检测出该服务请求为恶意请求时,忽略该服务请求。
示例的,当Zuul网关接收到客户端发送的调用服务请求时,会对发送服务请求的客户端的身份信息进行验证,例如:对用户的签名、权限等信息进行校验,判断该用户是否具备调用相应服务的权限,当该用户不具备相应的权限时,忽略该服务请求。
示例的,当Zuul网关接收到客户端发送的调用服务请求时,会对服务请求的头部(http head)进行检测,判断该请求是否为与业务无关的通用请求,当确定该请求为与业务无关的通用请求时,忽略该服务请求。
在另一些实施例中,还可以将多个微服务也注册到服务注册与配置中心,以生成微服务列表。服务注册与配置中心会对所注册的多个微服务进行定期或者不定期的检测,当确定出所注册的多个微服务中存在发生异常的微服务时,从微服务列表中删除发生异常的微服务,从而保证了微服务的可用性。
下面继续说明本发明实施例提供的路由更新装置255实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器250的路由更新装置255中的软件模块可以包括:发送模块2551、加载模块2552、监听模块2553、注册模块2554、配置模块2555、转发模块2556和检测模块2557。
所述发送模块2551,用于发送新的路由配置文件至代码管理工具仓库;所述加载模块2552,用于触发所述代码管理工具仓库的网络钩子,以通过所述网络钩子将所述新的路由配置文件加载至服务注册与配置中心;所述监听模块2553,用于监听针对所述服务注册与配置中心的路由配置文件的更新事件;所述加载模块2552,还用于基于所监听到的更新事件,将所述新的路由配置文件加载至网关中,以更新所述网关的路由配置。
在一些实施例中,所述装置还包括注册模块2554,用于将所述网关的多个实例注册到所述服务注册与配置中心、以及将所述网关的路由配置文件保存至所述服务注册与配置中心。
在一些实施例中,所述监听模块2553,还用于调用可刷新的路由定位器接口,以基于所述可刷新的路由定位器接口,监听针对所述服务注册与配置中心的路由配置文件的更新事件;当监听到所述更新事件时,触发执行用于更新所述网关的路由配置的刷新函数。
在一些实施例中,所述装置还包括配置模块2555,用于为所述代码管理工具仓库配置所述网络钩子,且所述网络钩子指向所述服务注册与配置中心;当所述代码管理工具仓库接收到推送指令时,触发所述代码管理工具仓库配置的网络钩子。
在一些实施例中,所述加载模块2552,还用于基于所触发的网络钩子执行脚本程序,以将所述新的路由配置文件加载至所述服务注册与配置中心。
在一些实施例中,所述加载模块2552,还用于当监听到所述服务注册与配置中心的路由配置文件的更新事件时,触发执行用于更新所述网关的路由配置文件的刷新函数,以执行以下操作:通过类加载程序将所述新的路由配置文件载入至所述网关的内存中,以使所述网关执行所述新的路由配置文件对应的网关路由配置。
在一些实施例中,所述装置还包括转发模块2556,用于当接收到客户端发送的调用服务请求时,将所述服务请求转发至更新后的网关路由配置对应的微服务实例上进行处理。
在一些实施例中,所述装置还包括检测模块2557,用于对发送所述服务请求的客户端的身份信息进行验证,或者对所述服务请求的头部进行检测;当检测出所述服务请求为恶意请求时,忽略所述服务请求。
在一些实施例中,所述注册模块2554,还用于将多个微服务注册到所述服务注册与配置中心,以生成微服务列表;当确定出所注册的多个微服务中存在发生异常的微服务时,从所述微服务列表中删除所述发生异常的微服务。
需要说明的是,本发明实施例装置的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果,因此不做赘述。对于本发明实施例提供的路由更新装置中未尽的技术细节,可以根据图3-4、6任一附图的说明而理解。
下面,将说明本发明实施例在一个实际的应用场景中的示例性应用。
Zuul网关是Spring Cloud提供的微服务API网关,所有从设备或者网站来的服务请求都会经过Zuul网关到达后端的微服务实例上。作为一个边界性质的应用程序,Zuul网关提供了限流、负载均衡、安全和认证、以及路由等功能。Zuul网关底层利用各种过滤器(filter)实现如下功能:
认证和安全:识别每个需要认证的资源,拒绝不符合要求的请求;
性能监测:在服务边界追踪并统计数据,提供精确的生产视图;
负载卸载:预先为每种类型的请求分配容量,当请求超过容量时自动丢弃;
静态资源处理:直接在边界返回某些响应。
示例的,在电商系统中,客户端发送的调用服务请求(例如:订单、支付、用户等)首先需要经过Zuul网关,进行路径的路由,进而将服务请求定位到后台对应的微服务节点上进行处理。同时,电商系统提供的微服务也不是固定的,当有新的微服务上线或者旧的微服务下线(例如:新增了某个热门商品的微服务或者下架了某些冷门商品的微服务)时,需要修改Zuul网关的路由配置。
相关技术中,Zuul网关的路由配置在发生变更(一般是手动修改)后,如果不重启服务,路由是不会自动生效的。本发明实施例提供的路由更新方法,结合服务注册与配置中心Consul,使用Git的Web hook通知机制,实现了一种从代码(即路由配置文件)直接动态刷新Zuul网关路由配置的方案。
本发明实施例提供的路由更新方法解决了从版本发布后到Zuul网关的路由动态更新,实现从版本发布到Zuul网关的路由配置自动更新全流程的自动化。
Zuul网关动态路由刷新核心实现如下:
Zuul网关默认的路由都是在配置文件里配置的,如果需要动态路由,需要实现可刷新的路由定位器接口RefreshableRouteLocator,并可以继承默认的实现SimpleRouteLocator,具体的实现类是MyRefreshableRouteLocator,实现动态路由主要关注以下两个方法:
方法1:protected List<Route>getRoutes():此方法是加载路由配置的,父类SimpleRouteLocator中是获取配置文件中的路由配置的,可以通过扩展此方法,来达到动态获取路由配置的目的。
这里,getRoutes()是一个抽象方法,其具体实现可以从数据库、服务注册与配置中心Consul、或者配置文件中获取路由配置,它的格式类似/api/server1/**192.168.1.12。扩展上述抽象方法的代码如下:
Public class
MyRefreshableRouteLocator extends SimpleRouteLocator(具体实现类继承父类)
implements RefreshableRouteLocator{protected List<Route>getRoutes()}(实现可刷新的路由定位器接口)
如此,可以根据实际情况从数据库、服务注册与配置中心Consul、或者配置文件中获取路由配置,达到了动态获取路由配置的目的。
方法2:public Route getMatchingRoute(String path):此方法是根据客户端的访问路径URL,获取匹配的路由配置,父类SimpleRouteLocator中已经匹配到路由,可以通过路由ID查找自定义配置的路由规则,以达到根据自定义路由规则来实现动态分流的效果。
此方法是针对客户端的访问路径URL的,例如浏览器请求某个后台服务时就会触发,可以理解为和getRoutes()进行比较,确定客户端发送的调用服务请求应该分发到后台的哪个服务器进行处理。示例的,假设getRoutes()的路由配置是/api/users(用户)转发至后台服务器192.168.1.1,而/api/orders(订单)转发至后台服务器192.168.1.2,那么,当客户端请求/api/users时,就将该请求转发至192.168.1.1,而当客户端请求/api/orders时,就将该请求转发至192.168.1.2。当然,情况也可以更加复杂,例如/api/orders后可以挂多个服务器。示例的,假设/api/orders后挂了服务器192.168.1.2和服务器192.168.1.3,这个时候发现订单的请求压力较大,新增了一个服务器192.168.1.4,服务也部署好了,那么更新/api/orders的路由配置,增加了一个服务器192.168.1.4,如此,当接收到客户端发送的/api/orders时,后台就可以将其转发至192.168.1.2、192.168.1.3和192.168.1.4,从而实现了服务的动态扩容。
参见图5,图5是本发明实施例提供的具体实现类继承父类、并实现可刷新的路由定位器接口示意图。如图5所示,具体的实现类MyRefreshableRouteLocator继承了父类SimpleRouteLocator,并实现了可刷新的路由定位器接口RefreshableRouteLocator,如此,可以监听服务注册与配置中心Consul的路由配置文件的变化,并在监听到Consul中存储的路由配置文件发生更新时,触发执行刷新函数refresh()。
参见图6,图6是本发明实施例提供的路由更新方法的一个可选的流程示意图,将结合图6示出的步骤进行说明。
在一些实施例中,在执行图6示出的步骤之前,还包括一些初始化过程:
1)Zuul网关向服务注册与配置中心Consul注册多个实例,以实现高可用,同时Zuul网关的路由配置也会保存在服务注册与配置中心Consul中。Zuul网关的功能十分重要,因此,为了避免单点故障,需要注册多个实例。
2)如图5所示,具体实现MyRefreshableRouteLocator类的实例因为实现了可刷新的路由定位器接口RefreshableRouteLocator,会监听服务注册与配置中心Consul的路由配置文件的变化,执行刷新函数refresh()。
3)预先为Git仓库配置网络钩子(Web hook),当Zuul网关所在的Git仓库接收到Git Push指令时,触发Web hook回调,这个回调会执行一个将Git仓库里的Zuul网关的路由配置文件加载至服务注册与配置中心Consul的脚本。
如图6所示,Zuul网关动态路由更新实现的步骤如下:
1)当因为有新的微服务上线或者负载均衡的需要,修改了Zuul网关的路由配置,版本发布人员使用Git Push代码和提交Zuul网关的新的路由配置文件至Git仓库。
2)当Git仓库接收到Git Push指令时,触发Web hook事件。
3)基于所触发的Web hook,使用脚本将Zuul网关的新的路由配置文件加载至服务注册与配置中心Consul。
4)Zuul网关中具体实现MyRefreshableRouteLocator类的实例因为实现了可刷新的路由定位器接口RefreshableRouteLocator,会监听服务注册与配置中心Consul的路由配置文件的变化。
5)当监听到服务注册与配置中心Consul中存储的路由配置文件发生变化时,触发执行刷新函数refresh(),以刷新Zuul网关的路由配置(即将新的路由配置文件加载至Zuul网关中)。
示例的,仍以上述电商系统为例,利用本发明实施例提供的路由更新方法,实现了Zuul网关路由配置的自动更新,如此,当接收到客户端发送的调用服务请求(例如:访问某个新上线的商品)时,该服务请求首先经过Zuul网关,而Zuul网关此时已获得了最新的路由配置,因此可以将该服务请求转发至新上线的商品对应的服务器上进行处理。
本发明实施例提供的路由更新方法,当Zuul网关的路由配置发生变化时,不需要手动更新路由配置并重启服务,可以实现从版本发布到网关的路由自动更新全流程的自动化,降低了人为操作带来的风险,也提高了整个应用系统的健壮性和效率。
本发明实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本发明实施例提供的路由更新方法,例如,如图3-4、6示出的路由更新方法。
在一些实施例中,存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
综上所述,通过本发明实施例具有以下有益效果:
本发明实施例提供的路由更新方法,结合了代码管理工具仓库的网络钩子和服务注册与配置中心,当代码管理工具仓库接收到新的路由配置文件时,触发代码管理工具仓库的网络钩子自动将新的路由配置文件加载至服务注册与配置中心,同时,实施针对服务注册与配置中心的路由配置文件的更新事件的监听,当监听到更新事件时,将新的路由配置文件加载至网关中,以自动更新网关的路由配置,从而实现了从新的路由配置文件发布到网关的路由配置更新全流程的自动化。
以上所述,仅为本发明的实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本发明的保护范围之内。
Claims (11)
1.一种路由更新方法,其特征在于,所述方法包括:
发送新的路由配置文件至代码管理工具仓库;
触发所述代码管理工具仓库的网络钩子,以通过所述网络钩子将所述新的路由配置文件加载至服务注册与配置中心,其中,所述网络钩子指向所述服务注册与配置中心;
监听针对所述服务注册与配置中心的路由配置文件的更新事件;
当监听到所述更新事件时,触发执行用于更新网关的路由配置文件的刷新函数,以执行以下操作:
通过类加载程序将所述新的路由配置文件载入至所述网关中,以使所述网关执行所述新的路由配置文件对应的网关路由配置。
2.根据权利要求1所述的方法,其特征在于,发送新的路由配置文件之前,所述方法还包括:
将所述网关的多个实例注册到所述服务注册与配置中心、以及将所述网关的路由配置文件保存至所述服务注册与配置中心。
3.根据权利要求1所述的方法,其特征在于,发送新的路由配置文件之前,所述方法还包括:
调用可刷新的路由定位器接口,以
基于所述可刷新的路由定位器接口,监听针对所述服务注册与配置中心的路由配置文件的更新事件;
当监听到所述更新事件时,触发执行用于更新所述网关的路由配置的刷新函数。
4.根据权利要求1所述的方法,其特征在于,发送新的路由配置文件之前,所述方法还包括:
为所述代码管理工具仓库配置所述网络钩子;
所述触发所述代码管理工具仓库的网络钩子,包括:
当所述代码管理工具仓库接收到推送指令时,触发所述代码管理工具仓库配置的网络钩子。
5.根据权利要求4所述的方法,其特征在于,所述将所述新的路由配置文件加载至服务注册与配置中心,包括:
基于所触发的网络钩子执行脚本程序,以
将所述新的路由配置文件加载至所述服务注册与配置中心。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当接收到客户端发送的调用服务请求时,将所述服务请求转发至更新后的网关路由配置对应的微服务实例上进行处理。
7.根据权利要求6所述的方法,其特征在于,
在接收到所述客户端发送的调用服务请求后,所述方法还包括:
对发送所述服务请求的客户端的身份信息进行验证,或者对所述服务请求的头部进行检测;
当检测出所述服务请求为恶意请求时,忽略所述服务请求。
8.根据权利要求1至7任一项所述的方法,其特征在于,所述方法还包括:
将多个微服务注册到所述服务注册与配置中心,以生成微服务列表;
当确定出所注册的多个微服务中存在发生异常的微服务时,从所述微服务列表中删除所述发生异常的微服务。
9.一种路由更新装置,其特征在于,所述装置包括:
发送模块,用于发送新的路由配置文件至代码管理工具仓库;
加载模块,用于触发所述代码管理工具仓库的网络钩子,以通过所述网络钩子将所述新的路由配置文件加载至服务注册与配置中心,其中,所述网络钩子指向所述服务注册与配置中心;
监听模块,用于监听针对所述服务注册与配置中心的路由配置文件的更新事件;
所述加载模块,还用于当监听到所述更新事件时,触发执行用于更新网关的路由配置文件的刷新函数,以执行以下操作:通过类加载程序将所述新的路由配置文件载入至所述网关中,以使所述网关执行所述新的路由配置文件对应的网关路由配置。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可执行指令,其特征在于,所述处理器执行所述计算机可执行指令时实现权利要求1-8任一项所述的路由更新方法。
11.一种计算机可读存储介质,其上存储有计算机可执行指令,其特征在于,所述计算机可执行指令被处理器执行时实现权利要求1-8任一项所述的路由更新方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010106646.3A CN111314141B (zh) | 2020-02-21 | 2020-02-21 | 路由更新方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010106646.3A CN111314141B (zh) | 2020-02-21 | 2020-02-21 | 路由更新方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111314141A CN111314141A (zh) | 2020-06-19 |
CN111314141B true CN111314141B (zh) | 2023-01-06 |
Family
ID=71161899
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010106646.3A Active CN111314141B (zh) | 2020-02-21 | 2020-02-21 | 路由更新方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111314141B (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112118184B (zh) * | 2020-08-06 | 2022-06-03 | 北京健康之家科技有限公司 | 网关自动路由方法及装置、存储介质、计算机设备 |
CN112039780B (zh) * | 2020-09-01 | 2022-03-15 | 浪潮云信息技术股份公司 | 基于Zuul的持久化动态路由实现方法、电子设备及存储介质 |
CN112087333B (zh) * | 2020-09-07 | 2023-08-11 | 上海浦东发展银行股份有限公司 | 一种微服务注册中心集群及其信息处理方法 |
CN112260876B (zh) * | 2020-10-26 | 2022-08-16 | 欧冶云商股份有限公司 | 动态网关路由配置方法、平台、计算机设备及存储介质 |
CN112615786B (zh) * | 2020-12-04 | 2023-04-04 | 北京神州泰岳软件股份有限公司 | 路由确定方法、装置、电子设备及计算机可读存储介质 |
CN112565093A (zh) * | 2020-12-11 | 2021-03-26 | 山东大学 | 一种基于内存数据库实现微服务路由动态变更的方法、存储介质 |
CN112738184B (zh) * | 2020-12-24 | 2022-11-18 | 上海家睦网络科技有限公司 | 一种插件式动态注册分布式微服务网关系统 |
CN112804722A (zh) * | 2020-12-31 | 2021-05-14 | 浪潮云信息技术股份公司 | 一种微服务网关动态路由的实现方法 |
CN112905918A (zh) * | 2021-03-06 | 2021-06-04 | 上海数依数据科技有限公司 | 一种数据服务汇聚引擎及其管理方法 |
CN112636992B (zh) * | 2021-03-10 | 2021-06-22 | 腾讯科技(深圳)有限公司 | 一种动态路由方法、装置、设备及存储介质 |
CN113067725B (zh) * | 2021-03-12 | 2023-02-17 | 恩亿科(北京)数据科技有限公司 | 服务配置动态更新方法、系统、电子设备及可读存储介质 |
CN115150316A (zh) * | 2021-03-15 | 2022-10-04 | 上海博泰悦臻网络技术服务有限公司 | 基于动态路由的网关控制方法、装置、介质及网关设备 |
CN113079098B (zh) * | 2021-04-20 | 2023-04-07 | 北京沃东天骏信息技术有限公司 | 路由更新的方法、装置、设备和计算机可读介质 |
CN112965700B (zh) * | 2021-05-17 | 2021-08-20 | 太平金融科技服务(上海)有限公司 | 基于路由的微服务处理方法、装置、计算机设备和介质 |
CN113452617B (zh) * | 2021-06-24 | 2023-12-19 | 上海豹云网络信息服务有限公司 | 动态网关路由管理方法、装置及存储介质 |
CN113572689A (zh) * | 2021-09-24 | 2021-10-29 | 深圳市信润富联数字科技有限公司 | 微服务网关管理方法、系统、设备、可读存储介质及产品 |
CN114489754A (zh) * | 2021-12-24 | 2022-05-13 | 奇安信科技集团股份有限公司 | 可配置服务管理方法及装置 |
CN114567586A (zh) * | 2022-03-04 | 2022-05-31 | 中国农业银行股份有限公司 | 网关路由动态添加方法、装置、电子设备以及存储介质 |
CN114661325A (zh) * | 2022-03-14 | 2022-06-24 | 阿里巴巴(中国)有限公司 | 服务网格配置更新方法、装置、计算设备及介质 |
CN115514633A (zh) * | 2022-08-29 | 2022-12-23 | 中国电信股份有限公司 | Api网关的动态配置方法、装置,以及,电子设备 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140344323A1 (en) * | 2013-03-15 | 2014-11-20 | Reactor8 Inc. | State-based configuration management for distributed systems |
CN107688555A (zh) * | 2017-08-24 | 2018-02-13 | 无锡清华信息科学与技术国家实验室物联网技术中心 | 一种函数托管计算中依赖服务的通用提供方法 |
CN109639572B (zh) * | 2018-12-06 | 2021-01-26 | 网易(杭州)网络有限公司 | 路由管理方法、装置及微服务系统 |
CN110162405A (zh) * | 2019-05-31 | 2019-08-23 | 福建南威软件有限公司 | 一种自动服务发现与负载均衡的方法及系统 |
CN110708368A (zh) * | 2019-09-25 | 2020-01-17 | 北京计算机技术及应用研究所 | 一种基于路由分发的微前端系统和方法 |
-
2020
- 2020-02-21 CN CN202010106646.3A patent/CN111314141B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111314141A (zh) | 2020-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111314141B (zh) | 路由更新方法及装置 | |
US11842222B2 (en) | Using scripts to bootstrap applications with metadata from a template | |
US10334058B2 (en) | Matching and enforcing deployment pipeline configurations with live pipeline templates | |
US9253265B2 (en) | Hot pluggable extensions for access management system | |
CN112118565A (zh) | 多租户服务灰度发布方法、装置、计算机设备和存储介质 | |
US11561889B2 (en) | Orchestration for automated performance testing | |
CN112965700B (zh) | 基于路由的微服务处理方法、装置、计算机设备和介质 | |
US20190317736A1 (en) | State machine representation of a development environment deployment process | |
CN111355622A (zh) | 容器的业务监控方法、系统和计算机可读存储介质 | |
US9535666B2 (en) | Dynamic agent delivery | |
CN114168179B (zh) | 微服务管理方法、装置、计算机设备和存储介质 | |
CN109542470A (zh) | 配置、安装方法及配置装置 | |
US20230205657A1 (en) | Techniques for automated service monitoring and remediation in a distributed computing system | |
CN113726566A (zh) | 一种服务网关装置 | |
CN112925589B (zh) | 扩展接口的调用方法及装置 | |
CN113485927A (zh) | 一种测试数据生成方法、装置、设备及存储介质 | |
CN113296740A (zh) | 一种服务对象的处理方法、装置、设备和机器可读介质 | |
CN114237821B (zh) | Kubernetes容器集群的自发现方法、装置、电子设备及存储介质 | |
US11243755B1 (en) | Resource aware patching service | |
WO2022021850A1 (zh) | 一种服务实例部署方法、装置、电子设备和存储介质 | |
CN112583891B (zh) | 接口文档获取方法、装置和服务器 | |
CN113535544A (zh) | 一种待调试子应用运行方法、计算机设备以及装置 | |
CN112783757A (zh) | 测试系统、方法、计算机系统和计算机可读存储介质 | |
US11726776B2 (en) | Super-app extension discovery and configuration via source code management platform comments | |
CN112650509B (zh) | 应用安装包生成方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40024359 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |