| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 超时和重试,防止因网络问题服务器宕机、操作系统崩溃等问题 -> 正文阅读 |
|
[系统运维]超时和重试,防止因网络问题服务器宕机、操作系统崩溃等问题 |
由于网络问题、系统或者服务内部的 Bug、服务器宕机、操作系统崩溃等问题的不确定性,我们的系统或者服务永远不可能保证时刻都是可用的状态。 尤其是对于微服务系统来说,正确设置超时和重试非常重要。单体服务通常只涉及数据库、缓存、第三方 API、中间件等的网络调用,而微服务系统内部各个服务之间还存在着网络调用。 一、超时机制一个请求超过指定的时间(比如 1s)还没有被处理的话,这个请求就会直接被取消并抛出指定的异常或者错误(比如?504 Gateway Timeout)。 1.1 分类:
1.2 后果
1.3 时间设置
????????超时时间过?容易引起降级失效、系统崩溃、连接池爆满等问题。如下图,内容服务是?向?户直接提供知识内容的核?服务。收藏服务返回?户对内容的是否收藏,属于低优先级服务。如果内容服务请求收藏服务设置超时时间过?,如图中,虽然设置 1S 超时,但是重试累计 3S,则?旦收藏服务发?宕机(通常是由于上游 QPS 异常导致),则内容服务会失效,?法返回给?户数据,甚?发?串联雪崩。
????????超时时间设置过短,实际?产中容易因?络抖动?告警频繁,造成服务不稳定等?户体验问题。如内容服务调?资源服务超时时间设置 200ms,资源服务调?ID 发号器服务超时时间设置为 300ms,?旦?络抖动后,资源服务 200ms 即超时返回,资源服务对下游的调? 300ms 超时也?实际意义。 1.4 合理设定合理设置超时时间,对系统的稳定来?,非常重要,我们可以从以下?度来考虑设置值:
。微服务最终为服务对象是?户,从?户交互数据来讲,服务响应时间在 300ms 内最佳, 2000ms 内仍可接受。通常情况下,建议超时的上限值为 2000ms,超过 2000ms 的非重要请求,则有必要被降级处理。
。同时考虑到 TCP 算法中 Delayed ACK + Nagle 算法开启的场景,最小 delay 值 40 ms,建议下限值设定为 50ms; 在 RTT 较?的正常网络环境中,TCP 数据包丢包,超时重传的最?值,200 ms,因此我们建议 300ms 可以视为超时设置的最佳选择,为重传保留?定的余量。
。依据资源消耗的分析,超时时间?短应当和 QPS 成反?例。我们设定基础值超时设定为 300ms、100QPS,并根据实际 QPS 做调整。 二、重试机制2.1 什么是重试机制?重试机制:一般配合超时机制一起使用,指的是多次发送相同的请求来避免瞬态故障和偶然性故障。 核心思想:通过消耗服务器的资源来尽可能获得请求更大概率被成功处理。由于瞬态故障和偶然性故障是很少发生的,因此,重试对于服务器的资源消耗几乎是可以被忽略的。 挑战:分布式应?的挑战之?就是如何管理远程服务的可用性和它们的响应。 资源消耗:由于瞬态故障和偶然性故障是很少发生的,因此,重试对于服务器的资源消耗几乎是可以被忽略的。 次数:重试的次数通常建议设为 3 次,次数不宜过多,否则依然会对系统负载造成比较大的压力。 服务消费方
服务提供方
2.2 重试幂等防止因为错误的判断超时而采用重试 客户端等待服务端完成请求完成超时但此时服务端已经执行了请求,只是由于短暂的网络波动导致响应在发送给客户端的过程中延迟了。 举个例子:用户支付购买某个课程,结果用户支付的请求由于重试的问题导致用户购买同一门课程支付了两次。对于这种情况,我们在执行用户购买课程的请求的时候需要判断一下用户是否已经购买过。这样的话,就不会因为重试的问题导致重复购买了。 2.3 幂等性:一个接口被调用,不管几次,产生一样的效果,一样返回结果。 1、业务表唯一索引:
2、状态流转控制:
3、乐观锁版本号:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 10:03:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |