“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

Jeff Dean 谈如何在大型在线服务中做到快速响应

  • 2014-07-13
  • 本文字数:2644 字

    阅读完需:约 9 分钟

6 月于硅谷举行的 Velocity 2014 大会上,Google 首席科学家 Jeff Dean 做了一场题为《Achieving Rapid Response Times In Large Online Services》的主题演讲,分享了让大型系统运行更加流程以便改善用户体验的种种方法。

Jeff 首先以 Google 的搜索服务为例,说明了何为大扇出服务(Large Fanout Service),即一个搜索请求需要有大量子系统(Web、新闻、图像、视频、博客等等)参与其中,以便提供更丰富的搜索结果。在 Google,基本不会为特定的服务提供特定的机器,而是将服务都部署在一个机器池中,这被称为共享环境(Shared Environment),Google 的共享环境大致会包含以下几个部分——Linux、调度系统、文件系统 ChunkServer、多种其他系统服务、Bigtable Tablet Server、随机 MapReduce 任务、CPU 密集型任务以及随机应用。它的好处是可以极大地提升利用率,但同时也会带来诸多无法预测的问题,比如网络拥塞等等。尤其是响应时间的长尾现象比较明显,一次请求的平均响应时间是 10 毫秒,但是却有 99%ile 的响应时间大于 1 秒,在大扇出服务中,如果需要调用 100 台服务器获得最终结果,那有 63% 的请求耗时会大于 1 秒。

针对延时问题,有些基本的降低延时的技术:

  • 定义不同的服务级别,针对服务器上的请求队列和网络流量设定优先级。
  • 减少线头阻塞(head-of-line blocking),将大的请求打散成一系列小请求;比如,一个读请求需要读取 64MB 数据,而另有一个 100KB 的读请求必须等前者完成了才能得到处理,此时可以将大请求分为多个小请求,以便 100KB 的那个请求能及时得到处理。
  • 管理好昂贵的后台活动,比如分布式存储系统中的日志压缩就算昂贵的后台活动,此类活动可以考虑在负载低峰期去执行。

Jeff 指出,我们要做的事就是基于一堆不可靠的资源打造一个可靠的整体,基于一堆无法预估的资源打造可以预测的整体。在延时处理方面,Jeff 将对应的技术分为两大块:

  • 跨请求适应(cross request adaptation),通过检测最近的行为,采取一些措施来优化后续的请求处理,通常会和负载均衡有关,生效时间大约是十几秒到几分钟。
  • 同请求适应(within request adaptation),在当次请求中,对响应较慢的子系统采取一些措施,以改善本次请求的整体响应时间,通常是立刻生效的。

随后,他分别就两类技术进行具体展开说明。

1. 跨请求适应

可以通过细粒度的动态分区,将大数据集或大型计算拆分到多台服务器上,一般一台服务器上会分到 10 到 100 个块,BigTable 和 GFS 就是这么处理的。

这么做的好处是显而易见的,比如,当一台机器负载过重时,可以将其中的一部分内容移动到另一台上;可以加速故障恢复,多台服务器分别恢复不同的数据块;实现选择性复制,针对重度使用的内容可以动态或静态地生成更多副本。

当服务器的响应变慢时,有可能这和当时发送的数据有关,但更多情况下是受到干扰的影响,比如共享服务器上其他任务造成的 CPU 或网络尖刺。此时可以选择将部分负载移动到其他服务器上以便改善延时情况,也可以在其他服务器上创建更多该分区的副本,继续给这台服务器发送请求(正常请求发给其他服务器了,发给本服务器的请求只是一份镜像)持续观察延时情况,待延时正常后再让其提供正常服务。

2. 同请求适应

同请求适应的目标是在不会增加太多资源消耗的情况下减少整体延时,同时还要保障系统安全运行。

有时一些失败是和请求数据有关的,比如一些测试过程中没有发现的“奇怪数据”会造成系统宕机等等,如果一次性将有问题的请求发给所有节点,那么所有节点就都出问题了。在 Google 会使用一种名为 Canary Requests 的请求,即把请求先发给一个节点,收到响应后,基本可以证明这个查询是可行的,随后再将其发给其他节点。

Jeff 在随后的时间里详细介绍了他们使用的另一项技术——备份请求(Backup Requests),大致的思路是先把请求发给一个副本,请求会被放进队列;随后再给另一个副本发送相同请求,如果第二个副本处理地很快,处理完毕后发回结果,客户端再给第一个副本发送取消任务请求。

以 In-memory BigTable Lookups 为例,数据存储了两份,将在 100 个 Tablet 中发送 1000 个键查询,统计最后一个键返回的总耗时。在没有备份请求时,平均耗时 33 毫秒,99%ile 为 52 毫秒,99.9%ile 高达 994 毫秒;当在 10 毫秒后发送备份请求时,平均耗时降为 14 毫秒,99%ile 和 99.9%ile 分别降到了 23 毫秒和 50 毫秒,此外还测试了在 50 毫秒后发送备份请求的情况,耗时同样比没有备份要好,但较前者表现略逊一筹。本案例中,延时 10 毫秒的备份请求仅增加了不到 5% 的额外请求负担,在延时 50 毫秒的情况下,更是下降到不足 1%。可见备份请求能在很大程度上改善延时的长尾效应,同时并未增加太多开销。

