微服务15:微服务治理之超时

服务,治理,超时 · 浏览次数 : 290

小编点评

## 理解微服务治理的几种方法 本文详细介绍了多种微服务治理方法,帮助读者理解如何在不同的场景下选择合适的治理方案。 **1. 超时重试** * 适用于网络延迟、抖动或丢包等问题。 * 对服务的核心接口进行细粒度配置,具体接口超时时间应该 ≥ TP999(即满足999‰的网络请求所需要的最低耗时)的耗时。 * 执行过程说明这边以示例服务 Svc-A 向 Svc-B 发起访问为例子。 **2. 超时断连** * 通过指定超时时间对请求进行断连,达到降级的目的。 * 避免长时间队列阻塞,导致雪崩沿调用向上传递,造成整个链路崩溃。 * 执行过程说明这边以示例服务 Svc-A 向 Svc-B 发起访问为例子。 **3. 策略实现** * 策略实现可以由 Service Mesh 进行配置,并根据不同的场景选择合适的策略。 * 例如,在云基础场景下,可以使用超时重试或超时熔断等方法来解决请求超时问题。 **4. 虚拟服务api版本** * 此版本提供了更清晰的描述,方便理解和操作。 **5. 虚拟服务治理** * 该方法在系统大面积崩溃的时候,能够有效地防止全面崩塌。 * 通过设置超时时间等参数,可以控制请求的处理时间,并避免雪崩。 **6. 常见治理手段** * 超时重试:对服务的核心接口进行细粒度配置,指定请求的超时时间。 * 超时断连:通过指定超时时间对请求进行断连,达到降级的目的。 * 策略实现:通过配置服务网关,根据不同的场景选择合适的治理策略。 * 虚拟服务api版本:提供更清晰的描述,方便理解和操作。 * 虚拟服务治理:在系统大面积崩溃的时候,能够有效地防止全面崩塌。

正文

★微服务系列

微服务1:微服务及其演进史
微服务2:微服务全景架构
微服务3:微服务拆分策略
微服务4:服务注册与发现
微服务5:服务注册与发现(实践篇)
微服务6:通信之网关
微服务7:通信之RPC
微服务8:通信之RPC实践篇(附源码)
微服务9:服务治理来保证高可用
微服务10:系统服务熔断、限流
微服务11:熔断、降级的Hystrix实现(附源码)
微服务12:流量策略
微服务13:云基础场景下流量策略实现原理
微服务14:微服务治理之重试

1 介绍

在复杂的互联网场景中,不可避免的会因为一些内在或者外在的因素,导致出现请求超时的情况。
而典型的业务超时场景主要有如下:

  • 网络延迟或者抖动或者丢包,从而导致响应时间变长。
  • 容器甚至云主机资源瓶颈情况:如CPU使用率过高、内存使用是否正常、磁盘IO压力情况、网络时延情况等资源使用情况异常,也可能导致响应时间变长。
  • 负载均衡性问题:多实例下分配的流量不均衡,目前看云基础场景,这个情况不多见。
  • 突发洪峰请求:大部分对内的业务基本不存在非预期的流量,突发洪峰请求主要还是程序的调用不合理或者程序bug(内存泄露、循环调用、缓存击穿等)。
    image
    单个Pod实例,长耗时容易造成队列堆积,对资源损耗很大,快速的释放或者调度开是一个比较好的办法,是一种普遍可接受的降级方案,否则超时阻塞会导致服务长时间不可用。
    而且这种影响是水平扩散的,同服务上的其他功能也会被争抢资源。

2 超时的常见治理手段

2.1 采用超时重试实现故障恢复

超时重试:对服务的核心接口进行细粒度配置,具体接口超时时间应该 ≥ TP999(即满足999‰的网络请求所需要的最低耗时)的耗时。
image

执行过程说明

  • 这边以示例服务 Svc-A 向 Svc-B 发起访问为例子。
  • 第1次执行,因为SvcB-Inst1高负载,所以在规定的时间内(比如2s)没有得到响应。
  • 当请求方(Svc A)感知到超时无响应的时候,再次发起请求。
  • 因为负载均衡策略,被请求方发生了变动,说明调度到新的实例(Svc-B-Instance1 到 Svc-B-Instance2)。
  • 第二次请求返回正常的 200 。

2.1 采用超时断连实现系统保护

超时断连:通过指定超时时间对请求进行断连,达到降级的目的。避免长时间队列阻塞,导致雪崩沿调用向上传递,造成整个链路崩溃。
image

执行过程说明

  • 这边以示例服务 Svc-A 向 Svc-B 发起访问为例子。
  • 第1次执行,因为SvcB-Inst1高负载,所以在规定的时间内(比如2s)没有得到响应。
  • 当请求方(Svc A)感知到超时无响应的时候,直接进行断连,不再发起请求。
  • 如果使用Service Mesh 做微服务治理,则会由SideCar进行断连,并Response给请求方
  • 504 代表 504 Gateway Time-out,flag = UT 代表 Upstream request timeout in addition to 504 response code。

