首页 > 其他分享 >微服务15:微服务治理之超时

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

时间:2023-08-28 13:00:10浏览次数:38  
标签:服务 请求 Svc 重试 治理 15 超时

★微服务系列

微服务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 总结

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

标签:服务,请求,Svc,重试,治理,15,超时
From: https://www.cnblogs.com/wzh2010/p/17206179.html

相关文章

  • Linux 服务器各项性能检查
    1、网络宽带测试nload-mIncoming进入网卡的流量Outgoing从网卡流出的流量Curr当前流量Avg平均流量Min/Max最大/最小流量Ttl流量总和 ......
  • Educational Codeforces Round 151 (Rated for Div. 2)E. Boxes and Balls(数学,动态规
    题目链接:https://codeforces.com/contest/1845/problem/E 题意: 给定长度为n且只含0和1的数组,你可以进行以下操作: 交换相邻的0和1; 给正整数k,问经过k次操作后,会有多少种本质不同的结果; 分析: 如果1比0多,我们可以把他们取反(让0比1多,结果是一样的) 设计状态dp[i][j......
  • 服务启动连接redis报错问题
    报错截图如下1,该报错为redis认证问题,也就是需要redis登录密码,需要在配置文件redis配置中,需填写密码2,对于redis的修改有一下操作 2.1,关闭redis的保护模式:打开redis的配置文件,redis.conf文件,找到protected-mode,改成no, 2.2,设置redis密码,requirepass***  到redis的......
  • 不会用这个工具,你的Linux服务器就是个摆设!
    大家好,我的网工朋友在运维这一块,没有工具可谓是寸步难行。一个好的Linux运维,为了提升自己的工作效率,免不得会找一些适合自己业务需求的工具,用起来工作效率高,工作幸福指数直线上升。今天整理了几个对运维来说极其好用的,也是业界公认的好用工具,如果你一个都不曾用过,就out啦!今日文章阅......
  • .NET 依赖注入DI 注册服务
    一、概念1、控制反转:要什么给我就行了  2、依赖注入简化模块的组装过程,降低模块之间的耦合度 3、怎么创建xx对象->我要xx对象4、说白了就是定义了一套接口,我们写一个类去继承这个接口,那么这个类就需要实现这个接口的方法(功能和属性),这就是依赖注入。5、注入体现的是一个IOC(控......
  • EMQX服务docker-compose启动
    问题描述  按照一般的yml文件启动后,发现EMQX却一直在重启,日志里显示“没有权限创建文件夹或写数据”、“文件找不到”等错误; 正确安装步骤  1、创建临时EMQX容器dockerrun-d--nameemqx-p1883:1883-p8081:8081-p8083:8083-p8084:8084-p8883:8883-p18083:......
  • 基于亚马逊云科技无服务器服务快速搭建电商平台——性能篇
    使用Serverless构建独立站的优势在传统架构模式下,如果需要进行电商大促需要提前预置计算资源以支撑高并发访问,会造成计算资源浪费并且增加运维工作量。本文介绍一种新的部署方式,将WordPress和WooCommerce部署在AmazonLambda中。Lambda是无服务器的计算方式,无需预置资源......
  • Excel中如何用条件格式和COUNTIF函数判断15位以上的数字
    Excel中如果用条件格式和COUNTIF函数判断15位以上(不包含15位的数字)的数字会出现错误,对于这种问题,要采用其他的方式进行判断。出现的错误,如下图所示:  1.条件格式判断15位以上的数字:1.1选择A列(如果此时只选择A1单元格,后面要在条件格式管理器中选择应用范围);1.2条件格式-新建......
  • ubuntu15.04下用apache+iasp部署asp+mssqlserver运行环境
    最近由于工作需要,尝试了一下在linux下配置asp运行环境,耗时两周,在网上能找到的相关资料和软件都比较匮缺,特记录一下。一、硬件环境及操作系统windows2008+vm,win2008安装了sql2005作为数据库服务器,vm虚拟机安装ubuntu15.04用apache2.0.59+iasp2.1作为webserver二、ubuntu15.04安......
  • Educational Codeforces Round 152 (Rated for Div. 2)E. Max to the Right of Min(数
    题目链接:https://codeforces.com/problemset/problem/1849/E 大致题意: 长度为n的序列,求有多少个区间满足区间最大值在区间最小值的右边? 解题思路: (此题有使用线段树等其他做法,本处使用的是单调栈做法) 我们先求出每个a【i】的左边的比他小的LMIN,左边比他大的LMAX,右......