写点什么

Redliner:LinkedIn 如何评估服务的容量极限

  • 2017-03-14
  • 本文字数:2994 字

    阅读完需:约 10 分钟

LinkedIn 在它的基础设施上运行着数百个应用,它们为 4 亿 6 千 7 百万 LinkedIn 会员提供服务。在发布新功能、规划流量增长规模和分析数据中心失效备援方案的过程中,我们经常会遇到以下几个问题。

  • 以服务目前的配置最大可以承担多大的 QPS(每秒查询数)?
  • 这些服务器能够处理比当前峰值高出 50% 的流量吗?
  • 从基础设施来看,服务潜在的容量瓶颈是什么?

作为 LinkedIn 的性能团队工程师,我们的工作就是要在短时间内为上述的问题寻找准确的答案。

不过,因为服务的增长过于迅速,在对服务的容量极限进行评估时,我们面临着巨大的挑战。这些挑战来自于持续变化的流量模式、不均衡的基础设施特征,以及持续变化的瓶颈。为了能够准确地对服务容量极限进行评估,并有效地识别出容量瓶颈,我们的解决方案需要具备如下特点。

  • 利用生产环境来突破实验室的局限
  • 使用真实的流量作为负载
  • 最小化对用户体验造成的影响
  • 低运营成本和开销
  • 自动伸缩

我们的解决方案:Redliner

我们使用生产环境的真实流量,通过 Redliner 实现自动化的容量评估和准确的余量分析。Redliner 在目标服务上运行压力测试,逐步增加流量,直到服务无法处理更多的流量为止,以此来评估服务的吞吐量。

Redliner 自动从生产环境引入流量,并确保对用户只有很小的影响。在设计 Redliner 时,我们遵循了两个原则:影响最小化和完全自动化。

影响最小化

在进行流量重定向时,最主要的问题是如何避免对站点和用户造成影响。Redliner 使用以下的策略来缓解对生产环境性能造成的影响。首先,通过增量的方式将流量导向 redline 实例。其次,Redliner 对服务进行实时的监控,并根据实际情况来分发流量。Redliner 捕捉实时的性能指标,并基于 EKG 健康评估规则(见图 1 和图 2)的计算结果来确定服务的健康状况。另外,在进行 redline 实例的测试过程中,Redliner 也会评估流量测试对上游和下游服务所产生的影响。

(点击放大图像)

图1: Redliner 内部度量指标规则示例

(点击放大图像)

图2:Redliner 系统度量指标规则示例

完全自动化

为了克服手动测试的缺点(缺乏一致性、高昂的运营成本,等等),我们需要一个完全自动化的方式来运行测试、确定吞吐容量、检测系统性能衰退告警,并在出现问题时停止测试或回滚。我们借助LinkedIn 的技术平台保证Redliner 自动化的健壮性和伸缩性。Redliner 能够运行调度测试,通过EKG 检测性能状态,还能利用A/B 测试平台 XLNT 来动态地调整导向目标服务的流量。在经过几轮的迭代之后,Redliner 就可以确定单个服务能够处理的最大 QPS。一般整个过程需要不到一个小时的时间。Redliner 会生成测试报告,报告里包含了 QPS 和延迟趋势走向以及资源瓶颈信息。如果某个服务出现过载或者尚有余量,Redliner 会向相关人员发送邮件,邮件里会为他们提供具体的建议。

Redliner 生态系统

图 3 是 Redliner 的架构图,包含导流组件和容量评估组件。主要组件如下:导流层(代理 / 负载均衡器)、服务健康状态分析器和服务度量指标收集器。

(点击放大图像)

图3:Redliner 和它的依赖组件

导流层(代理/ 负载均衡器)

Redliner 目前只支持无状态的服务。也就是说,发送给这些服务的请求可以被路由到数据中心 SUT(Service Under Test)的任意服务实例上,不涉及粘性会话(sticky session)。负载均衡机制负责控制流量负载,从而能够实现动态导流。