3 策略实现(Service Mesh方案)

注释比较清晰了,这边就不解释了。

# VirtualService
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: xx-svc-b-vs
  namespace: kube-ns-xx
spec:
  hosts:
  - svc_b.google.com # 治理发往 svc-b 服务的流量
  http:
  - match:  # 匹配条件的流量进行治理
    - uri:
        prefix: /v1.0/userinfo   # 匹配路由前缀为 /v1.0/userinfo 的,比如 /v1.0/userinfo/1305015
    retries:
      attempts: 1  # 重试一次
      perTryTimeout: 1s  # 首次调用和每次重试的超时时间
    timeout: 2.5s  #  请求整体超时时间为2.5s,无论重试多少次,超过该时间就断开。
    route:
    - destination:
        host: svc_b.google.com
      weight: 100
  - route:  # 其他未匹配的流量默认不治理,直接流转
    - destination:
        host: svc_c.google.com
      weight: 100

4 总结

云基础场景下的治理手段各种各样,这边讲解了初级版的超时重试和超时熔断方案,让用户有一个更优良的使体验。
同时在系统大面积崩溃的时候,进行系统保护,不至于全面崩塌。
在后续的章节我们逐一了解下故障注入、熔断限流、异常驱逐等高级用法。

与微服务15:微服务治理之超时相似的内容:

微服务15:微服务治理之超时

# ★微服务系列 [微服务1:微服务及其演进史](https://www.cnblogs.com/wzh2010/p/14940280.html "微服务1:微服务及其演进史") [微服务2:微服务全景架构 ](https://www.cnblogs.com/wzh2010/p/15311192.h

微服务架构必备技术栈:万变不离其宗的奥义!

前言 之前我们说过,微服务是一种软件设计、架构思想。当然,里面也包含了相关技术点要解决当前要务。学习微服务,我们不能空口而谈,一定要落实到具体的技术栈上。 当今使用比较多两个技术体系,一个是Java,另外一个就是Net。 废话不多说,今天我就把相关“微服务架构”所用到的技术栈罗列出来。(以下是微软相

Skywalking APM监控系列(一丶.NET5.0+接入Skywalking监听)

前言 新项目采用的abp vnext的微服务模块化架构,所以把应用的服务拆成了很多独立模块 在初期,我们通过日志还能跟踪到问题, 后期服务越来越多(大约扩充到了十几个),随着调用链路越来越深 ,问题也越来越能排查了. 往往入口报错之后,要跟好几个服务的日志 才能找到最终节点. 所以考虑引入Skywa

微信小程序生态15- 批量提交微信小程序审核的一种方式

大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 以下是『微信小程序生态系列文章』正文! # 需求背景 我们是一个提供SaaS服务的小程序服务商,会给每一个客户申请一个专属的小程序,到目前为止已经差不

微服务新体验之Aspire初体验

安装aspire 查看vs版本 我这的版本是17.9.7,不支持aspire,所以需要升级 更新VS 点击 帮助->检查更新 点击更新 静等安装升级 创建aspire项目 项目创建成功,如下图 运行Aspire项目 在AspireApp1.AppHost的launchSettings.json文件中

微服务实践k8s&dapr开发部署实验(3)订阅发布

自托管模式运行dapr 新建订阅webapi项目,取名为backend 项目增加docker支持,取消https支持 修改Program.cs var builder = WebApplication.CreateBuilder(args); builder.Services.AddControll

微服务实践k8s&dapr开发部署实验(2)状态管理

新建webapi项目 建项目时取消https支持,勾选docker支持, Program.cs中注释下面语句,这样部署后才能访问Swagger // Configure the HTTP request pipeline. //if (app.Environment.IsDevelopment())

微服务下认证授权框架的探讨

前言 市面上关于认证授权的框架已经比较丰富了,大都是关于单体应用的认证授权,在分布式架构下,使用比较多的方案是--<应用网关>,网关里集中认证,将认证通过的请求再转发给代理的服务,这种中心化的方式并不适用于微服务,这里讨论另一种方案--<认证中心>,利用jwt去中心化的特性,减轻认证中心的压力,有理

微服务实践k8s&dapr开发部署实验(1)服务调用

前置条件 安装docker与dapr: 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 安装k8s dapr 自托管模式运行 新建一个webapi无权限项目 launchSettings.json中applicationUrl端口改成5001,如下: "applicationUr

微服务使用openfeign调用单点的会话失效问题

# 项目Springcloud,认证中心方式实现SSO使用开源框架Sa-Token >本身的单独访问每个客户端服务的单点就没有问题。然后单点通过Fegin调用就不好使了! ##### 主要使用的Sa-Token的微服务单点功能 ##### 使用的依赖如下 ```xml cn.dev33 sa-tok