服务超时总结

凯文不上班 · · 1156 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

介绍

超时
  • 请求超时,客户端给服务端发送请求时超时,此时服务端没有收到客户端的请求;
  • 服务端内部超时,服务端可能存在DB操作、IO操作、调用其他服务超时;
  • 响应超时,服务端给客户端返回响应时超时,此时服务端已经处理了请求。

超时发生需要客户端和服务端如何处理呢?
客户端最常见方法:

  • 重试(前提是服务端接口支持幂等),重试间隔梯度增大,重试次数阈值最大值
  • 不重试直接去查询请求结果状态,根据结果确认是否请求成功,或者什么都不处理,直接认为失败不做进一步处理
  • 具体接口场景具体对待

服务端:

  • 服务端内部如果超时了,应该尽快给客户端返回,告诉客户端超时失败,这个主要是通过服务端内部超时控制来实现,例如:golang http.TimeoutHandler

幂等性

支持接口无限重试主要靠的就是幂等性,实现幂等一般采用流水号机制,相同请求使用同一流水号,流水号的生成要保证全局唯一,有一些算法可以实现,比如snowflake算法,接口处理过的请求流水号需要把流水号存储起来,后续相同流水号请求直接返回已处理,一般将流水号直接放到redis中存储,同时,这种幂等性判断,可以从接口移动到网关中,由网关统一处理,接口开发不需要关注幂等性处理,就像service mesh一样,将通用的一些处理下沉到网关统一处理

引用


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:凯文不上班

查看原文:服务超时总结

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1156 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传