写点什么

LinkedIn 将 Espresso 从 HTTP1.1 迁移到 HTTP2,连接数减少 88%,延迟降低 75%

作者:Rafal Gancarz

  • 2023-12-20
    北京
  • 本文字数:1331 字

    阅读完需:约 4 分钟

LinkedIn 将 Espresso 从 HTTP1.1 迁移到 HTTP2,连接数减少 88%,延迟降低 75%

LinkedIn 将其 Espresso 数据库从 HTTP/1.1 迁移到 HTTP/2,极大 提升 了可伸缩性和性能,减少了连接数量、降低了延迟并缩短了垃圾回收时间。为了获得这些好处,团队不得不优化 Netty 默认的 HTTP/2 栈来满足需求。


LinkedIn 使用 Espresso(构建在 MySQL 之上的文档平台)来存储和提供大部分数据。随着 LinkedIn 平台的有机增长,数据量不断增加,迫使公司不断扩展 Espresso 集群的规模,并进行优化工作,例如为 Espresso 引入 集中式缓存层 或者 采用 Protocol Buffers 进行服务间通信。



Espresso 高层架构(来源:LinkedIn Engineering Blog)


Espresso 的事务栈包括两个主要组件:路由器和存储节点。路由器负责将请求发送到正确的存储节点上,存储节点负责与 MySQL 集群进行交互,并相应地调整数据格式。这些组件之间的通信使用 HTTP 协议,更具体地说是使用了 Netty 框架。随着时间推移,团队发现到 Espresso 集群的规模增长导致可伸缩性下降。


最近增加的 100 个路由器节点导致存储节点内存使用量增加,额外的垃圾回收导致延迟增加了 15%。此外,由于增加了大量的 HTTP/1.1 连接,从连接池中获取连接所需的时间达到了几毫秒。最后,在发生网络事件(如交换机升级)期间,由于达到存储节点的连接限制,重新建立数千个连接可能会导致错误。


LinkedIn 的软件工程师  Abhishek Andhavarapu 解释了 HTTP/1.1 和 HTTP/2 之间的差异,以及这些差异如何影响 Espresso 平台的可伸缩性和性能:


对于路由器与存储层之间的通信,我们早期的方法是使用了 HTTP/1.1,这是一种广泛用于 Web 服务器和客户端之间交互的协议。然而,HTTP/1.1 是基于每个请求连接的,在大规模集群中,这种方法会导致路由器和存储节点之间产生数百万个并发连接。这导致了可伸缩性、弹性和众多与性能相关的障碍。团队决定在进行 HTTP/2 迁移时继续使用 Netty 框架,但很快发现其性能并不理想(比 HTTP/1.1 实现的吞吐量低 45%,延迟高 60% 左右),因此工程师们不得不去解决 HTTP/2 栈的性能瓶颈。在经过一番诊断后,他们确定了两个改进方向:获取连接和处理请求,以及请求的编码 / 解码。


开发人员通过修改几个内部的 Netty 实现细节来增强功能。他们创建了一个可以重复使用已有通道的处理程序,避免为每个请求创建新的处理通道。他们还引入了一个自定义的 EventLoopGroup 实现,可以更均匀地在工作线程之间平衡连接。为了减少获取连接时的上下文切换,团队重新设计了连接池实现,使用了高性能、线程安全的队列。


此外,SSL 处理使用原生的、基于 JNI 的 SSL 引擎进行了优化,并使用自定义的 SSL 初始化逻辑避免了冗长的 DNS 查找延迟。最后,团队通过创建自定义编解码器来优化编码 / 解码性能,编解码器将 HTTP/2 请求封装为 HTTP/1.1 请求,帮助处理 Espresso 使用的许多自定义 HTTP 标头,并禁用了 HPACK 标头压缩。



迁移到 HTTP/2 后延迟减少(来源:LinkedIn Engineering Blog)


团队报告称,在所有这些定制化改进之后,迁移到 HTTP/2 带来了明显的性能改进,相较于 HTTP/1.1,TCP 连接数量减少了 88%,延迟降低了 65% 至 75%,垃圾回收时间减少了 75% 至 81%,获取连接的等待时间从 11 毫秒 降至 0.02 毫秒(改进了 99%)。


