serviceComb的microservice.yaml服务配置

本文介绍ServiceComb中的负载均衡策略,包括随机、顺序、响应时间权值等路由策略,以及如何配置这些策略。此外,还详细阐述了限流和降级策略的配置方法,帮助用户有效管理微服务的请求频率和异常处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

负载均衡策略

场景描述

  ServiceComb提供了基于Ribbon的负载均衡方案,用户可以通过配置文件配置负载均衡策略,当前支持随机、顺序、基于响应时间的权值等多种负载均衡路由策略。

配置说明

  负载均衡策略在microservice.yaml文件中配置,配置项为servicecomb.loadbalance.[MicroServiceName].[property name],其中若省略MicroServiceName,则为全局配置;若指定MicroServiceName,则为针对特定微服务的配置。

  表1 配置项说明

配置项默认值取值范围是否必选含义注意
servicecomb.loadbalance.NFLoadBalancerRuleClassNamecom.netflix.loadbalancer.RoundRobinRulecom.netflix.loadbalancer.RoundRobinRule(轮询)com.netflix.loadbalancer.RandomRule(随机)com.netflix.loadbalancer.WeightedResponseTimeRule(服务器响应时间权值)org.apache.servicecomb.loadbalance.SessionStickinessRule(会话保持)负载均衡路由策略-
servicecomb.loadbalance.SessionStickinessRule.sessionTimeoutInSeconds30Integer客户端闲置时间,超过限制后选择后面的服务器。暂不支持微服务配置。e.g. servicecomb.loadbalance.SessionStickinessRule.sessionTimeoutInSeconds,不能配置为servicecomb.loadbalance.DemoService.SessionStickinessRule.sessionTimeoutInSeconds
servicecomb.loadbalance.SessionStickinessRule.successiveFailedTimes5Integer客户端失败次数,超过后会切换服务器暂不支持微服务配置
servicecomb.loadbalance.retryEnabledFALSEBoolean负载均衡捕获到服务调用异常,是否进行重试-
servicecomb.loadbalance.retryOnNext0Integer尝试新的服务器的次数-
servicecomb.loadbalance.retryOnSame0Integer同一个服务器尝试的次数-
servicecomb.loadbalance.isolation.enabledFALSEBoolean是否开启故障实例隔离功能-
servicecomb.loadbalance.isolation.enableRequestThreshold20Integer当实例的调用总次数达到该值时开始进入隔离逻辑门槛-
servicecomb.loadbalance.isolation.errorThresholdPercentage20Integer,区间为(0,100]实例故障隔离错误百分比-
servicecomb.loadbalance.isolation.singleTestTime10000Integer故障实例单点测试时间单位为ms
servicecomb.loadbalance.transactionControl.policyorg.apache.servicecomb.loadbalance.filter.SimpleTransactionControlFilter-动态路由分流策略框架提供了简单的分流机制,开发者也可以实现自定义的分流过滤策略
servicecomb.loadbalance.transactionControl.options-key/value pairs针对SimpleTransactionControlFilter分流策略的配置项,可添加任意项过滤标签-

示例代码

  负载均衡策略配置在src/main/resources/microservice.yaml文件中。

  配置处理链:

servicecomb:
  # other configurations omitted
  handler:
    chain:
      Consumer:
        default: loadbalance
  # other configurations omitted

Copy

  增加路由策略:

servicecomb:
  # other configurations omitted
  loadbalance:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
  # other configurations omitted

Copy

自定义路由策略

  用户可以在ServiceComb提供的路由策略框架下根据业务需要,通过编程的方式来开发路由策略。实施步骤如下:

  • 实现接口com.netflix.loadbalancer.IRule中定义的接口方法。 路由选择逻辑在public Server choose(Object key)方法中实现。LoadBalancerStats是一个封装了负载均衡器当前运行状态的一个结构。通过获取stats中各个实例的运行指标,在choose方法中,判定将当前请求路由到哪个实例上进行处理。处理风格可以参照org.apache.servicecomb.loadbalance.SessionStickinessRule

  • 编译开发的策略,保证生成的class在classpath下。

  • 通过SDK配置该路由策略,假如是AbcRule。则配置如下:servicecomb.loadbalance.NFLoadBalancerRuleClassName=org.apache.servicecomb.ribbon.rule.AbcRule

限流策略

场景描述

用户在provider端使用限流策略,可以限制指定微服务向其发送请求的频率,达到限制每秒钟最大请求数量的效果。

注意事项

  1. 限流策略的控制并不是绝对精确的,可能会有少量误差。
  2. provider端的流量控制是业务层面的功能,不是安全意义上的流量控制,如需防止DDoS攻击,需要结合其他的一系列措施。
  3. 流量控制是微服务级的,不是进程级的。

配置说明

  限流策略配置在microservice.yaml文件中,相关配置项见表2。要开启服务提供者端的限流策略,还需要在处理链中配置服务端限流handler,并添加pom依赖。

  microservice.yaml配置示例如下:

