CN113794705A - 基于TTL的多header链路灰度发布方法及系统 - Google Patents
基于TTL的多header链路灰度发布方法及系统 Download PDFInfo
- Publication number
- CN113794705A CN113794705A CN202111027255.3A CN202111027255A CN113794705A CN 113794705 A CN113794705 A CN 113794705A CN 202111027255 A CN202111027255 A CN 202111027255A CN 113794705 A CN113794705 A CN 113794705A
- Authority
- CN
- China
- Prior art keywords
- header
- ttl
- interceptor
- result
- http
- 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.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/133—Protocols for remote procedure calls [RPC]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了基于TTL的多header链路灰度发布方法及系统,所述方法包括:通过获得第一业务规则;配置第一header正则表达式;获得第一拦截结果;获得第一ttl的jar包;定义第二http拦截器;获得第二header传递的jar包;将所述第二header传递的jar包,加入到业务项目的pom依赖中,进行版本配置和灰度配置,获取第一发布结果;设置到k8s微服务的label中进行发布。解决了现有技术中存在无法精细化控制服务、实现并行灰度,且不支持通用协议,因此难以被复用的技术问题。达到了按需要精细化配置,同时满足并行灰度链路,且支持主流云原生环境默认的远程过程调用方式的技术效果。
Description
技术领域
本发明涉及计算机领域,尤其涉及基于TTL的多header链路灰度发布方法及系统。
背景技术
随着docker容器技术和kubernetes容器编排技术的发展,云原生的微服务也越来越多的被互联网和软件公司所采纳,同时使用istio来实现servicemesh已经成为一种主流趋势。
灰度发布是指将生产流量与待发布流量进行流量迁移的过程。现有以Nginx为代表的前端软负载灰度流量分发和以dubbo为代表的rpc灰度标签链路透明传递正常使用一个gray标签,以springcloud gateway为代表的服务框架灰度路由使用一个header头,但是对应一个链路规则,由配置中心维护该header头对应的链路规则id的映射关系以不同链路规则id对应的链路灰度配置。在实际的业务中往往存在一些场景需要对一些链路进行流量迁移的管理,istio目前只能满足针对单个微服务的灰度发布需求。
本申请发明人在实现本申请实施例中发明技术方案的过程中,发现上述技术至少存在如下技术问题:
现有技术中存在无法精细化控制是否需要调用gray标记的服务,无法实现并行灰度,且不支持通用的http和grpc协议,因此难以被不同框架复用的技术问题。
发明内容
有鉴于此,本申请实施例通过提供基于TTL的多header链路灰度发布方法及系统,所述方法包括:通过获得第一业务规则;根据所述第一业务规则配置第一header正则表达式;定义第一servlet拦截器,获得第一拦截指令,通过所述第一拦截指令,基于servlet进行微服务的http请求拦截,获得第一拦截结果;通过所述第一header正则表达式对所述第一拦截结果进行过滤,获得第一ttl的jar包,将所述第一ttl的jar包保存到ttl context中,设置第一上下文结果;定义第二http拦截器,将所述第一上下文结果设置到所述第二http拦截器的http请求header中;将所述第一servlet拦截器、所述第二http拦截器通过maven打包并上传至maven仓库,获得第二header传递的jar包;将所述第二header传递的jar包,加入到业务项目的pom依赖中,通过javaagent将所述第一ttl的jar包加入到启动命令中,进行版本配置和灰度配置,获取第一发布结果;将所述第一发布结果设置到k8s微服务的label中进行发布。解决了现有技术中存在无法精细化控制是否需要调用gray标记的服务,无法实现并行灰度,且不支持通用的http和grpc协议,因此难以被不同框架复用的技术问题。达到了按业务方需要精细化配置header组合,同时满足并行灰度链路的需求,且接入门槛低,支持主流云原生环境默认的http和grpc远程过程调用方式的技术效果。
鉴于上述问题,本申请实施例提供了基于TTL的多header链路灰度发布方法及系统。
第一方面,本申请提供了基于TTL的多header链路灰度发布方法,所述方法通过实现基于TTL的多header链路灰度发布系统,其中,所述方法包括:通过获得第一业务规则;根据所述第一业务规则配置第一header正则表达式;定义第一servlet拦截器,获得第一拦截指令,通过所述第一拦截指令,基于servlet进行微服务的http请求拦截,获得第一拦截结果;通过所述第一header正则表达式对所述第一拦截结果进行过滤,获得第一ttl的jar包,将所述第一ttl的jar包保存到ttl context中,设置第一上下文结果;定义第二http拦截器,将所述第一上下文结果设置到所述第二http拦截器的http请求header中;将所述第一servlet拦截器、所述第二http拦截器通过maven打包并上传至maven仓库,获得第二header传递的jar包;将所述第二header传递的jar包,加入到业务项目的pom依赖中,通过javaagent将所述第一ttl的jar包加入到启动命令中,进行版本配置和灰度配置,获取第一发布结果;将所述第一发布结果设置到k8s微服务的label中进行发布。
另一方面,本申请还提供了基于TTL的多header链路灰度发布系统,用于执行如第一方面所述的基于TTL的多header链路灰度发布方法,其中,所述系统包括:第一获得单元:所述第一获得单元用于获得第一业务规则;第一配置单元:所述第一配置单元用于根据所述第一业务规则配置第一header正则表达式;第二获得单元:所述第二获得单元用于定义第一servlet拦截器,获得第一拦截指令,通过所述第一拦截指令,基于servlet进行微服务的http请求拦截,获得第一拦截结果;第三获得单元:所述第三获得单元用于通过所述第一header正则表达式对所述第一拦截结果进行过滤,获得第一ttl的jar包,将所述第一ttl的jar包保存到ttl context中,设置第一上下文结果;第一开发单元:所述第一开发单元用于定义第二http拦截器,将所述第一上下文结果设置到所述第二http拦截器的http请求header中;第四获得单元:所述第四获得单元用于将所述第一servlet拦截器、所述第二http拦截器通过maven打包并上传至maven仓库,获得第二header传递的jar包;第五获得单元:所述第五获得单元用于将所述第二header传递的jar包,加入到业务项目的pom依赖中,通过javaagent将所述第一ttl的jar包加入到启动命令中,进行版本配置和灰度配置,获取第一发布结果;第一发布单元:所述第一发布单元用于将所述第一发布结果设置到k8s微服务的label中进行发布。
第三方面,本申请实施例还提供了基于TTL的多header链路灰度发布系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现上述第一方面所述方法的步骤。
本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
1.通过获得第一业务规则;根据所述第一业务规则配置第一header正则表达式;定义第一servlet拦截器,获得第一拦截指令,通过所述第一拦截指令,基于servlet进行微服务的http请求拦截,获得第一拦截结果;通过所述第一header正则表达式对所述第一拦截结果进行过滤,获得第一ttl的jar包,将所述第一ttl的jar包保存到ttl context中,设置第一上下文结果;定义第二http拦截器,将所述第一上下文结果设置到所述第二http拦截器的http请求header中;将所述第一servlet拦截器、所述第二http拦截器通过maven打包并上传至maven仓库,获得第二header传递的jar包;将所述第二header传递的jar包,加入到业务项目的pom依赖中,通过javaagent将所述第一ttl的jar包加入到启动命令中,进行版本配置和灰度配置,获取第一发布结果;将所述第一发布结果设置到k8s微服务的label中进行发布。达到了按业务方需要精细化配置header组合,同时满足并行灰度链路的需求,且接入门槛低,支持主流云原生环境默认的http和grpc远程过程调用方式的技术效果;
2.通过javaagent引入TransmittableThreadLocal,只需要增加header传递依赖包,不需要进行编码即可结合istio等灰度组件实现链路灰度功能,同时支持多应用灰度过程中同时启用header标签,header组合由业务方按需精细化配置,不会造成规则错乱,降低侵入性同时达到了并行灰度链路的技术效果;
3.通过使用TransmittableThreadLocal结合自定义resttemplate的拦截器和feign的拦截器,解决了线程池引入导致的header无法传递问题,实现了header跨异步线程传递的目的;
4.无需绑定技术栈,只需要可以进行header传递即可,且接入门槛低,支持主流的云原生环境方式,达到了不同框架复用的技术效果。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例基于TTL的多header链路灰度发布方法的流程示意图;
图2为本申请实施例基于TTL的多header链路灰度发布方法中定义第二http拦截器的方法的流程示意图;
图3为本申请实施例基于TTL的多header链路灰度发布方法中获取第一发布结果的方法的流程示意图;
图4为本申请实施例基于TTL的多header链路灰度发布系统的结构示意图;
图5为本申请实施例示例性电子设备的结构示意图。
附图标记说明:
第一获得单元11,第一配置单元12,第二获得单元13,第三获得单元14,第一开发单元15,第四获得单元16,第五获得单元17,第一发布单元18,总线300,接收器301,处理器302,发送器303,存储器304,总线接口305。
具体实施方式
本申请实施例通过提供基于TTL的多header链路灰度发布方法及系统,解决了现有技术中存在无法精细化控制是否需要调用gray标记的服务,无法实现并行灰度,且不支持通用的http和grpc协议,因此难以被不同框架复用的技术问题。达到了按业务方需要精细化配置header组合,同时满足并行灰度链路的需求,且接入门槛低,支持主流云原生环境默认的http和grpc远程过程调用方式的技术效果。
下面,将参考附图对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是本申请的全部实施例,应理解,本申请不受这里描述的示例实施例的限制。基于本申请的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部。
申请概述
随着docker容器技术和kubernetes容器编排技术的发展,云原生的微服务也越来越多的被互联网和软件公司所采纳,同时使用istio来实现servicemesh已经成为一种主流趋势。
灰度发布是指将生产流量与待发布流量进行流量迁移的过程。现有以Nginx为代表的前端软负载灰度流量分发和以dubbo为代表的rpc灰度标签链路透明传递正常使用一个gray标签,以springcloud gateway为代表的服务框架灰度路由使用一个header头,但是对应一个链路规则,由配置中心维护该header头对应的链路规则id的映射关系以不同链路规则id对应的链路灰度配置。在实际的业务中往往存在一些场景需要对一些链路进行流量迁移的管理,istio目前只能满足针对单个微服务的灰度发布需求。
现有技术中存在无法精细化控制是否需要调用gray标记的服务,无法实现并行灰度,且不支持通用的http和grpc协议,因此难以被不同框架复用的技术问题。
针对上述技术问题,本申请提供的技术方案总体思路如下:
本申请提供了基于TTL的多header链路灰度发布方法,所述方法应用于基于TTL的多header链路灰度发布系统,其中,所述方法包括:通过获得第一业务规则;根据所述第一业务规则配置第一header正则表达式;定义第一servlet拦截器,获得第一拦截指令,通过所述第一拦截指令,基于servlet进行微服务的http请求拦截,获得第一拦截结果;通过所述第一header正则表达式对所述第一拦截结果进行过滤,获得第一ttl的jar包,将所述第一ttl的jar包保存到ttl context中,设置第一上下文结果;定义第二http拦截器,将所述第一上下文结果设置到所述第二http拦截器的http请求header中;将所述第一servlet拦截器、所述第二http拦截器通过maven打包并上传至maven仓库,获得第二header传递的jar包;将所述第二header传递的jar包,加入到业务项目的pom依赖中,通过javaagent将所述第一ttl的jar包加入到启动命令中,进行版本配置和灰度配置,获取第一发布结果;将所述第一发布结果设置到k8s微服务的label中进行发布。
在介绍了本申请基本原理后,下面将结合说明书附图来具体介绍本申请的各种非限制性的实施方式。
实施例一
请参阅附图1所示,本申请实施例提供了基于TTL的多header链路灰度发布方法,其中,所述方法应用于基于TTL的多header链路灰度发布系统,所述方法具体包括如下步骤:
步骤S100:获得第一业务规则;
步骤S200:根据所述第一业务规则配置第一header正则表达式;
具体而言,所述TTL即TransmittableThreadLocal,是Alibaba开源的、用于解决“在使用线程池等会缓存线程的组件情况下传递ThreadLocal”问题的InheritableThreadLocal扩展。所述header意为标头,是服务器以http协议传html资料到浏览器前所送出的字串。所述基于TTL的多header链路灰度发布方法是一种利用本地可传输线程、利用多个标头实现灰度发布的方法。所述灰度发布是指将生产流量与待发布流量进行流量迁移的过程,通常指对一个服务进行流量迁移的管理。
所述业务规则即软件开发中的业务逻辑。所述第一业务规则是指任一用于所述基于TTL的多header链路灰度发布方法的软件开发逻辑,基于所述第一业务规则进行配置,得到所述第一header正则表达式。所述第一header正则表达式是指基于任一软件开发逻辑得到的header正则表达式。比如根据业务规则{start}_{version}配置得到header正则表达式{start}_{new-version}。所述正则表达式(Regular Expression,在代码中常简写为regex,regexp或RE)又称规则表达式,是计算机科学的一个概念,通常被用来检索、替换那些符合某个模式的文本。根据软件开发中的各业务逻辑,实现了各header正则表达式的建立。
步骤S300:通过所述自定义第一servlet拦截器,获得第一拦截指令,根据所述第一拦截指令,基于servlet进行微服务的http请求拦截,获取第一拦截结果;
步骤S400:通过所述第一header正则表达式对所述第一拦截结果进行过滤,将所述第一ttl的jar包保存到ttl context中,设置第一上下文结果;
步骤S500:通过开发自定义第二http拦截器,通过所述第一ttl的jar包获取所述第一上下文结果,设置到http请求header中;
具体而言,所述云原生(cloud native)是一种基于云的基础之上的软件架构思想,以及基于云进行软件开发实践的一组方法论。所述微服务即是一种云原生架构方法,其中单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成。所述servlet是Java Servlet的简称,是用Java写的服务器端程序,具有独立于平台和协议的特性,可运行于支持Java的应用服务器中。所述第一拦截指令由所述第一servlet拦截器发出,用于使用servlet程序对微服务发出的http请求进行拦截,其中,http请求是指从客户端到服务器端的请求消息。通过利用servlet程序对微服务的http请求进行拦截,得到相应拦截结果,即为所述第一拦截结果。进一步的,根据所述第一header正则表达式对所述第一拦截结果进行过滤处理,过滤后得到所述第一ttl的jar包,且系统自动保存所述第一ttl的jar包保存到ttl context中,通过所述第一ttl的jar包可以开发拦截器,用于在访问http之前获取过滤header,并设置上下文结果。
通过过滤拦截到的http请求,可以得到相应的过滤header,基于过滤header可对其他的http请求进行快速设置,实现了利用Java Servlet微服务的其他http请求的快速拦截。
步骤S600:将所述第一servlet拦截器、所述第二http拦截器通过maven打包并上传至maven仓库,获得第二header传递的jar包;
具体而言,所述maven仓库分为本地仓库和远程仓库。本地仓库就是用户自己电脑上的仓库,直接从本地获取;而远程仓库又包括私服和中央仓库,其中,私服是一种特殊的远程仓库,因为他是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的maven用户使用;中央仓库maven公司提高的最大的仓库,里面拥有最全的jar包资源。所述jar包资源是其他用户将已经写好的软件包文件进行打包得到的资源。将前边将所述第一servlet拦截器、所述第二http拦截器相关内容全部打包并上传至maven仓库,得到所述第二header传递的jar包。
通过将得到的所述将所述第一servlet拦截器、所述第二http拦截器上传至maven仓库,实现相关内容安全保存的同时方便了后续调用引入。
步骤S700:通过将所述第二header传递的jar包,加入到业务项目的pom依赖中,通过javaagent将所述第一ttl的jar包加入到启动命令中,进行版本配置和灰度配置,获取第一发布结果;
具体而言,所述javaagent是在JDK1.5以后,使用agent技术构建的独立于应用程序的代理程序,用来协助监测、运行甚至替换其他java上的程序。agent分为两种,一种是在主程序之前运行的agent,一种是在主程序之后运行的agent。通过javaagent引入所述第一jar包,根据所述引入结果获得第一预布置结果,进一步的,将所述第一预布置结果进行版本设置和灰度配置,获得所述第一布置结果。其中,所述版本设置即是指将version设置到k8s微服务的label中进行发布;所述灰度配置是指通过istio环境,对virtualservice和distinationalrule配置,指定不同的header对应不同的版本。通过在主程序之前运行的javaagent引入jar包,以及通过结合istio等灰度组件实现了链路灰度功能,完成了jar包在istio环境布置部署,实现降低系统侵入性的技术效果。
步骤S800:将所述第一发布结果设置到k8s微服务的label中进行发布。
具体而言,所述istio提供了一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,而不需要对服务的代码做任何改动。将所述第二header传递的jar包,加入到业务项目的pom依赖中,通过javaagent将所述第一ttl的jar包加入到启动命令中,进行版本配置和灰度配置,得到一个新的version,即所述第一发布结果。
进一步的,将所述第一布置结果设置到k8s微服务的label中进行发布。所述k8s即kubernetes,是google开源容器集群管理系统,用于容器集群的自动化部署,扩容和运维,可实现快速响应用户需求,快速且有预期的部署,快速扩展应用,无缝对接新应用,节省资源,优化硬件资原,容器编排。k8s在部署应用时会自动检查各个服务器的cpu与内存的使用量,同时会根据申请的cpu与内存资源,将服务部署到合适的服务器上。
仅需通过一个k8s环境,利用所述istio环境一次性实现部署,就可实现一个服务多个版本共存,达到了节约资源的技术效果。
进一步的,所述通过所述第一header正则表达式对所述第一拦截结果进行过滤,获得第一ttl的jar包,本申请实施例步骤S400还包括:
步骤S410:将所述第一ttl的jar包保存至TransmittableThreadLocal的context中。
具体而言,所述context即包括所述TransmittableThreadLocal环境的所有相关内容。达到了基于TransmittableThreadLocal的过滤header存储的技术效果。
进一步的,如附图2所示,所述通过所述第一过滤结果开发拦截器,本申请实施例步骤S500还包括:
步骤S510:获得所述context中的第一header正则表达式;
步骤S520:将所述第一header正则表达式设置到http的header中;
步骤S530:构建resttemplate的拦截器和feign的拦截器,基于所述resttemplate的拦截器和所述feign的拦截器对所述http进行拦截。
具体而言,首先从所述TransmittableThreadLocal的context中调取所述第一header正则表达式,并将其设置到http的header中,即在http请求访问之前,对其进行重置。所述resttemplate的拦截器是基于所述第一过滤结果自定义开发而得。所述resttemplate是从Spring3.0开始支持的一个HTTP请求工具,提供了常见的REST请求方案的模版。所述feign的拦截器同样基于所述第一过滤结果自定义开发。所述feign核心是通过一系列的封装和处理将以java注解的方式定义的远程调用API接口,最终转换成HTTP的请求形式,然后将HTTP的请求的响应结果,解码成JAVA Bean,方放回给调用者。所述resttemplate的拦截器和feign的拦截器实现了http请求的拦截。
进一步的,如附图3所示,所述通过所述第一jar包进行istio环境布置之前,本申请实施例步骤S700还包括:
步骤S710:将所述第二header传递的jar包引入工程中,进行文件的header正则表达式配置。
具体而言,在利用所述第一jar包进行istio环境布置前,首先需要将所述第二header传递的jar包引入工程中,并在配置文件中完成header正则表达式的配置。通过配置header正则表达式,为后续部署istio环境建立基础。
进一步的,如附图3所示,本申请实施例步骤S700还包括:
步骤S720:获得第一权重配置指令,通过所述第一权重配置指令对版本权重进行配置,根据权重配置结果获得所述第一发布结果;
具体而言,所述第一权重配置指令用于对版本权重进行配置更新灰度流量,通过istio配置服务不同的版本权重,新版本流量占比逐渐增加,从0%到100%,根据权重配置结果获得所述第一布置结果。通过权重判断得到了istio的高度配置。
进一步的,如附图3所示,本申请实施例步骤S700还包括:
步骤S730:获得第一验证指令,通过所述第一验证指令进行header验证。
具体而言,所述第一验证指令是指对header进行验证,测试使用新版本{start}_{new-version}的header访问新的应用,可以设置链路上的多个应用,实现了对新版本的校验。
综上所述,本申请实施例所提供的具有如下技术效果:
1.通过获得第一业务规则;根据所述第一业务规则配置第一header正则表达式;定义第一servlet拦截器,获得第一拦截指令,通过所述第一拦截指令,基于servlet进行微服务的http请求拦截,获得第一拦截结果;通过所述第一header正则表达式对所述第一拦截结果进行过滤,获得第一ttl的jar包,将所述第一ttl的jar包保存到ttl context中,设置第一上下文结果;定义第二http拦截器,将所述第一上下文结果设置到所述第二http拦截器的http请求header中;将所述第一servlet拦截器、所述第二http拦截器通过maven打包并上传至maven仓库,获得第二header传递的jar包;将所述第二header传递的jar包,加入到业务项目的pom依赖中,通过javaagent将所述第一ttl的jar包加入到启动命令中,进行版本配置和灰度配置,获取第一发布结果;将所述第一发布结果设置到k8s微服务的label中进行发布。达到了按业务方需要精细化配置header组合,同时满足并行灰度链路的需求,且接入门槛低,支持主流云原生环境默认的http和grpc远程过程调用方式的技术效果;
2.通过javaagent引入TransmittableThreadLocal,只需要增加header传递依赖包,不需要进行编码即可结合istio等灰度组件实现链路灰度功能,同时支持多应用灰度过程中同时启用header标签,header组合由业务方按需精细化配置,不会造成规则错乱,降低侵入性同时达到了并行灰度链路的技术效果;
3.通过使用TransmittableThreadLocal结合自定义resttemplate的拦截器和feign的拦截器,解决了线程池引入导致的header无法传递问题,实现了header跨异步线程传递的目的;
4.无需绑定技术栈,只需要可以进行header传递即可,且接入门槛低,支持主流的云原生环境方式,达到了不同框架复用的技术效果。
实施例二
基于与前述实施例中基于TTL的多header链路灰度发布方法,同样发明构思,本发明还提供了基于TTL的多header链路灰度发布系统,请参阅附图4,所述系统包括:
第一获得单元11:所述第一获得单元11用于获得第一业务规则;
第一配置单元12:所述第一配置单元12用于根据所述第一业务规则配置第一header正则表达式;
第二获得单元13:所述第二获得单元13用于定义第一servlet拦截器,获得第一拦截指令,通过所述第一拦截指令,基于servlet进行微服务的http请求拦截,获得第一拦截结果;
第三获得单元14:所述第三获得单元14用于通过所述第一header正则表达式对所述第一拦截结果进行过滤,获得第一ttl的jar包,将所述第一ttl的jar包保存到ttlcontext中,设置第一上下文结果;
第一开发单元15:所述第一开发单元15用于定义第二http拦截器,将所述第一上下文结果设置到所述第二http拦截器的http请求header中;
第四获得单元16:所述第四获得单元16用于将所述第一servlet拦截器、所述第二http拦截器通过maven打包并上传至maven仓库,获得第二header传递的jar包;
第五获得单元17:所述第五获得单元17用于将所述第二header传递的jar包,加入到业务项目的pom依赖中,通过javaagent将所述第一ttl的jar包加入到启动命令中,进行版本配置和灰度配置,获取第一发布结果;
第一发布单元18:所述第一发布单元18用于。
进一步的,所述系统还包括:
第一保存单元,所述第一保存单元用于将所述第一ttl的jar包保存至TransmittableThreadLocal的context中。
进一步的,所述系统还包括:
第六获得单元,所述第六获得单元用于获得所述context中的第一header正则表达式;
第一设置单元,所述第一设置单元用于将所述第一header正则表达式设置到http的header中;
第一构建单元,所述第一构建单元用于构建resttemplate的拦截器和feign的拦截器,基于所述resttemplate的拦截器和所述feign的拦截器对所述http进行拦截。
进一步的,所述系统还包括:
第一引入单元,所述第一引入单元用于将所述第二header传递的jar包引入工程中,进行文件的header正则表达式配置。
进一步的,所述系统还包括:
第七获得单元,所述第七获得单元用于获得第一权重配置指令,通过所述第一权重配置指令对版本权重进行配置,根据权重配置结果获得所述第一发布结果;
进一步的,所述系统还包括:
第八获得单元,所述第八获得单元用于获得第一验证指令,通过所述第一验证指令进行header验证。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,前述图1实施例一中的基于TTL的多header链路灰度发布方法和具体实例同样适用于本实施例的基于TTL的多header链路灰度发布系统,通过前述对基于TTL的多header链路灰度发布方法的详细描述,本领域技术人员可以清楚的知道本实施例中基于TTL的多header链路灰度发布系统,所以为了说明书的简洁,在此不再详述。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
示例性电子设备
下面参考图5来描述本申请实施例的电子设备。
图5图示了根据本申请实施例的电子设备的结构示意图。
基于与前述实施例中基于TTL的多header链路灰度发布方法的发明构思,本发明还提供基于TTL的多header链路灰度发布系统,其上存储有计算机程序,该程序被处理器执行时实现前文所述一种血液净化中心护理的应急预案方法的任一方法的步骤。
其中,在图5中,总线架构(用总线300来代表),总线300可以包括任意数量的互联的总线和桥,总线300将包括由处理器302代表的一个或多个处理器和存储器304代表的存储器的各种电路链接在一起。总线300还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口305在总线300和接收器301和发送器303之间提供接口。接收器301和发送器303可以是同一个元件,即收发机,提供用于在传输介质上与各种其他装置通信的单元。
处理器302负责管理总线300和通常的处理,而存储器304可以被用于存储处理器302在执行操作时所使用的数据。
本申请提供了基于TTL的多header链路灰度发布方法,所述方法应用于基于TTL的多header链路灰度发布系统,其中,所述方法包括:通过获得第一业务规则;根据所述第一业务规则配置第一header正则表达式;定义第一servlet拦截器,获得第一拦截指令,通过所述第一拦截指令,基于servlet进行微服务的http请求拦截,获得第一拦截结果;通过所述第一header正则表达式对所述第一拦截结果进行过滤,获得第一ttl的jar包,将所述第一ttl的jar包保存到ttl context中,设置第一上下文结果;定义第二http拦截器,将所述第一上下文结果设置到所述第二http拦截器的http请求header中;将所述第一servlet拦截器、所述第二http拦截器通过maven打包并上传至maven仓库,获得第二header传递的jar包;将所述第二header传递的jar包,加入到业务项目的pom依赖中,通过javaagent将所述第一ttl的jar包加入到启动命令中,进行版本配置和灰度配置,获取第一发布结果;将所述第一发布结果设置到k8s微服务的label中进行发布。解决了现有技术中存在无法精细化控制是否需要调用gray标记的服务,无法实现并行灰度,且不支持通用的http和grpc协议,因此难以被不同框架复用的技术问题。达到了按业务方需要精细化配置header组合,同时满足并行灰度链路的需求,且接入门槛低,支持主流云原生环境默认的http和grpc远程过程调用方式的技术效果。
本领域内的技术人员应明白,本申请的实施例可提供为方法、装置、或计算机程序产品。因此,本申请可采用完全软件实施例、完全硬件实施例、或结合软件和硬件方面实施例的形式。此外,本申请为可以在一个或多个包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。而所述的计算机可用存储介质包括但不限于:U盘、移动硬盘、只读存储器(Read-0nly Memory,简称ROM)、随机存取存储器(Random AccessMemory,简称RAM)、磁盘存储器、只读光盘(Compact Disc Read-Only Memory,简称CD-ROM)、光学存储器等各种可以存储程序代码的介质。
本发明是参照本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的系统。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令系统的制造品,该指令系统实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (8)
1.基于TTL的多header链路灰度发布方法,其中,所述方法包括:
获得第一业务规则;
根据所述第一业务规则配置第一header正则表达式;
定义第一servlet拦截器,获得第一拦截指令,通过所述第一拦截指令,基于servlet进行微服务的http请求拦截,获得第一拦截结果;
通过所述第一header正则表达式对所述第一拦截结果进行过滤,获得第一ttl的jar包,将所述第一ttl的jar包保存到ttl context中,设置第一上下文结果;
定义第二http拦截器,将所述第一上下文结果设置到所述第二http拦截器的http请求header中;
将所述第一servlet拦截器、所述第二http拦截器通过maven打包并上传至maven仓库,获得第二header传递的jar包;
将所述第二header传递的jar包,加入到业务项目的pom依赖中,通过javaagent将所述第一ttl的jar包加入到启动命令中,进行版本配置和灰度配置,获取第一发布结果;
将所述第一发布结果设置到k8s微服务的label中进行发布。
2.如权利要求1所述的方法,其中,所述通过所述第一header正则表达式对所述第一拦截结果进行过滤,获得第一ttl的jar包,还包括:
将所述第一ttl的jar包保存至TransmittableThreadLocal的context中。
3.如权利要求2所述的方法,其中,所述定义第二http拦截器,将所述第一上下文结果设置到所述第二http拦截器的http请求header中,还包括:
获得所述context中的第一header正则表达式;
将所述第一header正则表达式设置到http的header中;
构建resttemplate的拦截器和feign的拦截器,基于所述resttemplate的拦截器和所述feign的拦截器对所述http进行拦截。
4.如权利要求1所述的方法,其中,所述将所述第二header传递的jar包,加入到业务项目的pom依赖中之前,还包括:
将所述第二header传递的jar包引入工程中,进行文件的header正则表达式配置。
5.如权利要求1所述的方法,其中,所述方法还包括:
获得第一权重配置指令,通过所述第一权重配置指令对版本权重进行配置,根据权重配置结果获得所述第一发布结果。
6.如权利要求1所述的方法,其中,所述方法还包括:
获得第一验证指令,通过所述第一验证指令进行header验证。
7.基于TTL的多header链路灰度发布系统,其中,所述系统包括:
第一获得单元:所述第一获得单元用于获得第一业务规则;
第一配置单元:所述第一配置单元用于根据所述第一业务规则配置第一header正则表达式;
第二获得单元:所述第二获得单元用于定义第一servlet拦截器,获得第一拦截指令,通过所述第一拦截指令,基于servlet进行微服务的http请求拦截,获得第一拦截结果;
第三获得单元:所述第三获得单元用于通过所述第一header正则表达式对所述第一拦截结果进行过滤,获得第一ttl的jar包,将所述第一ttl的jar包保存到ttl context中,设置第一上下文结果;
第一开发单元:所述第一开发单元用于定义第二http拦截器,将所述第一上下文结果设置到所述第二http拦截器的http请求header中;
第四获得单元:所述第四获得单元用于将所述第一servlet拦截器、所述第二http拦截器通过maven打包并上传至maven仓库,获得第二header传递的jar包;
第五获得单元:所述第五获得单元用于将所述第二header传递的jar包,加入到业务项目的pom依赖中,通过javaagent将所述第一ttl的jar包加入到启动命令中,进行版本配置和灰度配置,获取第一发布结果;
第一发布单元:所述第一发布单元用于将所述第一发布结果设置到k8s微服务的label中进行发布。
8.基于TTL的多header链路灰度发布系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现权利要求1~6任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111027255.3A CN113794705B (zh) | 2021-09-02 | 2021-09-02 | 基于TTL的多header链路灰度发布方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111027255.3A CN113794705B (zh) | 2021-09-02 | 2021-09-02 | 基于TTL的多header链路灰度发布方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113794705A true CN113794705A (zh) | 2021-12-14 |
CN113794705B CN113794705B (zh) | 2023-08-04 |
Family
ID=79182523
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111027255.3A Active CN113794705B (zh) | 2021-09-02 | 2021-09-02 | 基于TTL的多header链路灰度发布方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113794705B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108647107A (zh) * | 2018-05-14 | 2018-10-12 | 浪潮软件集团有限公司 | 一种微服务开发框架的统一异常处理方法 |
CN108848092A (zh) * | 2018-06-20 | 2018-11-20 | 中国联合网络通信集团有限公司 | 基于调用链的微服务灰度发布的处理方法及装置 |
CN109976921A (zh) * | 2019-02-25 | 2019-07-05 | 青岛迅隆信息科技有限责任公司 | Rpc服务或消息的指定消费方法及装置、可存储介质和终端 |
CN111277643A (zh) * | 2020-01-18 | 2020-06-12 | 深圳市麦谷科技有限公司 | 一种http链路跟踪记录方法及系统 |
CN112153049A (zh) * | 2020-09-24 | 2020-12-29 | 绿盟科技集团股份有限公司 | 一种入侵检测方法及装置 |
CN112866333A (zh) * | 2020-12-28 | 2021-05-28 | 上海领健信息技术有限公司 | 基于云原生的微服务场景优化方法、系统、设备和介质 |
CN113055492A (zh) * | 2021-03-25 | 2021-06-29 | 深圳云之家网络有限公司 | 服务灰度链路的控制方法、装置、计算机设备和存储介质 |
-
2021
- 2021-09-02 CN CN202111027255.3A patent/CN113794705B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108647107A (zh) * | 2018-05-14 | 2018-10-12 | 浪潮软件集团有限公司 | 一种微服务开发框架的统一异常处理方法 |
CN108848092A (zh) * | 2018-06-20 | 2018-11-20 | 中国联合网络通信集团有限公司 | 基于调用链的微服务灰度发布的处理方法及装置 |
CN109976921A (zh) * | 2019-02-25 | 2019-07-05 | 青岛迅隆信息科技有限责任公司 | Rpc服务或消息的指定消费方法及装置、可存储介质和终端 |
CN111277643A (zh) * | 2020-01-18 | 2020-06-12 | 深圳市麦谷科技有限公司 | 一种http链路跟踪记录方法及系统 |
CN112153049A (zh) * | 2020-09-24 | 2020-12-29 | 绿盟科技集团股份有限公司 | 一种入侵检测方法及装置 |
CN112866333A (zh) * | 2020-12-28 | 2021-05-28 | 上海领健信息技术有限公司 | 基于云原生的微服务场景优化方法、系统、设备和介质 |
CN113055492A (zh) * | 2021-03-25 | 2021-06-29 | 深圳云之家网络有限公司 | 服务灰度链路的控制方法、装置、计算机设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
BK_ENGRAVER: ""Java Web Servlet、监听器、过滤器、拦截器 "", 《博客园》 * |
Also Published As
Publication number | Publication date |
---|---|
CN113794705B (zh) | 2023-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2673403C2 (ru) | Способ доступа к веб-узлам, устройство и система веб-узла | |
US10713034B2 (en) | Updating web resources | |
CN105979009B (zh) | 一种针对云应用容器的增加负载自动均衡方法 | |
US8332520B2 (en) | Web server for managing session and method thereof | |
US8516037B2 (en) | Methods for dynamic partitioning of applications in client-server environments | |
CN113014651B (zh) | 灰度发布方法、应用服务器及灰度发布系统 | |
US20140351807A1 (en) | Method and communication device for updating web application | |
CN108228282A (zh) | 用于网站页面加载的方法及装置 | |
CN104750487B (zh) | 一种移动终端app的开发方法及启动方法 | |
US20130311985A1 (en) | Updating Web Resources | |
CN105653933B (zh) | 插件加载方法及装置 | |
CN111258627A (zh) | 一种接口文档生成方法和装置 | |
CN100583043C (zh) | 提供共享Web模块的系统和方法 | |
CN111124617B (zh) | 区块链系统的创建方法和装置、存储介质及电子装置 | |
KR102112605B1 (ko) | 모바일 단말 및 모바일 단말의 네트워크 전송 제어 방법 | |
CN112615759B (zh) | 全链路压测组件、全链路压测方法及装置 | |
CN109104368B (zh) | 一种请求连接方法、装置、服务器及计算机可读存储介质 | |
Benedetto et al. | MobiCOP: a scalable and reliable mobile code offloading solution | |
CN110381058A (zh) | 基于全双工通信协议WebSocket的请求传输方法及装置 | |
CN116800616B (zh) | 虚拟化网络设备的管理方法及相关装置 | |
CN107547591A (zh) | 升级服务器、机顶盒、机顶盒升级文件下发方法及系统 | |
CN112818270A (zh) | 数据跨域传递方法、装置及计算机设备 | |
CN113794705A (zh) | 基于TTL的多header链路灰度发布方法及系统 | |
EP3748493B1 (en) | Method and device for downloading installation-free application | |
CN110071840A (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 | ||
CB02 | Change of applicant information |
Address after: 100000 floors 1-3, block a, global creative Plaza, No. 10, Furong street, Chaoyang District, Beijing Applicant after: Bairong Zhixin (Beijing) Technology Co.,Ltd. Address before: 100000 floors 1-3, block a, global creative Plaza, No. 10, Furong street, Chaoyang District, Beijing Applicant before: Bairong Zhixin (Beijing) credit investigation Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |