写点什么

每秒处理 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:0012622

评论

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

用javascript分类刷leetcode22.字典树(图文视频讲解)

js2030code

JavaScript LeetCode

Teradata 离场,企业数据分析平台如何应对变革?

Kyligence

数据分析 指标中台

会议总结 | 首次 Flink Batch 社区开发者会议

Apache Flink

大数据 flink 实时计算

ChatGPT搜索与推荐之间的匹配问题

图灵教育

搜索引擎 深度学习‘’ ChatGPT

react源码中的fiber架构

flyzz177

React

直播预告 | 嵌入式BI如何将数据分析真正融入业务流程

葡萄城技术团队

保持热爱,奔赴山海:Apache Calcite PMC 之路

字节跳动开源

flink 开源 技术 社区 Apache Calcite

前端leetcde算法面试套路之双指针

js2030code

JavaScript LeetCode

Apache Flink 实时计算在美的多业务场景下的应用与实践

Apache Flink

大数据 flink 实时计算

预告|第四届OpenI/O启智开发者大会NLP大模型论坛强势来袭!

OpenI启智社区

人工智能 NLP 大模型 开发者大会 OpenI启智社区 ChatGPT

时代背景下的 ChatGPT,到底能帮助开发者做什么呢?

泰罗凹凸曼

JavaScript ChatGPT

开心档之Bootstrap4 自定义表单

雪奈椰子

bootstrap 开心档

前端leetcde算法面试套路之二叉树

js2030code

JavaScript LeetCode

大咖说·阿里云云效|效能治标不治本的三个陷阱的解析

大咖说

ThreadPoolExecutor源码细节探索

做梦都在改BUG

Java 多线程 线程池 ThreadPoolExecutor

通过 Istio、eBPF 和 RSocket Broker 深入探索服务网格

Kian.Lee

istio cncf ebpf sidecar-free rsocket

react源码中的协调与调度

flyzz177

React

大咖齐聚!OpenHarmony技术峰会豪华嘉宾阵容揭晓

OpenHarmony开发者

OpenHarmony

ChatGPT能做什么?(内附体验攻略)

FinFish

AI工程化 ChatGPT

有趣,在WSL2上运行VSCode

吴脑的键客

vscode WSL2

ChatGPT搜索与推荐之间的匹配问题

图灵社区

搜索引擎 深度学习‘’ ChatGPT

react源码中的hooks

flyzz177

React

RabbitMQ的高可用和高可靠

做梦都在改BUG

Java 高可用 RabbitMQ 消息中间件

ChatGPT会对开发领域有何影响?

FinFish

AI AIGC ChatGPT

横空出世!IDEA 版 API 接口神器来了,一键生成文档!

Liam

Java 后端 IDEA Java 分布式 API文档

实时数仓Hologres新一代弹性计算组实例技术揭秘

阿里云大数据AI技术

大数据 实时数仓 弹性计算 企业号 2 月 PK 榜

ChatGPT背后:从0到1,OpenAI的创立之路

OneFlow

人工智能 深度学习 openai ChatGPT

流批一体架构在快手的实践和思考

Apache Flink

大数据 flink 实时计算

GitHub典藏版!腾讯T14级牛人亲码的分布式数据库实践,再次爆火

做梦都在改BUG

Java 数据库 分布式

比较简单的ChatGPT体验攻略!

没有用户名丶

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