英文原文

https://www.infoq.com/news/2023/12/linkedin-espresso-http2/

2023-12-20 08:004434

评论

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

Lion : 超越 AdamW 的优化算法

Zilliz

模型训练 算法优化

高速服务区智慧公厕

光明源智慧厕所

牛皮!仅凭“阿里爸爸”大厂面试参考笔记,去携程Java三面,已OC

Java面试那些事儿

Java 编程 架构 面试 java面试

好用的3D建筑设计软件:Vectorworks 2023激活版

真大的脸盆

Mac Mac 软件 3D建筑设计软件 建筑设计

数据库ChatGPT插件来了,SQL使用体验进一步起飞

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

如何用秒验提升用户体验和转换率?

MobTech袤博科技

Airwallex 基于 Flink 打造实时风控系统

Apache Flink

大数据 flink 实时计算

模块9设计电商秒杀系统

KING

怎样仿真才能驱动研发

Openlab_cosmoplat

工业互联网 开源社区 工业 仿真 仿真软件

持续创新,厚积薄发,用友引领企业数智化服务产业

用友BIP

用友 用友BIP

为什么秒验是老年用户注册的最佳选择

MobTech袤博科技

旅游景区智慧公厕,提升旅游新体验

光明源智慧厕所

再获信创认证!MIAOYUN荣获“产业技术创新奖”和“优秀信创企业奖”双重奖项

MIAOYUN

信创 信创云 MIAOYUN 产业技术创新奖 优秀信创企业奖

ChatGPT编程秀-1:从一个爬虫开始

仝键

JavaScript 架构 TDD java ChatGPT

人工智能快速发展趋势下,中国该如何应对?

GPU算力

内网升级“高效安全”利器!统信软件发布私有化更新管理平台

统信软件

安全 操作系统

众筹互助模式DApp开发智能合约系统搭建

薇電13242772558

智能合约

从 TDengine 存储引擎的变化探讨——为何大家应尽快切换 3.0 版本?

TDengine

tdengine 时序数据库 国产数据库

天翼云坚持科技创新,加速算力普惠!

天翼云开发者社区

“巨变”中,用友奋力实现飞跃

用友BIP

用友BIP

IM开发者的零基础通信技术入门(十一):为什么WiFi信号差?一文即懂!

JackJiang

即时通信 即时通讯IM

SeaTunnel 与 StarRocks 生态融合,让大数据处理回归“简单”!

Apache SeaTunnel

开源 Bigdata Apache SeaTunnel

天翼云斩获SD-WAN & SASE两项大奖!让企业上云更加丝滑

天翼云开发者社区

开源项目的演进会遇到哪些“坑”?KubeVela 从发起到晋级 CNCF 孵化的全程回顾

阿里巴巴中间件

阿里云 开源 云原生 KubeVela cncf

从ChatGPT谈AI发展方向:全力助推乡村振兴事业快速发展

加入高科技仿生人

人工智能 AI 低代码 乡村振兴 ChatGPT

重塑大融合体系,立体推进“业财合一”

用友BIP

智能会计 价值财务 业财合一 用友智能财务 业财融合

智能化司库平台助力财资管理升级

用友BIP

用友 智能会计 智能财务 价值财务 全球司库

智能会计成就价值财务

用友BIP

智能会计 价值财务 业财合一 用友智能财务

让业务容器化更安全便捷,阿里云容器镜像服务 ACR 推出免费制品中心

阿里巴巴中间件

阿里云 容器 云原生

时序数据库入门 | 时序数据库的特点及与传统数据库的区别详解

Greptime 格睿科技

时序数据库 tsdb 时序数据

Kyligence 亮相 Gartner 数据与分析峰会,展示指标平台创新成果

Kyligence

大数据 数据分析 指标中台

LinkedIn 将 Espresso 从 HTTP1.1 迁移到 HTTP2,连接数减少 88%,延迟降低 75%_DevOps & 平台工程_InfoQ精选文章