灰度发布方法、网关拦截器及计算机可读存储介质与流程

文档序号:11628732阅读:301来源:国知局
本发明涉及程序发布领域,尤其涉及一种灰度发布方法、网关拦截器及计算机可读存储介质。
背景技术
::灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式,可以保证整体系统发布的稳定,在初始灰度的时候就可以发现、调整问题,从而保证问题影响度。例如,随着系统的发展,其对应的用户量也急剧上升,此时如果该系统需要上线新功能,并需要部分用户率先使用这个功能,查看用户的评价,而其余用户仍然使用旧版本;或者该功能不立即上线,在线上试运行一段时间,在查看没有bug,并稳定后在进行全面推广。现有灰度发布方式实现流程复杂。技术实现要素:本发明的主要目的在于提出一种灰度发布方法、网关拦截器及计算机可读存储介质,旨在降低现有灰度发布的实现流程。为实现上述目的,本发明提供的一种灰度发布方法,所述方法包括:接收客户端请求,从所述请求的请求头中解析出客户端信息;判断所述客户端信息是否符合分发规则;所述分发规则预先配置在网关拦截器中;若所述客户端信息不符合所述分发规则,将所述请求分发到原始版本应用对应的第一应用服务器;若所述客户端信息符合所述分发规则,将所述请求分发到更新版本应用对应的第二应用服务器。可选地,所述分发规则采用字符串形式,由关键字和变量组成;所述关键字表示符合分发条件的客户端信息,所述变量表示符合分发条件的客户端的范围。具体地,所述范围采用百分比形式或者采用集合形式。可选地,所述网关拦截器具体为具有lua脚本的nginx服务器;所述在网关拦截器中配置分发规则,包括:通过所述lua脚本,在所述nginx服务器中配置所述第一应用服务器和所述第二应用服务器的网络地址;向所述nginx服务器写入分发规则。具体地,所述将所述请求分发到原始版本应用对应的第一应用服务器,或者,所述将所述请求分发到更新版本应用对应的第二应用服务器,包括:根据所述第一应用服务器或所述第二应用服务器的网络地址,将所述请求分发到相应的应用服务器;所述应用服务器包括所述第一应用服务器和所述第二应用服务器。具体地,所述接收客户端请求,从所述请求的请求头中解析出客户端信息之前,还包括:在所述nginx服务器启动后,配置工作进程,由所述lua脚本根据预设抓取频率,定时抓取所述分发规则;所述判断所述客户端信息是否符合预先配置的分发规则,包括:在接收到客户端请求时,根据当前抓取的分发规则,判断所述客户端信息是否与所述关键字匹配,若不匹配,则判定所述客户端信息不符合所述分发规则;若匹配,则判断所述客户端信息是否处于所述变量中;若处于,则判定所述客户端信息符合所述分发规则;若不处于,则判定所述客户端信息不符合所述分发规则。具体地,所述由所述lua脚本根据预设抓取频率,定时抓取所述分发规则,还包括:当所述分发规则的数据存储量不大于预设存储阈值时,所述lua脚本将抓取的分发规则缓存到lua本地缓存。可选地,所述客户端信息为以下任意一种或多种:应用版本信息、应用的功能模块信息、用户信息、客户端所属地域信息和客户端中移动设备身份码信息。为实现上述目的,本发明还提出一种网关拦截器,所述网关拦截器包括存储器和处理器,所述存储器存储有灰度发布程序,所述处理器用于执行所述灰度发布程序,以实现如上任意一项所述灰度发布方法的步骤。此外,为实现上述目的,本发明还提出一种计算机可读存储介质,所述计算机可读存储介质存储有灰度发布程序;当所述有灰度发布程序被至少一个处理器执行时,导致所述至少一个处理器执行如上所述任意一项灰度发布方法的步骤。本发明提出的灰度发布方法、网关拦截器及计算机可读存储介质,通过在网关拦截器中配置分发规则,当接收客户端请求时,从所述请求的请求头中解析出客户端信息,通过网关拦截器根据分发规则和客户端请求信息,进行请求分发,因此实现流程简单,有效降低实现灰度发布所需占用的硬件资源;并且本发明分发精度高,可以精确定位分发的用户群。附图说明图1为本发明实施例中一种灰度发布方法的流程图;图2为本发明实施例中网关拦截器、应用服务器和客户端的布局示意图;图3为本发明实施例中一种灰度发布装置的结构示意图。本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。具体实施方式应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身没有特定的意义。因此,“模块”、“部件”或“单元”可以混合地使用。本发明实施例提供一种灰度发布方法,所述方法包括:s101,接收客户端请求,从所述请求的请求头中解析出客户端信息;s102,判断所述客户端信息是否符合分发规则;所述分发规则预先配置在网关拦截器中;s103,根据客户端信息和所述分发规则,将请求分发到相应的应用服务器;具体说,若所述客户端信息不符合所述分发规则,将所述请求分发到原始版本应用对应的第一应用服务器;若所述客户端信息符合所述分发规则,将所述请求分发到更新版本应用对应的第二应用服务器。本发明实施例中灰度发布方法,通过在网关拦截器中配置分发规则,当接收客户端请求时,从所述请求的请求头中解析出客户端信息,通过网关拦截器根据分发规则和客户端请求信息,进行请求分发,因此实现流程简单,有效降低实现灰度发布所需占用的硬件资源;并且本发明分发精度高,可以精确定位分发的用户群。在本发明实施例中,客户端可以以各种形式来实施。例如,本发明中描述的客户端可以包括诸如手机、平板电脑、笔记本电脑、掌上电脑、个人数字助理(personaldigitalassistant,pda)、便捷式媒体播放器(portablemediaplayer,pmp)、导航装置、可穿戴设备、智能手环、计步器等移动终端,以及诸如数字tv、台式计算机等固定终端。本发明实施例中应用可以是客户端中的一个应用程序,也可以是客户端系统应用。本发明实施例中网关拦截器可以采用服务器的形式实现。本发明实施例中请求可以采用web形式,请求头可以为http头。本发明实施例中原始版本可以是默认版本,属于所有用户可以访问的版本;更新版本可以是升级版本,属于待评价的版本,需要根据评价结果确定是否进行全面推广的版本。本发明实施例中所述客户端信息为以下任意一种或多种:应用版本信息、应用的功能模块信息、用户信息、客户端所属地域信息和客户端中移动设备身份码信息(imei)。其中应用版本信息可以是版本号、包名等等。用户信息可以是用户名、用户标识等等。地域信息可以是客户端所在地域的邮编、地域名缩写等等。本发明实施例中的分发规则可以根据目标用户信息进行设置。其中目标用户为应用的发布者确定的评价结果的反馈用户。例如:当前用户使用的apk(androidpackage,android安装包)有许多版本如3.1、3.2、4.1、4.2等,产品经理(应用的发布者之一)想要达到的效果是让使用4.0以上的用户可以使用新的服务,新的服务在更新版本中。此时,分发规则可以设置为key=version,value=4.0,然后写入到网关拦截器中。又如,产品经理想要达到的效果是让满足规定标识的客户端使用新的服务,新的服务在更新版本中。此时,分发规则可以设置为key=imei,value=(‘imei1’,’imei2’,’imei3’…..),然后写入到网关拦截器中。再如:产品经理想要达到的效果是让区域a的客户端使用新的服务,新的服务在更新版本中。此时,分发规则可以设置为key=area,value=bj,然后写入到网关拦截器中。也就是说,本发明实施例中灰度发布方法可以实现精准定位用户群分发,如根据手机imei(移动设备身份码信息)、手机apk版本、客户端信息等。在上述实施例的基础上,进一步提出上述实施例的变型实施例,在此需要说明的是,为了使描述简要,在各变型实施例中仅描述与上述实施例的不同之处。在本发明的一个实施例中,所述分发规则采用字符串形式,由关键字和变量组成;所述关键字表示符合分发条件的客户端信息,所述变量表示符合分发条件的客户端的范围。本发明实施例将分发规则采用字符串形式,提高分发过程的判断效率,有效降低判断的实现复杂度,从而提高网关拦截器的性能。其中关键字采用字符串key表示,变量采用value表示。例如:key=version,value=4.0。又如:key=imei,value=(‘imei1’,’imei2’,’imei3’…..)。再如:key=area,value=bj。bj为北京的英文缩写。在本发明实施例的一个具体实施方式中,所述范围可以采用百分比形式或者采用集合形式。在本发明的另一个实施例中,所述网关拦截器具体为具有lua脚本的nginx服务器;其中,nginx服务器是一款轻量级的web服务器/反向代理服务器及电子邮件(imap/pop3)代理服务器,并在一个bsd-like协议下发行。lua是一种轻量小巧的脚本语言,用标准c语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。本发明实施例基于nginx和lua搭建前端网关拦截器,可以有效提高灰度发布性能。其中,所述在网关拦截器中配置分发规则,包括:通过所述lua脚本,在所述nginx服务器中配置所述第一应用服务器和所述第二应用服务器的网络地址;向所述nginx服务器写入分发规则。在本发明实施例的另一个具体实施方式中,所述将所述请求分发到原始版本应用对应的第一应用服务器,或者,所述将所述请求分发到更新版本应用对应的第二应用服务器,包括:根据所述第一应用服务器或所述第二应用服务器的网络地址,将所述请求分发到相应的应用服务器;所述应用服务器包括所述第一应用服务器和所述第二应用服务器。其中网络地址可以是ip地址。在本发明实施例的又一个具体实施方式中,所述接收客户端请求,从所述请求的请求头中解析出客户端信息之前,还包括:在所述nginx服务器启动后,配置工作进程,由所述lua脚本根据预设抓取频率,定时抓取所述分发规则;所述判断所述客户端信息是否符合预先配置的分发规则,包括:在接收到客户端请求时,根据当前抓取的分发规则,判断所述客户端信息是否与所述关键字匹配,若不匹配,则判定所述客户端信息不符合所述分发规则;若匹配,则判断所述客户端信息是否属于所述变量;若属于,则判定所述客户端信息符合所述分发规则;若不属于,则判定所述客户端信息不符合所述分发规则。其中,所述由所述lua脚本根据预设抓取频率,定时抓取所述分发规则,还包括:当所述分发规则的数据存储量不大于预设存储阈值时,所述lua脚本将抓取的分发规则缓存到lua本地缓存。以下用一具体实施例详细描述本发明中灰度发布方法,包括:步骤1、在网关拦截器中配置默认的upstream和新的upstream。upstream是nginx中的一个专有名词即需要分发的应用所在服务的ip,其中默认的upstream为原始版本应用对应的应用服务器,新的upstream为更新版本应用对应的应用服务器。本步骤中,在网关拦截器的指定的配置文件中,配置默认和新的upstream;例如default_upstream,new_upstream。然后重启nginx服务器,在重启中lua脚本就读将这2个upstream值设置到全局变量中,待后续规则校验完毕后使用。其中,应用服务器、网关拦截器和客户端的布局如图2所示。步骤2、设置字符串形式的分发规则。往redis集群中写入分发规则,如当前用户使用的apk有许多版本如3.1、3.2、4.1、4.2等,产品经理想要达到的效果是让使用4.0以上的用户可以使用新的服务,然后我们就可以设置规则为key=version,value=4.0,然后写入到redis中。当然,本步骤中设置的分发规则也可以采用集合的形式,即也可以针对是数据量很大的情景下,如手机的imei,就可以将value设置成集合的形式,将几万个手机的imei信息到redis缓存中,也即是说分发规则设置为key=imei,value=(‘imei1’,’imei2’,’imei3’…..),从而可以讲分发规则以集合的形式存储到redis中。其中,redis属于nginx服务器中工具,具体redis是一个开源的使用ansic语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库,并提供多种语言的api。步骤3、根据预置抓取频率,定时抓取redis数据(即分发规则数据),更新到lua本地缓存中。启动nginx的时候,会配置工作进程,由lua定时抓取redis的数据,如果redis的数据量偏小(也就是说小于预置存储阈值),则将数据缓存到lua的本地缓存中,否则不做处理,本步骤中分发规则就属于数据量小的规则,可以缓存到lua的本地缓存中,这样会提高服务器的性能。当然,如步骤2中的集合形式的分发规则,由于数据量过大会导致前端网关拦截器性能下降,就不会被定时抓取任务抓取到lua的本地缓存中。步骤4、前端网关拦截器根据分发规则,进行分发请求。当网关拦截器收到客户端的响应时会解析用户的请求头信息,查看用户的请求头信息是否有对应的规则匹配的key和version,如果客户端没有上传此参数,则默认将此用户的请求分发的默认的upstream,即default_upstream;如果客户端上传的version的值为v3.1,则不符合规则设置中的4.0,即不合法,也会将请求转发到默认的upstream,即default_upstream;如果客户端上传的version的值为4.2,则符合4.0规则的匹配,则将此请求转发到新的upstream,即new_upstream。在本步骤中,当存储规则的缓存失效,宕机或者前端网关拦截器的逻辑处理失败,则前端网关拦截器将请求分发到更新版本应用对应的应用服务器。本发明具体实施例基于nginx和lua的前端网关拦截器,实现百分比分发应用版本;实现精准定位用户群分发,例如根据手机imei,手机apk版本,用户名等信息;可以精确到应用的某个功能;支持字符串匹配以及集合关系。如图3所示,本发明进一步提出一种网关拦截器,所述网关拦截器包括存储器和处理器,所述存储器存储有灰度发布程序,所述处理器用于执行所述灰度发布程序,以实现如上任意一实施例所述灰度发布方法的步骤。具体说,所述网关拦截器包括存储器和处理器,所述存储器存储有灰度发布程序,所述处理器用于执行所述灰度发布程序,以实现以下步骤:接收客户端请求,从所述请求的请求头中解析出客户端信息;判断所述客户端信息是否符合分发规则;所述分发规则预先配置在网关拦截器中;若所述客户端信息不符合所述分发规则,将所述请求分发到原始版本应用对应的第一应用服务器;若所述客户端信息符合所述分发规则,将所述请求分发到更新版本应用对应的第二应用服务器。本发明实施例通过在网关拦截器中配置分发规则,当接收客户端请求时,从所述请求的请求头中解析出客户端信息,通过网关拦截器根据分发规则和客户端请求信息,进行请求分发,因此实现流程简单,有效降低实现灰度发布所需占用的硬件资源;并且本发明分发精度高,可以精确定位分发的用户群。其中,所述客户端信息为以下任意一种或多种:应用版本信息、应用的功能模块信息、用户信息、客户端所属地域信息和客户端中移动设备身份码信息。当然本发明实施例中客户端信息并不限于以上信息。在本发明的一个实施例中,所述分发规则采用字符串形式,由关键字和变量组成;所述关键字表示符合分发条件的客户端信息,所述变量表示符合分发条件的客户端的范围。具体说,所述范围采用百分比形式或者采用集合形式。在本发明的另一个实施例中,所述网关拦截器具体为具有lua脚本的nginx服务器;所述在网关拦截器中配置分发规则,包括:通过所述lua脚本,在所述nginx服务器中配置所述第一应用服务器和所述第二应用服务器的网络地址;向所述nginx服务器写入分发规则。其中,所述将所述请求分发到原始版本应用对应的第一应用服务器,或者,所述将所述请求分发到更新版本应用对应的第二应用服务器,包括:根据所述第一应用服务器或所述第二应用服务器的网络地址,将所述请求分发到相应的应用服务器;所述应用服务器包括所述第一应用服务器和所述第二应用服务器。其中,所述接收客户端请求,从所述请求的请求头中解析出客户端信息之前,还包括:在所述nginx服务器启动后,配置工作进程,由所述lua脚本根据预设抓取频率,定时抓取所述分发规则;所述判断所述客户端信息是否符合预先配置的分发规则,包括:在接收到客户端请求时,根据当前抓取的分发规则,判断所述客户端信息是否与所述关键字匹配,若不匹配,则判定所述客户端信息不符合所述分发规则;若匹配,则判断所述客户端信息是否属于所述变量;若属于,则判定所述客户端信息符合所述分发规则;若不属于,则判定所述客户端信息不符合所述分发规则。其中,所述由所述lua脚本根据预设抓取频率,定时抓取所述分发规则,还包括:当所述分发规则的数据存储量不大于预设存储阈值时,所述lua脚本将抓取的分发规则缓存到lua本地缓存。在此需要说明的是,本发明中各网关拦截器在具体实现时,可以参阅上述的各方法实施例,其也具有各方法实施例的技术效果,在此不再赘述。本发明还提出一种计算机可读存储介质,所述计算机可读存储介质存储有灰度发布程序;当所述有灰度发布程序被至少一个处理器执行时,导致所述至少一个处理器执行上述方法实施例中任意一种灰度发布方法的步骤。具体说,所述计算机可读存储介质存储有灰度发布程序;当所述有灰度发布程序被至少一个处理器执行时,导致所述至少一个处理器执行以下步骤:接收客户端请求,从所述请求的请求头中解析出客户端信息;判断所述客户端信息是否符合分发规则;所述分发规则预先配置在网关拦截器中;若所述客户端信息不符合所述分发规则,将所述请求分发到原始版本应用对应的第一应用服务器;若所述客户端信息符合所述分发规则,将所述请求分发到更新版本应用对应的第二应用服务器。其中,所述客户端信息为以下任意一种或多种:应用版本信息、应用的功能模块信息、用户信息、客户端所属地域信息和客户端中移动设备身份码信息。当然本发明实施例中客户端信息并不限于以上信息。在本发明的一个实施例中,所述分发规则采用字符串形式,由关键字和变量组成;所述关键字表示符合分发条件的客户端信息,所述变量表示符合分发条件的客户端的范围。具体说,所述范围采用百分比形式或者采用集合形式。在本发明的另一个实施例中,所述网关拦截器具体为具有lua脚本的nginx服务器;所述在网关拦截器中配置分发规则,包括:通过所述lua脚本,在所述nginx服务器中配置所述第一应用服务器和所述第二应用服务器的网络地址;向所述nginx服务器写入分发规则。其中,所述将所述请求分发到原始版本应用对应的第一应用服务器,或者,所述将所述请求分发到更新版本应用对应的第二应用服务器,包括:根据所述第一应用服务器或所述第二应用服务器的网络地址,将所述请求分发到相应的应用服务器;所述应用服务器包括所述第一应用服务器和所述第二应用服务器。其中,所述接收客户端请求,从所述请求的请求头中解析出客户端信息之前,还包括:在所述nginx服务器启动后,配置工作进程,由所述lua脚本根据预设抓取频率,定时抓取所述分发规则;所述判断所述客户端信息是否符合预先配置的分发规则,包括:在接收到客户端请求时,根据当前抓取的分发规则,判断所述客户端信息是否与所述关键字匹配,若不匹配,则判定所述客户端信息不符合所述分发规则;若匹配,则判断所述客户端信息是否属于所述变量;若属于,则判定所述客户端信息符合所述分发规则;若不属于,则判定所述客户端信息不符合所述分发规则。其中,所述由所述lua脚本根据预设抓取频率,定时抓取所述分发规则,还包括:当所述分发规则的数据存储量不大于预设存储阈值时,所述lua脚本将抓取的分发规则缓存到lua本地缓存。本发明实施例中计算机可读存储介质可以是ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、移动硬盘、cd-rom或者本领域已知的任何其他形式的存储介质。可以将一种存储介质藕接至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息;或者该存储介质可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路中。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1