本发明涉及互联网技术领域,尤其涉及一种基于微服务灰度发布方法、装置、计算机设备及存储介质。
背景技术:
在互联网时代,应用的更新迭代速度越来越快,更新的频率也越来越频繁。目前,主流的应用更新方式是采用灰度发布,灰度发布包括a/b环境发布,a环境为正常生产环境,b环境是灰度环境(预演环境)。目前,现有的发布方式是新功能上线后先将新版本发布到b环境,然后采用nginx结合openresty的灰度发布方式进行灰度发布,但是该灰度发布方案还需要结合脚本实现,然而脚本比较复杂不容易调试,对运维要求较高。
技术实现要素:
本发明实施例提供了一种基于微服务灰度发布方法、装置、计算机设备及存储介质,旨在解决现有的灰度发布是通过脚本或配置文件来支持,操作繁琐复杂,灰度配置及运维的成本较高的问题。
第一方面,本发明实施例提供了一种基于微服务灰度发布方法,其包括:从注册中心获取最新的服务实例列表,其中,所述服务实例列表包括每个服务的灰度属性数据,所述最新的服务实例列表是由配置中心动态调整更新所述注册中心的服务实例列表得到;接收来自用户端的http请求,根据所述灰度属性数据判断所述http请求的服务是否为灰度服务,其中,所述灰度属性数据是用于识别灰度服务的规则;若所述http请求的服务为灰度服务,根据负载均衡策略将所述http请求的服务发送至对应的灰度服务地址;若所述http请求的服务不为灰度服务,根据负载均衡策略将所述http请求发送至对应的正式服务地址。
第二方面,本发明实施例还提供了一种基于微服务灰度发布装置,其包括:获取单元,用于从注册中心获取最新的服务实例列表,其中,所述服务实例列表包括每个服务的灰度属性数据,所述最新的服务实例列表是由配置中心动态调整更新所述注册中心的服务实例列表得到;判断单元,用于接收来自用户端的http请求,根据所述灰度属性数据判断所述http请求的服务是否为灰度服务,其中,所述灰度属性数据是用于识别灰度服务的规则;第一发送单元,用于若所述http请求的服务为灰度服务,根据负载均衡策略将所述http请求的服务发送至对应的灰度服务地址;第二发送单元,用于若所述http请求的服务不为灰度服务,根据负载均衡策略将所述http请求发送至对应的正式服务地址。
第三方面,本发明实施例还提供了一种计算机设备,其包括存储器及处理器,所述存储器上存储有计算机程序,所述处理器执行所述计算机程序时实现上述方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时可实现上述方法。
本发明实施例提供了一种基于微服务灰度发布方法、装置、计算机设备及存储介质。其中,所述方法包括:从注册中心获取最新的服务实例列表,其中,所述服务实例列表包括每个服务的灰度属性数据,所述最新的服务实例列表是由配置中心动态调整更新所述注册中心的服务实例列表得到;接收来自用户端的http请求,根据所述灰度属性数据判断所述http请求的服务是否为灰度服务,其中,所述灰度属性数据是用于识别灰度服务的规则;若所述http请求的服务为灰度服务,根据负载均衡策略将所述http请求的服务发送至对应的灰度服务地址;若所述http请求的服务不为灰度服务,根据负载均衡策略将所述http请求发送至对应的正式服务地址。本发明实施例由于从注册中心获取最新的服务实例列表,该服务实例列表中包括每个服务的灰度属性数据,根据灰度属性数据判断用户端的http请求是否为灰度服务,若是则根据负载均衡策略将该http请求发送至灰度服务地址,可实现实现动态的灰度策略调整,隔离不同版本的服务,互不影响,提高灰度发布的便捷性、灵活性,方便运维。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于微服务灰度发布方法的流程示意图;
图2为本发明实施例提供的基于微服务灰度发布方法的子流程示意图;
图3为本发明实施例提供的基于微服务灰度发布方法的子流程示意图;
图4为本发明实施例提供的基于微服务灰度发布方法的子流程示意图;
图5为本发明另一实施例提供的基于微服务灰度发布方法的流程示意图;
图6为本发明实施例提供的基于微服务灰度发布装置的示意性框图;
图7为本发明实施例提供的基于微服务灰度发布装置的具体单元的示意性框图;
图8为本发明实施例提供的基于微服务灰度发布装置的判断单元的示意性框图;
图9为本发明另一实施例提供的基于微服务灰度发布装置的示意性框图;以及
图10为本发明实施例提供的计算机设备的示意性框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
请参阅图1,图1为本发明实施例提供的基于微服务灰度发布方法的示意性流程图。以下首先对灰度发布与微服务进行简单解释。
灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行a/btesting,即让一部分用户继续用产品特性a,一部分用户开始用产品特性b,如果用户对b没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到b上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
微服务指的是将单一应用划分为一组小的服务,服务之间互相协调、配合,为用户提供最终价值的架构体系。而每个服务运行在独立的进程中,服务之间采用轻量级通信,并且每个服务都承载着独立的业务单元责任,能够被独立的部署和发布。微服务解决了单体应用项目过于臃肿、资源无法隔离以及无法灵活扩展等缺点。例如,对于一个产品规模较大的网上购物应用划分为订单模块、商品模块、支付模块以及用户模块等多个独立的服务。
本实施例提出的的一种基于微服务的灰度发布方法,应用于分流服务器中,实现灰度的动态调整,提高灰度发布的便捷性、灵活性,方便运维。具体过程如下。
图1是本发明实施例提供的基于微服务灰度发布方法的流程示意图。如图所示,该方法包括以下步骤s110-s140。
s110、从注册中心获取最新的服务实例列表,其中,所述服务实例列表包括每个服务的灰度属性数据,所述最新的服务实例列表是由配置中心动态调整更新所述注册中心的服务实例列表得到。
在一实施例中,注册中心指的是zookeeper,zookeeper是一个开源的分布式协调服务。注册中心中已预先注册了微服务中各个服务的实例,在服务实例列表中,预先配置好了各个服务的信息,例如,服务名称、服务地址以及灰度属性数据(metadata)等。当然可以理解的是,注册中心还可以是eurek、consul等其他的中间件。配置中心指的是用于统一管理微服务配置的工具,例如为,apollo、disconf、diamond以及springcloudconfig等。配置中心可动态调整服务实例列表,如修改灰度属性数据以调整灰度策略。灰度属性数据指的是对应服务的灰度规则,例如,userid,ip地址为甲地区,用户端为android等。测试人员根据实际需求操作配置中心动态调整灰度策略,例如,对a服务设置灰度属性数据开启灰度服务,对a服务删除灰度属性数据关闭灰度服务,对a服务修改灰度属性数据改变灰度发布规则。配置中心动态调整的配置实时更新到注册中心中,注册中心根据更新的配置对服务实例列表进行更新得到最新的服务实例列表。由此,即可从注册中心获取到最新的服务实例列表,从而根据最新的服务实例列表中的灰度属性数据实现灰度策略的动态调整。
在一实施例中,如图2所示,所述步骤s110可包括步骤s111-s113。
s111、接收来自所述注册中心的配置更新推送通知。
s112、从注册中心获取最新的服务实例列表。
s113、将所述最新的服务实例列表存储到本地中。
在一实施例中,为了保证灰度策略的动态调整,注册中心在更新完服务实例列表后,生成一个配置更新推送通知发送至分流服务器,分流服务器接收到配置更新推送通知后,通过调用irule接口重写获取有效服务实例列表的方法,通过重写该方法从注册中心获取到最新的服务实例列表。其中,irule是根据特定算法从服务列表中选取一个要访问的服务。在得到最新的服务实例列表之后,将最新的服务实例列表存储到本地中,后续使用时直接使用本地缓存的服务实例列表,而不需要重新发起请求到注册中心去获取,直到服务实例列表有更新,且在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置。需要说明的是,还可主动获取注册中心的服务实例列表,例如,可通过定时从注册中心获取,或者通过轮询的方式从注册中心获取,将获取到的服务实例列表与存储在本地的服务实例列表进行比对,若不一致则说明服务实例列表有更新,将所获取的服务实例列表替换掉本地的服务实例列表,从而得到最新的服务实例列表。
s120、接收来自用户端的http请求,根据所述灰度属性数据判断所述http请求的服务是否为灰度服务,其中,所述灰度属性数据是用于识别灰度服务的规则。
在一实施例中,用户端即用户使用微服务的终端,用户在用户终端中使用微服务,以使终端发起http请求。http请求指的是用户终端向微服务的服务器请求对资源的访问的请求信息,http请求由三部分组成:请求行、请求头和请求正文。通过灰度属性数据结合http请求的头部信息即可判断该http请求的服务是灰度服务还是正式服务,其主要原理是判断http请求的头部信息是否符合灰度属性数据中设定的灰度规则。其中,服务指的是微服务中划分的一子服务,灰度服务指的是该服务为灰度版本(新版本),与灰度服务相对的是正式服务,正式服务也即该服务的正式版本(旧版本)。
在一实施例中,如图3所示,所述步骤s120可包括步骤s121-s123。
s121、将所述http请求的头部信息与所述灰度属性数据进行匹配。
s122、若所述http请求的头部信息与所述灰度属性数据相匹配,则判定所述http请求的服务为灰度服务。
s123、若所述http请求的头部信息与所述灰度属性数据不匹配,则判定所述http请求的服务为正式服务。
在一实施例中,在接收到http请求之后,提取http请求的头部信息,将http请求的头部信息与灰度属性数据进行匹配。例如,从http请求中取头部信息标识为useragent,假设为android标识的,把服务实例列表中含有android的灰度属性数据的服务实例挑选出来,从而得到灰度服务。由此可知,http请求的头部信息与灰度属性数据相匹配,说明该http请求的服务为灰度服务,另外,http请求的头部信息与灰度属性数据不匹配,则说明该http请求的服务为与灰度服务相对的正式服务。
在另一实施例中,如图4所示,所述步骤s120可包括步骤s124-s126。
s124、将所述灰度属性数据作为关键字查询所述http请求的头部信息。
s125、若所述http请求的头部信息中存在所述灰度属性数据对应的值,则判定所述http请求的服务为灰度服务。
s126、若所述http请求的头部信息中不存在所述灰度属性数据对应的值,则判定所述http请求的服务为正式服务。
在一实施例中,判断http请求的服务是否为灰度服务还可以是另外一种方式,在接收到http请求之后,将灰度属性数据作为关键字(key)进行查询,查询http请求的头部信息中是否存在与该关键字相对应的值(value)。若该http请求的头部信息中存在与之对应的值,说明该http请求的服务为灰度服务,若该http请求的头部信息中不存在与之对应的值,说明该http请求的服务为与灰度服务相对的正式服务。需要说明的是,通过设置组合键值对实现的灰度规则可以实现多维度的灰度策略,例如,将value设置为android和ip地址为甲地区的组合,提高了灰度维度,灰度策略更加灵活。
s130、若所述http请求的服务为灰度服务,根据负载均衡策略将所述http请求的服务发送至对应的灰度服务地址。
在一实施例中,在得到所接收的http请求的服务为灰度服务后,通过ribbon实现灰度发布处理。ribbon是一种负载均衡工具,其可根据服务实例列表通过负载均衡算法选择合适的服务地址。由此,通过ribbon为该http请求的服务选择一个合适的服务地址,将该服务地址作为该http请求的服务的地址,也即灰度服务地址,将该http请求发送至该灰度服务地址,以使得该灰度服务地址响应http请求返回所请求的资源。由此,通过配置中心动态调整灰度策略,在不需要重启服务的情况下,即可满足将流量(http请求)引流到灰度服务。另外,还可设置灰度服务的权重,并非将所有灰度服务的请求都引流到灰度服务,可在引流时根据权重进行引流,将一部分的灰度服务引流到正常服务地址中,实现灵活的资源配置。
s140、若所述http请求的服务不为灰度服务,根据负载均衡策略将所述http请求发送至对应的正式服务地址。
在一实施例中,在得到所接收的http请求的服务不为灰度服务后,通过ribbon为该http请求的服务选择一个合适的服务地址,将该服务地址作为该http请求的服务的地址,也即正式服务地址,以使得该正式服务地址响应http请求返回所请求的资源。简单来说,就是当http请求的服务为灰度服务时,使http请求走灰度通道,当http请求的服务不为灰度服务是,使http请求走正式通道,从而实现灰度功能,将灰度通道作为测试环境,隔离出不同版本的服务,相互不影响。
在一实施例中,如图5所示,所述基于微服务灰度发布方法还包括:s150-s180。
s150、若所述http请求的服务处于灰度链上,通过过滤器获取所述http请求的头部信息。
s160、根据所述http请求的头部信息判断所述灰度链上的下一个服务是否为灰度服务。
s170、根据判断结果对所述http请求进行灰度发布处理。
s180、返回执行判断所述灰度链上的下一个服务是否为灰度服务,直至所述灰度链上的所有服务完成所述灰度发布。
在一实施例中,灰度链指的是用户端发起一个http请求,通常会伴随多个微服务中的子服务的调用,这样就会生成一条微服务灰度链。例如,当用户发起一个http请求时,首先到达首个a服务,然后分别对b服务和c服务进行调用。b服务处理完给a做出响应,但是c服务还需要和后端的d服务和e服务交互之后再返还给a服务,即c服务还需要调用d服务和e服务,之后再返还给a服务,最后由a服务来响应用户的请求。过滤器指的是filter,其用于拦截http请求以获取http请求的头部信息。
在http请求的服务发送到对应的灰度服务地址之后,若该http请求的服务是灰度链上的一个服务,那么则通过过滤器拦截该http请求的头部信息信息,然后在http请求调用灰度链上的下一个服务时,根据所拦截到的http请求的头部信息信息进行判断灰度链上的下一个服务是否为灰度服务,若是灰度服务则发送至灰度服务地址,若不是灰度服务则发送至正式服务地址。然后继续判断灰度链上的下一个服务是否为灰度服务,根据判断结果执行相应的灰度发布处理,直到灰度链上所有的服务的灰度处理执行完毕。其中,判断灰度链上的下一个服务是否为灰度服务的判断方法与上述步骤s120所述的判断方法相同,在此不在赘述。例如,灰度链为a调用b,b调用c,那么首先通过过滤器拦截http请求a服务时,http请求的头部信息,在服务a调用服务b时,将所拦截的http请求的头部信息与灰度属性数据相匹配,匹配成功则调用b的灰度服务,否则则调用b的正式服务,同理服务b调用服务c也一样。由此实现了整个灰度链的灰度服务。现有的服务请求当还有其他依赖服务时,还需要指定依赖服务的灰度地址,本实施例相对于现有的灰度链更加灵活便捷。
本发明实施例展示的基于微服务灰度发布方法通过从注册中心获取最新的服务实例列表,该服务实例列表中包括每个服务的灰度属性数据,根据灰度属性数据判断用户端的http请求是否为灰度服务,若是则根据负载均衡策略将该http请求发送至灰度服务地址,可实现实现动态的灰度策略调整,隔离不同版本的服务,互不影响,提高灰度发布的便捷性、灵活性,方便运维。
图6是本发明实施例提供的一种基于微服务灰度发布装置200的示意性框图。如图6所示,对应于以上基于微服务灰度发布方法,本发明还提供一种基于微服务灰度发布装置200。该基于微服务灰度发布装置200包括用于执行上述基于微服务灰度发布方法的单元,该装置可以被配置于服务器中。具体地,请参阅图6,该基于微服务灰度发布装置200包括获取单元210、判断单元220、第一发送单元230以及第二发送单元240。
获取单元210,用于从注册中心获取最新的服务实例列表,其中,所述服务实例列表包括每个服务的灰度属性数据,所述最新的服务实例列表是由配置中心动态调整更新所述注册中心的服务实例列表得到。
在一实施例中,如图7所示,所述获取单元210包括接收单元211、获取子单元212以及存储单元213。
接收单元211,用于接收来自所述注册中心的配置更新推送通知。
获取子单元212,用于从注册中心获取最新的服务实例列表。
存储单元213,用于将所述最新的服务实例列表存储到本地中。
判断单元220,用于接收来自用户端的http请求,根据所述灰度属性数据判断所述http请求的服务是否为灰度服务,其中,所述灰度属性数据是用于识别灰度服务的规则。
在一实施例中,如图7所示,所述判断单元220包括匹配单元221、第一判定单元222和第二判定单元223。
匹配单元221,用于将所述http请求的头部信息与所述灰度属性数据进行匹配。
第一判定单元222,用于若所述http请求的头部信息与所述灰度属性数据相匹配,则判定所述http请求的服务为灰度服务。
第二判定单元223,用于若所述http请求的头部信息与所述灰度属性数据不匹配,则判定所述http请求的服务为正式服务。
在一实施例中,如图8所示,所述判断单元220包括查询单元224、第三判定单元225以及第四判定单元226。
查询单元224,用于将所述灰度属性数据作为关键字查询所述http请求的头部信息。
第三判定单元225,用于若所述http请求的头部信息中存在所述灰度属性数据对应的值,则判定所述http请求的服务为灰度服务。
第四判定单元226,用于若所述http请求的头部信息中不存在所述灰度属性数据对应的值,则判定所述http请求的服务为正式服务。
第一发送单元230,用于若所述http请求的服务为灰度服务,根据负载均衡策略将所述http请求的服务发送至对应的灰度服务地址。
第二发送单元240,用于若所述http请求的服务不为灰度服务,根据负载均衡策略将所述http请求发送至对应的正式服务地址。
在一实施例中,如图9所示,所述基于微服务灰度发布装置200还包括第二获取单元250、第二判断单元260、发布单元270以及返回单元280。
第二获取单元250,用于若所述http请求的服务处于灰度链上,通过过滤器获取所述http请求的头部信息。
第二判断单元260,用于根据所述http请求的头部信息判断所述灰度链上的下一个服务是否为灰度服务。
发布单元270,用于根据判断结果对所述http请求进行灰度发布处理。
返回单元280,用于返回执行判断所述灰度链上的下一个服务是否为灰度服务,直至所述灰度链上的所有服务完成所述灰度发布。
需要说明的是,所属领域的技术人员可以清楚地了解到,上述基于微服务灰度发布装置装置200和各单元的具体实现过程,可以参考前述方法实施例中的相应描述,为了描述的方便和简洁,在此不再赘述。
上述基于微服务灰度发布装置可以实现为一种计算机程序的形式,该计算机程序可以在如图10所示的计算机设备上运行。
请参阅图10,图10是本申请实施例提供的一种计算机设备的示意性框图。该计算机设备500可以是服务器,其中,服务器可以是独立的服务器,也可以是多个服务器组成的服务器集群。
参阅图10,该计算机设备500包括通过系统总线501连接的处理器502、存储器和网络接口505,其中,存储器可以包括非易失性存储介质503和内存储器504。
该非易失性存储介质503可存储操作系统5031和计算机程序5032。该计算机程序5032包括程序指令,该程序指令被执行时,可使得处理器502执行一种基于微服务灰度发布方法。
该处理器502用于提供计算和控制能力,以支撑整个计算机设备500的运行。
该内存储器504为非易失性存储介质503中的计算机程序5032的运行提供环境,该计算机程序5032被处理器502执行时,可使得处理器502执行一种基于微服务灰度发布方法。
该网络接口505用于与其它设备进行网络通信。本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备500的限定,具体的计算机设备500可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
其中,所述处理器502用于运行存储在存储器中的计算机程序5032,以实现如下步骤:从注册中心获取最新的服务实例列表,其中,所述服务实例列表包括每个服务的灰度属性数据,所述最新的服务实例列表是由配置中心动态调整更新所述注册中心的服务实例列表得到;接收来自用户端的http请求,根据所述灰度属性数据判断所述http请求的服务是否为灰度服务,其中,所述灰度属性数据是用于识别灰度服务的规则;若所述http请求的服务为灰度服务,根据负载均衡策略将所述http请求的服务发送至对应的灰度服务地址;若所述http请求的服务不为灰度服务,根据负载均衡策略将所述http请求发送至对应的正式服务地址。
在一实施例中,处理器502在实现所述从注册中心获取最新的服务实例列表步骤时,具体实现如下步骤:接收来自所述注册中心的配置更新推送通知;从注册中心获取最新的服务实例列表;将所述最新的服务实例列表存储到本地中。
在一实施例中,处理器502在实现所述接收来自用户端的http请求,根据所述灰度属性数据判断所述http请求的服务是否为灰度服务,其中,所述灰度属性数据是用于识别灰度服务的规则步骤时,具体实现如下步骤:将所述http请求的头部信息与所述灰度属性数据进行匹配;若所述http请求的头部信息与所述灰度属性数据相匹配,则判定所述http请求的服务为灰度服务;若所述http请求的头部信息与所述灰度属性数据不匹配,则判定所述http请求的服务为正式服务。
在一实施例中,处理器502在实现所述接收来自用户端的http请求,根据所述灰度属性数据判断所述http请求的服务是否为灰度服务,其中,所述灰度属性数据是用于识别灰度服务的规则步骤时,具体实现如下步骤:将所述灰度属性数据作为关键字查询所述http请求的头部信息;若所述http请求的头部信息中存在所述灰度属性数据对应的值,则判定所述http请求的服务为灰度服务;若所述http请求的头部信息中不存在所述灰度属性数据对应的值,则判定所述http请求的服务为正式服务。
在一实施例中,处理器502在实现所述若所述http请求的服务为灰度服务,根据负载均衡策略将所述http请求的服务发送至对应的灰度服务地址步骤之后,还实现如下步骤:若所述http请求的服务处于灰度链上,通过过滤器获取所述http请求的头部信息;根据所述http请求的头部信息判断所述灰度链上的下一个服务是否为灰度服务;根据判断结果对所述http请求进行灰度发布处理;返回执行判断所述灰度链上的下一个服务是否为灰度服务,直至所述灰度链上的所有服务完成所述灰度发布。
应当理解,在本申请实施例中,处理器502可以是中央处理单元(centralprocessingunit,cpu),该处理器502还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
本领域普通技术人员可以理解的是实现上述实施例的方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成。该计算机程序包括程序指令,计算机程序可存储于一存储介质中,该存储介质为计算机可读存储介质。该程序指令被该计算机系统中的至少一个处理器执行,以实现上述方法的实施例的流程步骤。
因此,本发明还提供一种存储介质。该存储介质可以为计算机可读存储介质。该存储介质存储有计算机程序,其中计算机程序包括程序指令。该程序指令被处理器执行时使处理器执行如下步骤:从注册中心获取最新的服务实例列表,其中,所述服务实例列表包括每个服务的灰度属性数据,所述最新的服务实例列表是由配置中心动态调整更新所述注册中心的服务实例列表得到;接收来自用户端的http请求,根据所述灰度属性数据判断所述http请求的服务是否为灰度服务,其中,所述灰度属性数据是用于识别灰度服务的规则;若所述http请求的服务为灰度服务,根据负载均衡策略将所述http请求的服务发送至对应的灰度服务地址;若所述http请求的服务不为灰度服务,根据负载均衡策略将所述http请求发送至对应的正式服务地址。
在一实施例中,所述处理器在执行所述程序指令而实现所述从注册中心获取最新的服务实例列表步骤时,具体实现如下步骤:接收来自所述注册中心的配置更新推送通知;从注册中心获取最新的服务实例列表;将所述最新的服务实例列表存储到本地中。
在一实施例中,所述处理器在执行所述程序指令而实现所述接收来自用户端的http请求,根据所述灰度属性数据判断所述http请求的服务是否为灰度服务,其中,所述灰度属性数据是用于识别灰度服务的规则步骤时,具体实现如下步骤:将所述http请求的头部信息与所述灰度属性数据进行匹配;若所述http请求的头部信息与所述灰度属性数据相匹配,则判定所述http请求的服务为灰度服务;若所述http请求的头部信息与所述灰度属性数据不匹配,则判定所述http请求的服务为正式服务。
在一实施例中,所述处理器在执行所述程序指令而实现所述接收来自用户端的http请求,根据所述灰度属性数据判断所述http请求的服务是否为灰度服务,其中,所述灰度属性数据是用于识别灰度服务的规则步骤时,具体实现如下步骤:将所述灰度属性数据作为关键字查询所述http请求的头部信息;若所述http请求的头部信息中存在所述灰度属性数据对应的值,则判定所述http请求的服务为灰度服务;若所述http请求的头部信息中不存在所述灰度属性数据对应的值,则判定所述http请求的服务为正式服务。
在一实施例中,所述处理器在执行所述程序指令而实现所述若所述http请求的服务为灰度服务,根据负载均衡策略将所述http请求的服务发送至对应的灰度服务地址步骤之后,还实现如下步骤:若所述http请求的服务处于灰度链上,通过过滤器获取所述http请求的头部信息;根据所述http请求的头部信息判断所述灰度链上的下一个服务是否为灰度服务;根据判断结果对所述http请求进行灰度发布处理;返回执行判断所述灰度链上的下一个服务是否为灰度服务,直至所述灰度链上的所有服务完成所述灰度发布。
所述存储介质可以是u盘、移动硬盘、只读存储器(read-onlymemory,rom)、磁碟或者光盘等各种可以存储程序代码的计算机可读存储介质。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的。例如,各个单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
本发明实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。本发明实施例装置中的单元可以根据实际需要进行合并、划分和删减。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。
该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,终端,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。