QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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:004214

评论

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

文档数字化采集与智能处理:图像弯曲矫正技术概述

合合技术团队

算法 数字化 图像处理 弯曲矫正

阿里巴巴 Qwen2.5-Coder: 代码智能的革命

吴脑的键客

人工智能 阿里巴巴‘

HyperWorks的shrink warp meshing

智造软件

CAE CAE软件 Hypermesh hyperworks

益阳等保测评中心在哪里?电话多少?

行云管家

等保 等级保护 等保测评 益阳

Acunetix v24.10 发布下载,新增功能概览

sysin

Acunetix

数据库运维实操优质文章文档分享(含Oracle、MySQL等) | 2024年10月刊

墨天轮

MySQL 数据库 oracle sql postgresql

鸿蒙高质量代码静态检测200条三

龙儿筝

鸿蒙

iLogtail 开源贡献人物专访:技术之路无坦途,与社区共同成长

阿里巴巴云原生

阿里云 云原生 iLogtail

Metasploit Pro 4.22.5-2024110601 发布下载,新增功能简介

sysin

Metasploit

Nexpose 6.6.278 发布下载,新增功能概览

sysin

Nexpose

娱乐业怎么定义?以及什么情况下需要用到堡垒机?

行云管家

网络安全 娱乐 等保 堡垒机 等级保护

CST软件如何设置金属材料表面粗糙度

思茂信息

cst cst使用教程 CST软件

支付宝接口代签约失败排查指南

盐焗代码虾

接口 支付宝 接口代签约

Java灵魂拷问13个为什么,你都会哪些?

威哥爱编程

Java 面试 JavaEE

Serverless GPU:助力 AI 推理加速

阿里巴巴云原生

阿里云 Serverless 云原生

Microsoft System Center 2025 Multilanguage - Windows 服务器管理软件

sysin

center System

Cisco Expressway Release X15.2.0 - 统一通信网关

sysin

Cisco Expressway

Apache Doris 2.1.7 版本正式发布

SelectDB

数据库 大数据 数据仓库 存算分离 湖仓一体

深入探索淘宝API:电商开发的高效策略与实践

代码忍者

API 接口 pinduoduo API

淘宝APP商品详情深度解析:item_get_app精准提取标题、价格、销量、描述及SKU信息,助力竞品分析与推广策略优化

代码忍者

API 接口 pinduoduo API

Veritas InfoScale 8.0 (Unix, Linux, Windows) - 高可用性和灾难恢复解决方案

sysin

VMware Cloud Foundation 4.5 - 领先的混合云平台

sysin

vmware Cloud Foundation

上新丨统一多层网关架构系列视频课程

阿里巴巴云原生

阿里云 云原生

即时通讯技术文集(第42期):直播技术合集(Part2) [共13篇]

JackJiang

即时通讯;IM;网络编程

鸿蒙高质量代码静态检测200条四

龙儿筝

鸿蒙

百度世界大会:AI时代的公司官网来了 会后首日新增582家企业合作

极客天地

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