servicecomb:
  handler:
    chain:
      Provider:
        default: qps-flowcontrol-provider

Copy

  添加handler-flowcontrol-qps的pom依赖:

<dependency>
    <groupId>org.apache.servicecomb</groupId>
    <artifactId>handler-flowcontrol-qps</artifactId>
    <version>1.0.0-m1</version>
</dependency>

Copy

  表2 QPS流控配置项说明

配置项默认值取值范围是否必选含义注意
servicecomb.flowcontrol.Provider.qps.enabledtruetrue/false是否启用Provider流控-
servicecomb.flowcontrol.Provider.qps.limit.[ServiceName]2147483647(max int)(0,2147483647],整形每秒钟允许的请求数仅支持microservice一个级别的配置
servicecomb.flowcontrol.Provider.qps.global.limit2147483647(max int)(0,2147483647],整形provider接受请求流量的全局配置没有具体到微服务的配置时,此配置生效

降级策略

概念阐述

降级策略是当服务请求异常时,微服务所采用的异常处理策略。降级策略有三个相关的技术概念:“隔离”、“熔断”、“容错”:

降级策略有三个相关的技术概念:“隔离”、“熔断”、“容错”:

  • “隔离”是一种异常检测机制,常用的检测方法是请求超时、并发量过大等。一般的设置参数包括超时时间、同时并发请求个数等。
  • “熔断”是一种异常反应机制,“熔断”依赖于“隔离”。熔断通常基于错误率来实现。一般的设置参数包括统计请求的个数、错误率等。
  • “容错”是一种异常处理机制,“容错”依赖于“熔断”。熔断以后,会调用“容错”的方法。一般的设置参数包括调用容错方法的次数等。

把这些概念联系起来:当”隔离”措施检测到N次请求中共有M次错误的时候,”熔断”不再发送后续请求,调用”容错”处理函数。这个技术上的定义,是和Netflix Hystrix一致的,通过这个定义,非常容易理解它提供的配置项,参考:https://github.com/Netflix/Hystrix/wiki/Configuration。当前ServiceComb提供两种容错方式,分别为返回null值和抛出异常。

场景描述

用户通过配置降级策略,可以设置微服务的异常处理策略。

配置说明

  配置项如表所示。

  表3 降级策略相关配置项说明

配置项默认值取值范围是否必选含义注意
servicecomb.isolation.timeout.enabledFALSE-是否启用超时检测 
servicecomb.isolation.timeoutInMilliseconds30000-超时时间阈值 
servicecomb.isolation.maxConcurrentRequests10-最大并发数阈值 
servicecomb.circuitBreaker.enabledTRUE-是否启用熔断措施 
servicecomb.circuitBreaker.forceOpenFALSE-不管失败次数,都进行熔断 
servicecomb.circuitBreaker.forceClosedFALSE-任何时候都不熔断当与forceOpen同时配置时,forceOpen优先。
servicecomb.circuitBreaker.sleepWindowInMilliseconds15000-熔断后,多长时间恢复恢复后,会重新计算失败情况。注意:如果恢复后的调用立即失败,那么会立即重新进入熔断。
servicecomb.circuitBreaker.requestVolumeThreshold20-10s内统计错误发生次数阈值,超过阈值则触发熔断由于10秒还会被划分为10个1秒的统计周期,经过1s中后才会开始计算错误率,因此从调用开始至少经过1s,才会发生熔断。
servicecomb.circuitBreaker.errorThresholdPercentage50-错误率阈值,达到阈值则触发熔断 
servicecomb.fallback.enabledTRUE-是否启用出错后的故障处理措施 
servicecomb.fallback.maxConcurrentRequests10-并发调用容错处理措施(servicecomb.fallbackpolicy.policy)的请求数,超过这个值则不再调用处理措施,直接返回异常 
servicecomb.fallbackpolicy.policythrowexceptionreturnnulll | throwexception出错后的处理策略 

注意: 谨慎使用servicecomb.isolation.timeout.enabled=true。因为系统处理链都是异步执行,中间处理链的返回,会导致后面处理链的逻辑处理效果丢失。尽可能将servicecomb.isolation.timeout.enabled保持默认值false,并且正确设置网络层超时时间servicecomb.request.timeout=30000。

示例代码

servicecomb:
  handler:
    chain:
      Consumer:
        default: bizkeeper-consumer
  isolation:
    Consumer:
      timeout:
        enabled: true
      timeoutInMilliseconds: 30000
  circuitBreaker:
    Consumer:
      sleepWindowInMilliseconds: 15000
      requestVolumeThreshold: 20
  fallback:
    Consumer:
      enabled: true
  fallbackpolicy:
    Consumer:
      policy: throwexception

Copy

说明:

降级策略需要启用服务治理能力,对应的服务提供者的handler是bizkeeper-provider,服务消费者的handler是bizkeeper-consumer。如果省略了Consumer:/Provider:,策略将无法配置成功,此时服务治理将以默认配置生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值