写点什么

每秒处理 480 万会员资料请求,LinkedIn 是如何实现的

作者:Rafal Gancarz

  • 2023-08-14
    北京
  • 本文字数:1182 字

    阅读完需:约 4 分钟

每秒处理480万会员资料请求,LinkedIn是如何实现的

LinkedIn将Couchbase作为集中式缓存层,用于伸缩会员资料读取操作,以应对日益增长的、超出现有数据库集群处理能力的流量。新方案实现了超过 99%的命中率,将尾延迟降低了 60%以上,将年度成本降低了 10%。


多年来,LinkedIn 直接从其Espresso文档平台提供会员资料。Espresso 平台建立在MySQL之上,并使用Avro进行序列化,还包含了Apache HelixDatabus(LinkedIn 的变更捕获系统)组件。Espresso 路由器处理资料读取请求,将读/写请求定向到正确的存储节点,并使用堆外缓存(OHC)进行热键缓存。



图片来源:https://engineering.linkedin.com/blog/2023/upscaling-profile-datastore-while-reducing-costs


随着存储请求量每年翻倍,峰值超过每秒 480 万次,为会员资料提供服务的 Espresso 集群已经达到了伸缩性的极限。团队决定引入一个基于Couchbase的缓存层,而不是重构 Espresso 平台的核心组件,因为超过 99%的请求都是读取操作。


LinkedIn 软件工程师Estella PhamGuanlin Lu解释了团队为什么选择 Couchbase 作为缓存:


在 LinkedIn,我们已经将 Couchbase 用作各种应用程序的分布式键值缓存。它被选中是因为它比 memcached 更强大,包括用于保存服务器重启之间持久化的数据,在集群中的个体节点发生故障时所有文档仍然可用的复制功能,以及可以在不停机的情况下添加或删除节点的动态可伸缩性。


新的缓存层结合了 OCH 和 Couchbase,并被集成到了 Espresso 中,不需要客户端做出修改。其设计重点是 Couchbase 的故障弹性、缓存数据可用性和数据分歧预防。Espresso 路由器会在发生暂时性故障时重试请求,并监控 Couchbase 健康状况以避免将请求发送到不健康的桶。会员资料数据被复制了三次,如果首领副本不可用,路由器会将其转移到其中的一个跟随者副本。


所有的会员资料数据都缓存在每一个数据中心里,由Apache Samza作业根据 Espresso 捕获的写操作进行实时的更新,以及根据数据库快照进行定期的更新。所有的缓存更新都使用了Couchbase Compare-And-Swap(CAS)来检测并发更新,并在必要时重试更新。



图片资料:https://engineering.linkedin.com/blog/2023/upscaling-profile-datastore-while-reducing-costs


经过调整之后,Profile Backend 服务将负责处理一些原先由 Espresso 处理的操作。它会动态评估请求字段并返回保存在缓存中的完整资料数据的子集。它还会处理 Avro 模式转换,并在必要时从注册表获取模式版本。


LinkedIn 的团队进行了进一步的性能优化,简化了 Avro/二进制格式的数据读取,并在反序列化性能方面实现了约 30%的改进。因为引入了新的混合缓存方案,Espresso 的节点数减少了 90%。考虑到运行 Couchebase 集群、缓存更新作业所需的新基础设施和运行后端服务新增的计算资源,为会员资料请求提供服务的总成本每年下降了 10%。


原文链接

https://www.infoq.com/news/2023/07/linkedin-member-profile-caching/


相关阅读:

领英采用 Protobuf 进行微服务集成,将延迟降低了 60%

2023-08-14 08:0012587

评论

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

埋土灰

箭上有毒

8月日更

Vue进阶(四十八):Vue.js 2.0 移动端拍照压缩图片预览及上传

No Silver Bullet

Vue 8月日更

Flink 和流式应用运维(十-下)

Databri_AI

flink 监控 Web UI

数据传输过程的序列化,你了解吗

卢卡多多

序列化 8月日更

Springboot+quartz源码探索

4ye

Java 后端 springboot quartz 8月日更

数字化为企业带来哪些价值?

boshi

数字化转型

Windows Server 2019 安装提要 (及 VS 2019 Build Tool) - 续

hedzr

DevOps vscode windows server 2019 server core visual studio 2019

获取自己的公网 IP 地址

耳东@Erdong

IP地址 8月日更

【微积分的力量】芝诺悖论

LeifChen

8月日更 微积分 芝诺悖论

手撸二叉树之二叉树的层平均值

HelloWorld杰少

数据结构与算法 8月日更

从 0 到 1 ,不能忽略的「道」

非著名程序员

产品 产品经理 认知提升 8月日更

Linux之alias命令

入门小站

Linux

vue入门:element组件与动画使用

小鲍侃java

8月日更

MySQL中FROM_UNIXTIME与UNIX_TIMESTAMP

一个大红包

8月日更

心态炸了!我的join查询多加了个过滤条件性能就崩了

林一

MySQL 查询优化 多表join

Vue进阶(四十七):面试必备:2021 Vue经典面试题总结(含答案)

No Silver Bullet

面试 Vue 8月日更

北鲲云计算:为药企研发的飞速发展提供助力

北鲲云

基金这么赚钱!!编程实现基金从采集到分析通用模板!(白酒为例)

Python研究者

8月日更

三分钟了解大数据技术发展史

张浩_house

人工智能 机器学习 大数据

[灵魂拷问]MySQL面试高频100问(工程师方向)

编程菌

Java 编程 程序员 面试 计算机

网络攻防学习笔记 Day110

穿过生命散发芬芳

网络安全 8月日更

前端之算法(九)回溯算法

Augus

算法 8月日更

fil挖矿的规则是什么?fil挖矿收益如何?

区块链 分布式存储 IPFS fil收益 fil挖矿

快手处罚恶意炒作、审丑卖惨类账号,不良自媒体违背公序良俗

石头IT视角

sql task2 基础查询与排序

橙橙橙橙汁丶

【设计模式】模板方法模式

Andy阿辉

C# 后端 设计模式 8月日更

GrowingIO Design 组件库搭建之单元测试

GrowingIO技术专栏

单元测试 Jest Storybook

微博评论高性能高可用架构设计

tjudream

高可用架构 微博评论 高性能计算架构 多级负载均衡 多级缓存

ASCII对照表

入门小站

工具

【前端 · 面试 】TCP 总结(一)—— 概述

编程三昧

8月日更

Python开发篇——RSA加密算法和SHA1计算文件校验码

吴脑的键客

Python

每秒处理480万会员资料请求,LinkedIn是如何实现的_业务架构_InfoQ精选文章