备份请求技术还可进一步优化,在发送请求时将处理请求的另一台服务器信息也纳入请求中,一旦一台服务器开始执行,就直接通知另一台取消执行,这项优化称为跨服务器取消。Jeff 同样提供了一个例子,在分布式文件系统客户端中发送读请求,等待 2 毫秒后发送备份请求,耗时情况如下:

  • 集群处于空闲状态
    • 没有备份请求,50%ile 为 19 毫秒,90%ile 为 38 毫秒,99%ile 为 67 毫秒,99.9%ile 为 98 毫秒
    • 有备份请求,50%ile 为 16 毫秒,90%ile 为 28 毫秒,99%ile 为 38 毫秒,99.9%ile 为 51 毫秒
  • 集群正在进行大量排序
    • 没有备份请求,50%ile 为 24 毫秒,90%ile 为 56 毫秒,99%ile 为 108 毫秒,99.9%ile 为 159 毫秒
    • 有备份请求,50%ile 为 19 毫秒,90%ile 为 35 毫秒,99%ile 为 67 毫秒,99.9%ile 为 108 毫秒

两种情况下,使用备份请求延时都有显著改善,99%ile 分别下降了 43% 和 38%,在第二种情况下备份请求只引入了大约 1% 的额外磁盘读请求。如果没有备份请求,集群需要一直处于低负载状态,而使用了备份请求,集群则可处于相对较高的负载,同时还能有相对较好的响应延时。

对于备份请求而言,最坏的情况即是两台机器几乎同时收到请求,并且都处理了请求,这会带来一定的资源浪费。当然,也可以引入第三个请求,但通常情况下向两台服务器发送请求就已经足够了。在演讲后的 Office Hour 中,Jeff 表示备份请求也不是万能的,对于一些不可重复执行得请求,比如在线交易,就不能使用备份请求,以免造成数据不一致等情况。

在本次 Velocity 大会上,Jeff Dean 的演讲时间较短,如果您对他的具体演讲内容感兴趣,可以观看官方视频。同时,也推荐您去阅读 2013 年 Jeff Dean在斯坦福的演讲还有一篇更早的材料。我们希望有一天能够邀请到 Jeff 到国内现场为广大 InfoQ 的读者做一次分享,到时您会来参加么?

2014-07-13 08:486521
用户头像

发布了 135 篇内容, 共 58.4 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

低代码平台如何提高开发效率?

高端章鱼哥

软件开发 低代码 JNPF

2023年前端流行的新技术

树上有只程序猿

前端 前端技术

Ansible自动化部署工具-role模式安装filebeat实际案例分析

快乐非自愿限量之名

自动化部署

Databend 开源周报第 119 期

Databend

保持http代理服务器的方法

Geek_bf375d

IP HTTP 跨境电子商务 跨境电商 #HTTP

聚势启新,KaiwuDB 生态联盟沙龙首站落地长春

KaiwuDB

公司让我开发一个管理系统,有了它,So easy!

互联网工科生

软件开发 低代码 快速开发 JNPF

流程图怎么画?3个好用的在线流程图软件推荐,绘图再也没烦恼!

彭宏豪95

可视化 流程图 在线白板 画图工具 流程图绘制

影响HTTP代理IP的稳定性的相关因素

Geek_bf375d

IP 代理IP 免费代理ip 跨境电商 #HTTP

云图说|华为云主机安全新版本上线

华为云开发者联盟

华为云 华为云开发者联盟 华为云云图说

时序数据库 TDengine + 高级分析软件 Seeq,助力企业挖掘时序数据潜力

TDengine

tdengine 时序数据库

Docker 和 Kubernetes:技术相同和不同之处

EquatorCoco

Docker k8s K8s 多集群管理 kubernetes 运维

足球盘口数据获取:API接口与数据采集的权衡之道

软件开发-梦幻运营部

快速拉取聚水潭单据的ETL工具

RestCloud

数据同步 ETL

RestCloud AppLink已支持的数据源有哪些?

RestCloud

零代码 APPlink 自动化集成

2023年必试的7款软件项目管理系统

PingCode

项目管理 项目管理软件 项目软件管理系统

爬虫代理ip和代理ip池确保用户隐私和数据安全的问题

Geek_bf375d

代理IP 代理IP设置 跨境电商 IP 路由 #HTTP

在AI时代,提升程序员竞争力的关键策略

不在线第一只蜗牛

人工智能 编程 程序员 AI

Layer 2 真的为以太坊扩容了吗?

Footprint Analytics

以太坊 Layer 2

探索向量数据库 | 重新定义数据存储与分析

-亦世凡华、

数据库 亚马逊云科技 向量数据库

英特尔锐炫GPU助力AI向大众用户市场普及

E科讯

特权账号管理之定期改密篇

尚思卓越

网络安全 定期改密

正式开源!网易有道上线“易魔声”语音合成引擎

有道技术团队

人工智能 语音合成 TTS

常见光模块的封装类型有哪些?

小魏写代码

使用Amazon WAF有效保护托管Web应用

Hanson

代理服务IP的选择上有什么技巧

Geek_bf375d

IP HTTP 代理IP 免费代理ip 跨境电商

全域全自主建设,亚信科技AntDB数据库助力广电5G业务上线运行

亚信AntDB数据库

数据库 AntDB AntDB数据库

在HarmonyOS上实现ArkTS与H5的交互

HarmonyOS开发者

HarmonyOS

同济 MBA × 和鲸:聚焦商业数据思维培养,赋能工管人才转型升级

ModelWhale

人才培养 企业数字化转型 数智化 MBA 同济大学

未来之选:为什么向量数据库是您的数据管理利器

熬夜磕代码、

数据库

为什么要使用动态IP代理爬取

Geek_bf375d

IP HTTP 跨境电子商务 代理IP 跨境电商

Jeff Dean谈如何在大型在线服务中做到快速响应_Google_丁雪丰_InfoQ精选文章