导流层是 Redliner 实现动态调整流量的关键组件。Redliner 确定目标服务的流量等级,并通过 LiX(LinkedIn 实验服务)将其转换成代理和负载均衡器的配置变更。LinkedIn 使用 LiX(以及 A/B 测试)作为默认的流量探测工具,它提供了更为可控和安全的导流。通过改变代理和负载均衡器的配置,Redliner 就可以自由地控制从客户端发送给目标服务的流量。

度量指标收集器

容量评估和余量分析通过分析性能度量指标来确定 SUT 是否已经达到了容量极限。LinkedIn 所有的服务都会向 Autometrics 发送度量指标,Autometrics 是一个基于推送的实时度量指标收集系统。Autometrics 会收集实时的系统数据和服务数据,比如 QPS、请求延迟、错误率,以及 CPU 和内存的使用情况。

服务健康分析器

EKG 是 Redliner 的服务健康检测工具,它通过分析上述的性能指标来确定服务的整体健康情况。Redliner 向 EKG 查询正常流量负载性能与当前流量负载性能之间的比较结果,也会通过查询服务的健康检测结果来决定后续的导流操作。

Redliner 实战

Redliner 通过在目标服务上增量运行不同的流量压力测试来确定服务的容量极限。在对目标服务的流量负载做出变动后,Redliner 等待 EKG 返回健康检测结果。如果健康检测失败,Redliner 会降低流量等级,否则,它会增加流量,给服务施加更大的压力。Redliner 就是通过这样的反馈闭环来确定服务的流量等级的。在得到一个令人信服的红线(redline)数字之前,这个迭代过程会一直进行,而这个数字就是服务能够处理的最高吞吐容量。

图 4 展示了 Redliner 一个测试案例的细节。SUT 设定了一个红线数字(红色虚线),Redliner 触发快速坡道(ramp)算法,逐步增加流量负载,直至达到目标 QPS。这个过程改进了测试效率,同时降低了测试之间的时间间隔。之后,Redliner 一直保持流量的逐步增加,直到目标服务的 CPU 使用率和调用延迟出现显著的增长,这个时候的健康检测会返回异常。Redliner 随之降低目标服务的流量负载。在经过几轮的迭代调整之后,Redliner 就得到了目标服务的红线数字。

(点击放大图像)

图4:Redliner 测试结果概要:QPS 和延迟vs 时间

使用案例

Redliner 在 LinkedIn 内部被用于多种用途,包括下面的几种。

降低数据中心的成本

一般来说,服务所需要的资源需要根据未来的增长规模来调配。不过受多种因素的影响,比如功能弃用和不准确的增长规模预测,分配给服务的资源可能不够用,所以资源分配是一件很复杂的工作。通过指定红线区间,我们可以识别出过度分配资源的服务,并将资源收回,用作其他用途。举个例子,当 100% 的流量被导向目标服务,健康检测没有返回错误,Redliner 测试就随之结束。根据这个测试结果,工程师们可以减少生产环境的服务实例,或者利用 LPS 对资源进行更有效的分配。图 5 展示了使用 Redliner 对生产环境的服务器资源进行回收的例子。

(点击放大图像)

图5:服务资源减持趋势示例

前瞻性容量规划

生产环境的容量问题总是很难缓解。通过运行Redliner 的自动化测试,服务所有者和运维团队会收到潜在的容量告警。在Redliner 识别出资源竞争问题(CPU、内存、网络、线程池)之后,做出缓解计划就会变得相对容易。另外,通过分析容量历史和可视化红线QPS 趋势,工程师们可以建立评估模型,并作出适当的预测,提前为流量增长规划好资源。

吞吐量衰退检测

工程师们可以使用Redliner 来检测应用程序的衰退情况,还可以通过自动化测试识别出新的资源瓶颈。Redliner 支持同时运行canary 环境的测试和生产环境的测试。工程师们可以在不同的服务实例上运行相同等级的流量负载:一个服务实例包含了新的配置、属性变更或者代码变更,另一个服务实例是当前的生产环境版本。负载测试结果可以作为部署的参考,可以避免部署包含了可能导致性能衰退的代码。

查看英文原文: Redliner: How LinkedIn Determines the Capacity Limits of Its Services


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-03-14 17:155377
用户头像

