超时模型及处理的总结

我们经常遇到这样的场景,比如有两个模块A、B,A模块调用B模块的API,然后等待B模块的响应。
模块A和模块B可以处理不同的进程、节点,API的调用可以是本地调用,也可以是远程调用。

一些请求对于时间是比较敏感的,所以A模块在调用B模块的API的时候,可能会给出一个超时时间,如果达到超时时间,请求没有返回,那么A模块会触发超时事件,A模块会进行一些相应的处理,比如abort请求,通知B模块abort请求,释放相关资源等等。

正常场景

对于超时场景,我们让A在发送请求的时候,携带一个起始时间(可选)和超时时间。携带起始时间,是为了B模块可以更精确的判断出请求是否超时。

超时处理

当A模块发现超时事件后,A模块的处理方式如下:

  1. 对于一些简单的请求(视业务而定,比如一些无关紧要的读请求),A模块可以直接abort A模块发起的请求,不关心B模块的处理结果,也不关心请求在B模块是否还会继续执行。
  2. 对于一些复杂的请求(视业务而定,比如一些可能改变系统状态的写请求),A模块可能需要把请求本身持久化,然后才开始调用B的API发送请求。并且在请求超时后,A模块可以:
    2.1 持续重试直到成功(B模块需要有滤重的功能,每个请求有一个唯一的ID)。
    2.2 持续abort请求直到成功(B模块需要支持abort)。

B可选的功能:

  1. 如果B模块可以发现A模块的请求已经超时,那么可以主动abort请求,因为请求超时,这个请求对A可能已经没有意义了,B模块也没有必要再浪费资源去完成了。
  2. B模块如果自己abort了请求,可以考虑通知一下模块A,虽然这可能是非必须的。因为A模块可能自己也能发现超时。
超时发现

超时由谁来发现呢,原则是谁关心(谁设置的超时),那么由谁来发现。在上面的例子中,就是A必须要有超时发现机制。另外请求接收方,也可以有发现机制,但这不是必须的。如果请求接收方可以发现超时,那么可能可以节约一些资源(对于超时的请求不再处理)。实践上这个是有点难度的,因为A、B可能运行在不同的节点上,系统时间也可能不太一样。当然B可以以B接收到请求的时刻开始算超时时间,虽然不太准确,但是也比没有超时强。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,165评论 1 23
  • 最全的iOS面试题及答案 iOS面试小贴士 ———————————————回答好下面的足够了-----------...
    zweic阅读 2,689评论 0 73
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,096评论 0 3
  • 感恩邢老师给你调课,我可以陪妈到卫生院输液。感恩范医生给妈诊断病情并开药。感恩护士妹妹给妈扎针、换水。感恩药房嫂子...
    爱满自溢钱丽阅读 40评论 0 1
  • 我的家乡有一条又宽又长的江,名叫黑龙江,黑龙江景色优美,风景如画。黑河面对着俄罗斯的布拉戈维申斯克市。 ...
    9b95fc38bba7阅读 160评论 0 0