Skip to content

服务治理

该服务的主要功能模块黑白名单,熔断,网关拓扑,网关列表。

1.1.路由配置

网关的路由配置是为了从网关调用服务的一个路由识别映射功能。

添加路由步骤:

(1)进入网关拓扑菜单中,在服务实例上点击右键选择添加路由(普通模式)

(2)在添加路由页面设置路由名称、匹配路径(匹配路径指的是从网关访问服务是的要设置的路劲)

(3)设置完成之后,点击服务和网关之间的连线可以看到设置的路由信息

谓词指的是路由的匹配条件,符合谓词条件的将请求将使用该路由转发服务,uri重写Path路径 过滤器指的是匹配到当前路由设置的地址之后会将地址之后的值和地址发送到对应的服务上去。

举例:deploy服务的谓词/oms/deploy/** ,当发送给网关的请求地址匹配到/oms/deploy时就会匹配到deploy服务的路由上,当前的请求是:网关ip+端口+/oms/deploytest/findSoftwarePage,uri重写Path路径会将 /oms/deploytest/findSoftwarePage 替换成 findSoftwarePage ,然后网关的负载会将重写之后的path路径负载到真实的服务 ip+端口 上去,后面跟上接口的实际地址 findSoftwarePage ,这样就可以成功访问了。

1.2.黑白名单

进入黑白名单菜单中,切换当前的Table页到黑名单或者白名单,然后点击添加按钮输入要设置的ip地址,这里的ip地址可以是单个ip或者ip段的形式,保存之后点击页面右上角的启用/禁用按钮之后,当前添加的黑名单或者白名单就可生效。

1.3.服务熔断

1.3.1.熔断器配置

(1)熔断配置时需要先添加熔断策略,进入熔断列表然后点击添加按钮输入自己需要设置的熔断参数配置信息,点击确认保存即可。

(2)熔断配置添加完成之后进入网关拓扑菜单,找到需要配置熔断的服务,然后点击网关与服务之间的连线,添加过滤器选择熔断配置过滤器,name的值选择自己定义好的熔断器配置,fallbackUri的值输入: forward:/,如果需要配置降级,此处应该填写的值是:forward:/fallback 其中fallback是网关服务中提供的一个快速响应的降级接口。熔断策略设置也可在网关拓扑页面点击添加熔断按钮进行设置。以ensemble-cif-service为例:

1.3.2.熔断测试

以本地服务为例测试熔断效果。使用本地的服务在idea中启动三个不同端口(8012、8013、8014)的服务,使用一个查询的接口,在代码中获取当前服务端口,判断如果是8012端口,则让线程睡眠2秒(由于熔断配置中的超时时间设置的是1000ms,所以此时的睡眠时间就设置了两秒,要比熔断器配置的超时时间长)。

idea中启动三个不同端口的服务的方法:编辑启动配置参数,添加如下配置依次修改对应的端口号

本地三个节点启动完成之后在网关拓扑中按照上面的熔断配置步骤为此服务设置好熔断配置之后,使用jmeter给服务中上述添加的接口连续发送请求触发熔断,结果中返回的状态码 504 timeout,请求的节点接口超时,503 Service Unavailable 熔断触发。熔断测试的结果是刚开始请求三个节点中有两个节点是正常的,一个节点的返回时504 timeout ,当达到一定的数量之后就会触发熔断此时负载到被熔断节点的请求都会被网关直接拦截返回 503 Service Unavailable ,中间会根据熔断策略中配置的恢复时间,间隔一段时间后网关会放进去一个请求探测服务是否已经恢复正常状态,如果返回正常则节点的熔断就会恢复正常,如果还是 504 timeout 网关继续拦截后续的请求返回 503 Service Unavailable

1.3.3.降级配置

降级测试:在熔断配置的fallbackUri中将其值修改为:forward:/fallback

测试结果:

熔断触发之后,配置了降级接口fallback,此时的返回均为正常,熔断节点的请求直接调用网关的fallback接口快速响应返回 “降级执行成功” 。

1.3.4.熔断重试配置

在过滤器中选择重试过滤器,配置的参数和值分别是:

Key: statuses SERVICE_UNAVAILABLE 需要重试的异常响应的HttpStatus的状态信息

Key: methods GET,POST 接口的请求方式

Key: exceptions org.springframework.cloud.gateway.support.ServiceUnavailableException 需要重试的异常

配置了熔断重试之后的接口请求的结果是:没有触发熔断时,会返回504 timeout触发了熔断时此时不会返回503 Service Unavailable ,因为重试过滤器在配置了熔断异常后会将此次请求重新发送到可用节点,所以熔断触发之后就是很多响应正常的返回中偶尔夹着一笔 504 timeout响应,这个504 就是熔断之后的到了恢复时间时的那一次探测请求。

注意:要是想测试熔断重试,就把熔断配置的降级删除了。

1.4.限流配置

API网关基于Redis使用令牌桶算法实现应用限流,可根据Request Header以及Body的指定字段指定值进行限流,并可指定限流的时间段以及每秒限制访问次数。

进入网关拓扑菜单点击要配置限流的节点和网关之间的连线,切换到限流信息table页面,选择要添加的限流策略,分别添加上对应的参数即可。

目前限流配置中提供了6种限流的方式:

选择限流方式之后,配置好令牌桶数目,每秒新增令牌数,以及需要配置的其它信息保存即可。

限流配置完成之后直接调用服务接口测试,当令牌桶的令牌数目使用完成后出发限流,后台响应回来的状态码是 429 Too Many Requests.

1.5.鉴权配置

服务的鉴权配置是给在网关中给微服务添加一个鉴权过滤器,开始这个鉴权过滤器之后请求头就需要添加上Token才能正常访问接口。

配置步骤:

进入网关拓扑菜单,点击微服务与网关上的连线,然后在路由上添加鉴权过滤器

Key:enabled          是否开启鉴权过滤器,true时开始,false是关闭
Key:whiteListUri     接口的鉴权认证的白名单,配置了某个接口之后,其就不用走鉴权认证,直接可以访问,可配置多个接口,多个接口之间使用“,”分隔

1.6.大屏过滤器配置

监控中心的核心大屏功能展示的数据需要在给核心业务在网关中配置请求报文修改过滤器和响应报文格式转换过滤器,配置如下:

1.7.负载均衡

目前网关中提供了三种负载均衡策略:轮询、随机和最小并发。

轮询指的是网关会在多个节点上依次轮流将流量和请求分发到各个节点上
随机指的就是请求进来之后网关随机负载分发到某个服务节点上
最小并发指的是网关会将请求发送到并发数最小的节点中去

负载均衡策略切换需要进入网关拓扑菜单,然后点击服务节点,在弹框页面进行切换。

1.8.接口管理

接口管理是网关提供的各个微服务上接口的查询、启用、禁用功能。

1.8.1.全局接口管理

全局接口管理指的是针对整个微服务集群的接口管理。全局接口的查询是从注册中心获取到服务的某个节点之后直接查询这个节点的所有接口和状态,所以可能出现其中某个节点的接口状态信息和全局的接口状态信息不一致的这种情况。

全局接口查询:

进如网关拓扑菜单中,点击某个微服务,在弹窗中点击接口管理即可查询当前微服务集群的接口。

全局接口启用禁用:在接口查询列表中点击接口后面的操作开关可对某个接口进行启用和禁用操作,禁用之后接口则无法正常访问。全局接口启用、禁用会对下面所有的节点服务的接口进行启用和禁用操作,包含状态时OUT_OF_SERVICE的服务。

1.8.2.单节点接口管理

单节点接口管理功能只针对于服务的某个节点进行的操作,不会影响别的节点。

进入网关拓扑菜单,选择某个微服务状态时UP或者OUT_OF_SERVICE的节点点击之后,在弹窗中点击接口管理即可进行接口的查询和启用禁用。

1.9.服务上下线

服务上下线功能是针对服务的某个节点进行服务状态UP和OUT_OF_SERVICE状态之间的一个操作功能。

进入网关拓扑,点击某个服务的某个节点,在弹窗中点击更改状态,可对此服务节点进行上线或者停止操作,此处的停止是将该服务节点注册到eureka上的状态改为OUT_OF_SERVICE状态,状态为OUT_OF_SERVICE的服务节点,网关过来的请求负载不会走状态是OUT_OF_SERVICE的这个节点,但是直接使用ip+端口的形式直接访问此节点的接口是可以直接访问的。

1.10.服务映射关系

服务映射关系是为核心teller提供的一个统一接口URL,按照业务三要素匹配实际接口并转发到服务中去,具体使用方法可参见网关业务要素统一适配过滤器手册。

1.11.MAC规则

此功能是为某些特定的接口提供报文防篡改校验的功能。页面如下:

使用此功能时,需要将接口哦添加到此列表中,然后开启此接口的MAC校验,系统出厂提供的global_switcher是全局的MAC校验功能关闭和启用按钮。如果global_switcher的MAC校验启用按钮为关闭状态,其余接口的MAC校验按钮不论是启用还是关闭,此功能都是关闭状态,只有global_switcher的MAC校验状态和具体接口的MAC校验装填都是开启状态时,此功能才是开启状态。

此功能在使用时,出了将全局和具体接口的MAC校验开启之外,还要在接口请求头上添加mac 参数,此参数的值是使用传输的报文信息和加密方法计算得出。具体获取方法参照网关comet-gateway-service工程 RspMacVerifyGatewayFilterFactory类中的获取方式 代码如下:

java
//此为响应报文的mac值计算方式
String macValue = sm2SignVerifyImpl.getSign(new String(content)); //content为报文信息
if(logger.

isTraceEnabled()){
        logger.

trace("macValue:{}",macValue);
}
        originalResponse.

getHeaders().

set(MAC_VALUE, macValue);

此时请求头上携带mac值,报文正常传入,就可验证报文是否被篡改过了。

1.12.服务黑白名单

使用方法参见网关过滤器手册中的服务黑白名单使用手册。