微服务平台 TSF 服务治理

服务治理功能包含服务鉴权、服务限流、服务路由和服务熔断,该任务指导你在应用开发过程中配置服务治理功能。

相关产品
微服务平台 TSF 产品页,含版本规格、价格与购买入口。

一、前提条件

·在开始开发前,请确保你已经参见 下载 Maven 下载安装了 Java 和 Maven,并且配置了 TSF 私服地址。

注意:说明:

·已参见 服务治理 文档熟悉了服务治理功能。

二、添加依赖

向工程中添加 spring-cloud-tsf-starter 依赖并开启 @EnableTsf 注解。

注意:如果你使用的是 1.15.0-Edgware-RELEASE/1.15.0-Finchley-RELEASE 及之前的版本,使用方法参见 Spring Cloud SDK 历史版本使用方法。

1. 向工程中添加依赖。
在 pom.xml 中添加以下代码:

<dependency> <groupId>com.tencent.tsf</groupId> <artifactId>spring-cloud-tsf-starter</artifactId> <version><!– 调整为 SDK 最新版本号 –></version> </dependency>

spring-cloud-tsf-starter 中包含了服务注册发现、服务路由、服务鉴权、服务限流、服务熔断、服务容错、服务监控、分布式配置、调用链功能。
2. 向 Application 类中添加注解 @EnableTsf:

// 下面省略了无关的代码 @SpringBootApplication @EnableTsf public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }

三、服务鉴权

你需要在服务主调方和被调方都添加依赖项和注解的开启。此时你已经对服务开启了鉴权功能,任何到达服务的请求都会被鉴权,鉴权不通过时会返回 HTTP 403 Forbidden。

如果请求双方想使用基本 tag 的鉴权规则,那么:

·对于 provider 而言,需要在控制台上设置 tag 鉴权规则。

·对于 consumer 而言,需要在业务代码中设置 tag 的内容。

1. 控制台上配置鉴权规则,参见 服务鉴权基本操作 。

2. 在 consumer 中设置 tag ,使用org.springframework.tsf.core包中的TsfContext类。设置 Tag 的方法签名如下:

/*** 设置多个 tag。如果有某个 tag 之前已经被设置过,那么它的值会被覆盖。*/public static void putTags(Map<String, String> tagMap, Tag.ControlFlag… flags) {}/*** 设置单个 tag。如果该 key 之前已经被设置过,那么它的值会被覆盖。 */ public static void putTag(String key, String value, Tag.ControlFlag… flags) {}

其中 flags 决定 tag 的使用场景,如果你没有特殊需要,不传即可:

public enum ControlFlag { TRANSITIVE, // 表示标签要传递下去,默认不启用。 NOT_IN_AUTH, // 表示标签不被使用在服务鉴权,默认是被使用的。 NOT_IN_ROUTE, // 表示标签不被使用在服务路由,默认是被使用的。 NOT_IN_SLEUTH // 表示标签不被使用在调用链,默认是被使用的。 }

TSF 提供的 Demo consumer-demo/src/main/java/com/tsf/demo/consumer/Controller.java 中提供了一个设置 tag 的例子:

@RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET) public String rest(@PathVariable String str, @RequestParam String user) { TsfContext.putTag("user", user); return restTemplate.getForObject("http://provider-demo/echo/" + str, String.class); }

四、服务限流

在应用工程中添加依赖和注解后,你可以直接在控制台上配置限流规则,参见 服务限流原理及使用。

当你开启服务限流功能后,任何到达的请求都会被限流模块处理。如果该服务上的配额已经消耗完,会对请求返回 HTTP 429 Too Many Requests;否则会正常放行。

五、服务路由

在应用工程中添加依赖和注解后,你可以直接在控制台上配置路由规则,参见 服务路由使用方法。

六、服务熔断

TSF 摒弃了已经不再继续维护的 Hystrix 断路器,采用推荐的 Resilience4J 作为底层实现。相比较原有单一的接口级别熔断,我们在此之上扩展成为:实例、API、服务级别熔断。同时,除了错误比率,TSF 也支持超时比率熔断,允许用户根据业务自行选择熔断配置。请配合 TSF 其他功能一起使用。

1. 关闭 Hystrix。
使用 TSF 熔断功能需要将 Hystrix 关闭(默认是关闭的,如果之前有打开还请关闭)。相关的容错功能请参见 服务容错。

注意:如果你已经使用了 feign 的 fallback 或者 fallbackFactory 功能,此处将会不再生效。如果你需要继续使用该功能或需要使用更丰富的容错功能,请参见 服务容错 步骤3进行配置。

feign: hystrix: enabled: false

2. 进行熔断配置。
目前支持两种方式的熔断配置:

·方式一:在线动态配置下发。 具体配置方法请参见 服务熔断使用方法。

·方式二:本地静态配置(适合本地联调使用,如果线上使用会被在线配置覆盖,请谨慎使用),配置在 yaml 配置文件中。

tsf_namespace_id: default_namespacetsf: circuit-breaker: # 可以配置多条规则 rules: # 需要熔断的目标微服务名 – targetServiceName: provider-demo # 熔断级别 API/SERVICE/INSTANCE – isolationLevel: API # 目标熔断服务的namespaceId,如果本地联调,需与tsf_namespace_id保持一致 – targetNamespaceId: "default_namespace" # SERVICE和INSTANCE级别,只允许配置一个策略 # API级别可以针对不同的API配置多个策略,也可以多个API配置一个策略 – strategyList: # 滑动窗口大小 – slidingWindowSize: 10 # 最小熔断请求数 – minimumNumberOfCalls: 10 # 熔断错误比例 – failureRateThreshold: 60 # 打开到半开状态的时间 – waitDurationInOpenState: 5 # 最大熔断实例个数百分比 # 只在INSTANCE级别生效 – maxEjectionPercent: 51 # 慢请求阈值,单位为ms – slowCallDurationThreshold: 60000 # 慢请求熔断比例 – slowCallRateThreshold: 50 # 该策略作用的API,可以同时作用于多个API – apiList: – method: GET path: "/echo/{param}" – method: GET path: "/echo2/{str}"

赞 (0)
上一篇 4天前
下一篇 4天前