容器扩展的艺术:重试

F5生态系统 | 2018年1月11日

要扩展容器,不能只是在服务前面加个代理就不管了。扩展也不只是分发。在快速发展的容器领域,要确保可扩展性,需要具备五项不同的能力:重试、熔断、服务发现、流量分发和监控。

在这篇探讨容器扩展之道的文章中,我们将深入了解重试机制。

重试

小时候玩游戏时,很多游戏里都有“重试”的概念。失败后,孩子们常会喊“再来一次!”,希望其他玩家能让自己重试。有时大家会同意,有时不会。但我发现,这很少能阻止孩子继续尝试。

在扩展应用(也可以称为服务)时,重试的概念大致相同。代理选择一项服务并尝试处理请求时,收到错误。在基本的负载均衡场景中,通常通过检查HTTP响应代码来判断是否出错。“200 OK”以外的任何响应都视为错误,其中包括网络和TCP层超时。负载均衡器可以直接将失败响应返回给

关于疯狂的引言

请求方;或者,如果它足够智能,也可以重试请求,希望后续请求能够获得成功响应。

这听起来很基础,但在规模化发展初期,并没有重试机制。失败了就是失败了,只能设法处理,通常是在浏览器中手动重新加载。后来,代理终于变得足够智能,可以自行重试,也让许多键盘免于因频繁按下“CTRL”和“R”键而磨损。

表面上看,这堪称“疯狂”的典型写照。毕竟,如果请求第一次失败了,凭什么认为第二次(甚至第三次)就会成功?

答案在于故障的原因。扩展应用时,务必要了解连接容量对故障的影响。任何给定资源在任意时刻的负载都不是固定的。连接会不断建立和关闭。底层Web应用平台,无论是Apache或IIS、node.js引擎还是其他技术栈,都有明确的容量限制。它只能维持X个并发连接。达到此限制后,尝试建立新连接时将会挂起或失败。

如果故障由此引起,那么在代理收到失败响应所需的几微秒内,另一个连接可能已经关闭,从而使重试有机会成功。

在某些情况下,故障发生在平台内部,也就是令人头疼的“500 内部服务器错误”。服务器并未过载,但调用的另一个(外部)服务未能及时响应时,通常会出现此状态。有时,这是因为数据库连接池已达到自身上限。依赖外部服务可能引发级联错误。与连接过载类似,等您收到最初的错误时,问题通常已经解决。

您可能还会看到这个“非常有用”的“503 Service Unavailable”错误。它可能是由过载引起的,但与所有HTTP错误代码一样,并不总能准确反映实际问题。DNS故障可能会触发此错误;对于IIS和ASP,队列已满也可能导致此错误。实际原因多种多样。同样,等您收到错误时,问题可能已经解决,因此首先应尝试重试。

当然,不能无休止地重试。TCP重传可能产生意外后果,例如导致网络过载和接收端不堪重负;同样,重试最终也会失去意义。对于放弃前应重试多少次,并没有硬性规定,但通常为3至5次。

此时,应向请求方返回失败信息,并启动断路器。我们将在下一篇文章中深入探讨这一功能。

分享
标签: 2018

关于作者

Lori Mac Vittie
Lori Mac Vittie杰出工程师兼首席技术布道师 | F5

Lori MacVittie是F5首席技术官办公室的杰出工程师兼首席技术布道师,在应用交付、自动化战略和基础设施领域拥有深厚的专业知识。无论是为AI智能体定义防护机制、剖析脆弱的多云架构,还是探索可扩展系统的极限,她都善于化繁为简。她在应用开发、IT架构以及网络和系统运维领域拥有30多年的行业经验。加入F5之前,她曾担任技术编辑,并因出色表现获得奖项。 MacVittie拥有计算机科学硕士学位,著述颇丰,出版作品涵盖安全、云和企业架构领域。她还热衷于桌面游戏和电子游戏,并且对奶酪有着毫不掩饰的鲜明见解。

Lori Mac Vittie 的更多博客文章

相关博客文章

F5纪念2021年世界艾滋病日
F5生态系统 | 2021/12/01

F5纪念2021年世界艾滋病日

值此世界艾滋病日,F5郑重承诺,将与员工、客户、社区和合作伙伴共同努力,消除社会对HIV感染者仍然存在的污名与偏见。

Thingbot正转变为攻击平台
F5生态系统 | 2018/11/29

Thingbot正转变为攻击平台

Lori MacVittie重点介绍了F5 Labs对2018年1月至6月全球物联网设备攻击的研究,并指出了其中令人警醒的影响。物联网设备不仅持续遭到利用,还被转变为攻击平台,这意味着攻击者可以更充分地利用这个必然增长的市场。

借助F5全新Quick Start,在AWS上快速开展业务
F5生态系统 | 2018/11/20

借助F5全新Quick Start,在AWS上快速开展业务

在AWS re:Invent开幕前,我们很高兴与大家分享F5与AWS之间全新的Quick Start集成。F5的Tom Atkins将介绍该服务如何启动、配置和运行在AWS上部署工作负载所需的计算、网络、存储及其他AWS服务。

为什么声明式模型对NetOps自动化至关重要?
F5生态系统 | 2018/04/30

为什么声明式模型对NetOps自动化至关重要?

为什么声明式模型对NetOps自动化至关重要?阅读F5博客,了解基础设施即代码如何简化网络扩展。

开源聚焦:F5基础设施即代码与多云可管理性
F5生态系统 | 2017/11/16

开源聚焦:F5基础设施即代码与多云可管理性

开源聚焦:基础设施即代码与多云。阅读博客,了解模板和Terraform如何简化F5应用服务的部署。

破解IT“无解困局”的答案:私有云
F5生态系统 | 2016/09/12

破解IT“无解困局”的答案:私有云

破解IT“无解困局”的答案:私有云。阅读F5博客,了解本地部署的敏捷性如何化解安全与速度难以兼顾的问题。