发布了 322 篇内容, 共 160.1 次阅读, 收获喜欢 148 次。

关注

评论

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

回顾与展望,SOMA年终工作会议暨Meet Up圆满举办

OpenAnolis小助手

操作系统 龙蜥社区系统运维联盟

Go 语言高性能最佳实践

FunTester

分布式系统学习10:分布式事务

卷福同学

分布式事务 分布式系统

Coolbpf最新特性解读:profiler功能上线,助力性能分析和优化

OpenAnolis小助手

操作系统 ebpf 龙蜥技术 coolbpf 龙蜥系统运维联盟

龙蜥社区落地开源生态发展合作倡议新进展,推出内核 kABI 和配置统一规范

OpenAnolis小助手

开源 操作系统 龙蜥社区

性能测试丨内存火焰图 Flame Graphs

测试人

软件测试

“AI拜年”火遍朋友圈,营销的终局是拼技术

Alter

AI英语考试APP开发的技术难点

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI英语学习

逆向购物新浪潮?揭秘反向海淘与入局指南

代码忍者

反向海淘系统搭建

Svelte 最新中文文档翻译(6)—— if、each、key、await 逻辑区块

冴羽

vue.js 前端 web前端 Svelte SvelteKit

对话式 AI 硬件开发者都关心什么?低延迟语音、视觉理解、Always-on、端侧智能、低功耗……丨 RTE Meetup 回顾

RTE开发者社区

“破冰”探索两周年,AI和媒体碰撞出了什么火花?

Alter

Svelte 最新中文文档翻译(5)—— 基础标记

冴羽

JavaScript vue.js 前端 Svelte SvelteKit

参与有奖 服务器操作系统用户调研问卷(2024年度)

OpenAnolis小助手

操作系统 龙蜥社区

喜讯!龙蜥操作系统荣获 CSDN 2024 中国开发者影响力年度评选大奖

OpenAnolis小助手

操作系统 龙蜥操作系统 Anolis OS OS Copilot

什么是 Python 包管理器

克莱因瓶

Cloud Kernel SIG 月度动态:ANCK 新增支持多家厂商新硬件特性、发布多个小版本

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥SIG月报

龙蜥衍生版 KOS 助力厦门高校创新实验室智算 300 节点成功迁移 | 龙蜥案例

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥操作系统 龙蜥案例 Anolis OS

AI英语考试APP的测试

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI英语学习

龙蜥开发者说:我与龙蜥社区相遇相惜的这些年 | 第 29 期

OpenAnolis小助手

操作系统 龙蜥开发者说

更安全、更丰富 、更兼容 Anolis OS 23.2 版本重磅上线

OpenAnolis小助手

开源 操作系统 龙蜥社区 Anolis OS Anolis OS 23.2 版本

龙蜥社区加入智算产业联盟,助力构建开放、包容、普惠的 AI 新生态

OpenAnolis小助手

操作系统 龙蜥社区 智算产业联盟

AI 语音独角兽 ElevenLabs C 轮融资估值超 30 亿美元;港科大 Llasa TTS:15 秒声音克隆支持中英双语

RTE开发者社区

总结与展望,龙蜥社区第 30 次运营委员会会议线上召开

OpenAnolis小助手

操作系统 龙蜥运营委员会会议

📧Univer Go :电子表格结合AI,信息提取发邮件一键即达

梦数技术团队

Python JavaScript 自动化 电子表格 AI API

PIRF:422 Language Goofs – Egg Corns

Echo!!!

English

解决Python处理大规模数据的性能瓶颈,人大教师向你推荐这四种工具!

ModelWhale

Python 智能体 大模型 加速包

和鲸Heywhale荣获知名出版社 “2024 年度优秀合作伙伴”奖,共筑科技知识传播新未来

ModelWhale

出版社 图书出版

高性能网络SIG双月度动态: 三年磨一剑,virtio-net AF_XDP 完成 Linux 主线零拷贝支持

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥SIG月报

Redliner:LinkedIn如何评估服务的容量极限_语言 & 开发_Susie Xia_InfoQ精选文章