具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
图1示出了本发明第一实施例提供的微服务访问控制方法的流程示意图。该方法应用于灰度发布,且用于微服务系统,如图1所示,该微服务访问控制方法包括:
步骤S1,接收用户的访问请求;
具体地,用户需要进行访问时,发起访问请求,该访问请求包括:地址(URL)、标记信息(Cookie),该标记信息可以是1或0,还可以是其他标记,此处对此不作限制。
步骤S2,基于访问请求获取对应的服务名称及微服务系统当前的状态数据;
具体地,基于访问请求获取对应的服务名称及微服务系统当前的状态数据,该状态数据对应灰度发布的一个阶段;
步骤S3,从注册中心获取当前的服务实例列表;
具体地,从注册中心获取当前最新的服务实例列表,该服务实例列表包括至少一个灰度服务实例及非灰度服务实例。服务实例可以是服务器,同一服务名称对应若干服务实例,如服务A、B、C(A、B、C是功能性的划分,如比如A负责处理用户的登陆,B负责其他业务),服务A包括服务A1、A2等。
步骤S4,基于标记信息、当前的状态数据从当前服务实例列表中筛选出对应的服务实例;
具体地,基于标记信息、当前的状态数据从当前服务实例列表中筛选出对应的服务实例;
步骤S5,访问筛选的服务实例;
具体地,访问筛选的服务实例,即响应所述用户的访问请求,建立该用户与所筛选的服务实例之间的连接。
在本实施例中,根据微服务系统当前的状态数据从当前的服务实例列表中筛选对应的服务实例,无需修改配置,降低风险,提高访问效率。
在本实施例的一个优选方案中,该方法还可包括:
接收所述注册中心周期性发送的注册信息;
具体地,注册中心会周期性地上报注册信息,该注册信息包括:网络参数(IP:port)、服务名称(serviceID)、对应的标记(mark)、更新时间点(update time)。该上报周期可根据实际情况而设,如2分钟或者其他数值,此处对此不作限制。
在本实施例的一个优选方案中,该步骤S2具体包括:
从缓存中获取与所述地址对应的路由规则,从所述路由规则得到对应的服务名称;
具体地,从缓存中获取与所述地址对应的路由规则,从所述路由规则得到对应的服务名称,由于Redis缓存中存储有不同的路由规则,该路由规则是表示地址与服务名称之间的映射关系,一个服务名称对应一个地址,根据该地址可以在Redis缓存中找到对应的服务名称。
从缓存中获取微服务系统当前的状态数据;
具体地,该Redis缓存中还存储有微服务系统系统当前的状态数据,由于该微服务系统系统支持灰度发布,故每一状态数据对应该灰度发布的一阶段。
在本实施例的一个优选方案中,所述灰度发布包括三个阶段,分别为:全量非灰度模式、部分灰度模式及全量灰度模式,见图2,该步骤S3具体包括:
步骤S31,基于当前的状态数据确定灰度发布当前所处的阶段;
具体地,首先根据状态数据确定灰度发布当前所处的阶段;
步骤S32,选择与确定的阶段对应的服务实例列表,得到筛选的服务实例列表;
具体地,选择与确定的阶段对应的服务实例列表,得到筛选的服务实例列表,即根据确定的阶段选择对应的服务实例列表,得到筛选的服务实例列表。
在本实施例中,灰度发布的过程如下:
在全量非灰度(全量正常)模式到部分灰度模式时,一般用户(非灰度用户)和灰度测试用户的流量会由网关根据请求携带的标记信息分别路由到正常实例和灰度实例中;灰度实例发布完成后,测试人员通过使用灰度环境测试用户可以对灰度环境的实例进行测试;灰度环境测试完成后切换到全量灰度模式,在该模式下,所有的访问请求都会路由到当前灰度实例中,即此时的任何用户的访问请求都会以该服务实例列表中的灰度实例作为筛选对象;当正常实例发布完成后,转为全量正常模式,所有用户的请求都会被路由转发到对应服务名称的任何实例,即根据服务名称来选择服务实例。
基于上述灰度发布过程的模式,该步骤S32具体为:
当所述状态数据对应的阶段为全量非灰度模式时,以所述服务实例列表中的非灰度实例列表作为所述筛选的服务实例列表;或者
当所述状态数据对应的阶段为部分灰度模式时,从所述服务实例列表中选择与所述标记信息对应的服务实例,得到所述筛选的服务实例列表;或者
当所述状态数据对应的阶段为全灰度模式时,以所述服务实例列表中的所有灰度实例列表作为所述筛选的服务实例列表。
步骤S33,基于负载均衡策略从所筛选的服务实例列表中选择对应的服务实例;
具体地,基于负载均衡策略从所筛选的服务实例列表中选择对应的服务实例;该负载均衡策略可以是:轮询方式、指定权重方式或IP绑定ip_hash方式,轮询方式是基于访问请求的发起时间来分配服务实例;指定权重方式是指定轮询概率,该权重和访问比率成正比,用于后端服务器性能不均的情况;IP绑定ip_hash方式,ip_hash方式是指每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
在本实施例中,还可以根据服务实例的负载情况进行相应的扩容,如同一服务名称的服务实例的访问量较大,但当前的负载已经饱和,此时需要根据需要进行负载扩容,以满足访问需求。
在本实施例中,根据微服务系统当前的状态数据从当前的服务实例列表中筛选对应的服务实例,无需修改配置,降低风险,提高访问效率。
其次,根据负载均衡策略选择最终的服务实例,可根据实际情况选择最适合的服务实例,提高访问效率。
图3示出了本发明第二实施例的微服务访问装置的结构示意图。该装置包括:接收模块31、与接收模块31连接的第一获取模块32、与第一获取模块32连接的第二获取模块33、与第二获取模块33连接的筛选模块34、与筛选模块34连接的访问模块35,其中:
接收模块31,用于接收用户的访问请求;
具体地,用户需要进行访问时,发起访问请求,该访问请求包括:地址(URL)、标记信息(Cookie),该标记信息可以是1或0,还可以是其他标记,此处对此不作限制。
第一获取模块32,用于基于访问请求获取对应的服务名称及微服务系统当前的状态数据;
具体地,基于访问请求获取对应的服务名称及微服务系统当前的状态数据,该状态数据对应灰度发布的一个阶段;
第二获取模块33,用于从注册中心获取当前的服务实例列表;
具体地,从注册中心获取当前最新的服务实例列表,该服务实例列表包括至少一个灰度服务实例及非灰度服务实例。
筛选模块34,用于基于标记信息、当前的状态数据从当前服务实例列表中筛选出对应的服务实例;
具体地,基于标记信息、当前的状态数据从当前服务实例列表中筛选出对应的服务实例;
访问模块35,用于访问筛选的服务实例;
具体地,访问筛选的服务实例,即响应所述用户的访问请求,建立该用户与所筛选的服务实例之间的连接。
在本实施例中,根据微服务系统当前的状态数据从当前的服务实例列表中筛选对应的服务实例,无需修改配置,降低风险,提高访问效率。
在本实施例的一个优选方案中,该装置还包括:
接收模块,用于接收所述注册中心周期性发送的注册信息;
具体地,注册中心会周期性地上报注册信息,该注册信息包括:网络参数(IP:port)、服务名称(serviceID)、对应的标记(mark)、更新时间点(update time)。该上报周期可根据实际情况而设,如2分钟或者其他数值,此处对此不作限制。
在本实施例的一个优选方案中,该第一获取模块32具体用于:
从缓存中获取与所述地址对应的路由规则,从所述路由规则得到对应的服务名称;
具体地,从缓存中获取与所述地址对应的路由规则,从所述路由规则得到对应的服务名称,由于Redis缓存中存储有不同的路由规则,该路由规则是表示地址与服务名称之间的映射关系,一个服务名称对应一个地址,根据该地址可以在Redis缓存中找到对应的服务名称。
从缓存中获取微服务系统当前的状态数据;
具体地,该Redis缓存中还存储有微服务系统系统当前的状态数据,由于该微服务系统系统支持灰度发布,故每一状态数据对应该灰度发布的一阶段。
在本实施例的一个优选方案中,所述灰度发布包括三个阶段,分别为:全量非灰度模式、部分灰度模式及全量灰度模式,该第二获取模块33具体用于:
基于当前的状态数据确定灰度发布当前所处的阶段;
具体地,首先根据状态数据确定灰度发布当前所处的阶段;
选择与确定的阶段对应的服务实例列表,得到筛选的服务实例列表;
具体地,选择与确定的阶段对应的服务实例列表,得到筛选的服务实例列表,即根据确定的阶段选择对应的服务实例列表,得到筛选的服务实例列表。
在本实施例中,灰度发布的过程如下:
在全量非灰度(全量正常)模式到部分灰度模式时,一般用户(非灰度用户)和灰度测试用户的流量会由网关根据请求携带的标记信息分别路由到正常实例和灰度实例中;灰度实例发布完成后,测试人员通过使用灰度环境测试用户可以对灰度环境的实例进行测试;灰度环境测试完成后切换到全量灰度模式,在该模式下,所有的访问请求都会路由到当前灰度实例中,即此时的任何用户的访问请求都会以该服务实例列表中的灰度实例作为筛选对象;当正常实例发布完成后,转为全量正常模式,所有用户的请求都会被路由转发到对应服务名称的任何实例,即根据服务名称来选择服务实例。
筛选的过程如下:当所述状态数据对应的阶段为全量非灰度模式时,以所述服务实例列表中的非灰度实例列表作为所述筛选的服务实例列表;或者
当所述状态数据对应的阶段为部分灰度模式时,从所述服务实例列表中选择与所述标记信息对应的服务实例,得到所述筛选的服务实例列表;或者
当所述状态数据对应的阶段为全灰度模式时,以所述服务实例列表中的所有灰度实例列表作为所述筛选的服务实例列表。
基于负载均衡策略从所筛选的服务实例列表中选择对应的服务实例;
具体地,基于负载均衡策略从所筛选的服务实例列表中选择对应的服务实例;该负载均衡策略可以是:轮询方式、指定权重方式或IP绑定哈希的方式(即IP绑定ip_hash方式),轮询方式是基于访问请求的发起时间来分配服务实例;指定权重方式是指定轮询概率,该权重和访问比率成正比,用于后端服务器性能不均的情况;IP绑定ip_hash方式是指每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
在本实施例中,还可以根据服务实例的负载情况进行相应的扩容,如同一服务名称的服务实例的访问量较大,但当前的负载已经饱和,此时需要根据需要进行负载扩容,以满足访问需求。
在本实施例中,根据微服务系统当前的状态数据从当前的服务实例列表中筛选对应的服务实例,无需修改配置,降低风险,提高访问效率。
其次,根据负载均衡策略选择最终的服务实例,可根据实际情况选择最适合的服务实例,提高访问效率。
本发明第三实施例还提供了一种微服务系统,如图4所示,该微服务系统包括:缓存41、与缓存41连接的微服务访问控制装置42、与所述微服务访问控制装置42连接的注册中心43,其中:微服务访问控制装置42可以是网关,该缓存器41为Redis缓存,存储有多个路由规则(服务名称与地址的对应关系)及状态数据(即转发模式配置信息),该状态数据可以实时更新,如该微服务系统状态变换时会更新对应的状态数据。该注册中心43包括服务实例列表,该服务实例列表包括若干服务实例。该微服务访问控制装置42的具体结构、工作原理及所带来的技术效果与上述实施例2所述的描述的一致,此处不再赘述。下面简述该微服务系统的工作原理:
微服务系统访问控制装置42接收用户的访问请求,该微服务系统访问控制装置42从Redis缓存41中获取与该访问请求对应的路由规则,从路由规则中获取对应的服务名称,然后从Redis缓存41中获取微服务系统当前的状态数据,该微服务访问控制装置42从注册中心43中获取当前的服务实例列表,根据所述状态数据确定所述灰度发布当前所处的阶段,然后根据确定的阶段选择与所述确定的阶段对应的服务实例列表,得到筛选的服务实例列表,然后基于负载均衡策略从所筛选的服务实例列表中选择对应的服务实例,建立用户与服务实例之间的连接,实现访问目的。
在本实施例中,根据微服务系统当前的状态数据从当前的服务实例列表中筛选对应的服务实例,无需修改配置,降低风险,提高访问效率。
本发明第四实施例还提供了一种计算机存储介质,所述计算机存储介质包括存储在计算机存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述第一实施例中的微服务访问控制方法。
可执行指令具体可以用于使得处理器执行以下操作:
接收用户的访问请求,所述访问请求携带标记信息;
基于所述访问请求获取对应的服务名称及微服务系统当前的状态数据,所述状态数据对应灰度发布的阶段;
从注册中心获取当前的服务实例列表;
基于所述标记信息、当前的状态数据从所述当前服务实例列表中筛选出对应的服务实例;
访问所述筛选的服务实例。
在一种可选的方式中,所述访问请求还包括对应的地址,所述可执行指令使所述处理器执行以下操作:
从缓存中获取与所述地址对应的路由规则,从所述路由规则得到对应的服务名称;
从所述缓存中获取所述微服务系统当前的状态数据。
在一种可选的方式中,所述可执行指令使所述处理器执行以下操作:
基于所述当前的状态数据确定所述灰度发布当前所处的阶段;
选择与所述确定的阶段对应的服务实例列表,得到筛选的服务实例列表;
基于负载均衡策略从所筛选的服务实例列表中选择对应的服务实例。
在一种可选的方式中,所述灰度发布包括三个阶段,分别为:全量非灰度模式、部分灰度模式及全量灰度模式,所述可执行指令使所述处理器执行以下操作:
当所述状态数据对应的阶段为全量非灰度模式时,以所述服务实例列表中的非灰度实例列表作为所述筛选的服务实例列表;或者
当所述状态数据对应的阶段为部分灰度模式时,从所述服务实例列表中选择与所述标记信息对应的服务实例,得到所述筛选的服务实例列表;或者
当所述状态数据对应的阶段为全灰度模式时,以所述服务实例列表中的所有灰度实例列表作为所述筛选的服务实例列表。
在一种可选的方式中,所述负载均衡策略包括轮询方式,所述轮询方式具体为:基于访问请求的发起时间来分配服务实例。
在一种可选的方式中,所述可执行指令使所述处理器执行以下操作:
接收所述注册中心周期性发送的注册信息,所述注册信息包括:网络参数、服务名称、对应的标记、更新时间点。
图5示出了本发明第五实施例的设备的结构示意图,本发明具体实施例并不对设备的具体实现做限定。
如图5所示,该设备可以包括:处理器(processor)502、通信接口(CommunicationsInterface)504、存储器(memory)506、以及通信总线508。
其中:处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。处理器502,用于执行程序510,具体可以执行上述第一实施例中的微服务访问控制方法的相关步骤。
具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。
处理器502可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器506,用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序510具体可以用于使得处理器502执行以下操作:
接收用户的访问请求,所述访问请求携带标记信息;
基于所述访问请求获取对应的服务名称及微服务系统当前的状态数据,所述状态数据对应灰度发布的阶段;
从注册中心获取当前的服务实例列表;
基于所述标记信息、当前的状态数据从所述当前服务实例列表中筛选出对应的服务实例;
访问所述筛选的服务实例。
在一种可选的方式中,所述访问请求还包括对应的地址,所述程序510使所述处理器502执行以下操作:
从缓存中获取与所述地址对应的路由规则,从所述路由规则得到对应的服务名称;
从所述缓存中获取所述微服务系统当前的状态数据。
在一种可选的方式中,所述程序510使所述处理器502执行以下操作:
基于所述当前的状态数据确定所述灰度发布当前所处的阶段;
选择与所述确定的阶段对应的服务实例列表,得到筛选的服务实例列表;
基于负载均衡策略从所筛选的服务实例列表中选择对应的服务实例。
在一种可选的方式中,所述灰度发布包括三个阶段,分别为:全量非灰度模式、部分灰度模式及全量灰度模式,所述程序510使所述处理器502执行以下操作:
当所述状态数据对应的阶段为全量非灰度模式时,以所述服务实例列表中的非灰度实例列表作为所述筛选的服务实例列表;或者
当所述状态数据对应的阶段为部分灰度模式时,从所述服务实例列表中选择与所述标记信息对应的服务实例,得到所述筛选的服务实例列表;或者
当所述状态数据对应的阶段为全灰度模式时,以所述服务实例列表中的所有灰度实例列表作为所述筛选的服务实例列表。
在一种可选的方式中,所述负载均衡策略包括轮询方式,所述轮询方式具体为:基于访问请求的发起时间来分配服务实例。
在一种可选的方式中,所述程序510使所述处理器502执行以下操作:
接收所述注册中心周期性发送的注册信息,所述注册信息包括:网络参数、服务名称、对应的标记、更新时间点。
在本发明中,根据微服务系统当前的状态数据从当前的服务实例列表中筛选对应的服务实例,无需修改配置,降低风险,提高访问效率。
其次,根据负载均衡策略选择最终的服务实例,可根据实际情况选择最适合的服务实例,提高访问效率。
在此提供的算法或显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。上述实施例中的步骤,除有特殊说明外,不应理解为对执行顺序的限定。