写点什么

DoorDash 重构多层缓存系统,提高性能并解决碎片化问题

  • 2023-11-10
    北京
  • 本文字数:884 字

    阅读完需:约 3 分钟

大小:420.76K时长:02:23
DoorDash重构多层缓存系统,提高性能并解决碎片化问题

DoorDash 重构了他们在所有微服务中使用的异构缓存系统,创建了一个通用的多层缓存,提供了一种通用的机制,解决了因采用碎片化缓存所带来的诸多问题。

 

缓存是一种常用的机制,不需要进行成本高昂的优化就可以提升系统的性能。DoorDash 工程师 Lev Neiman 和 Jason Fan 解释说,这在 DoorDash 的场景中尤为重要,因为对他们来说,实现业务逻辑比优化性能更重要。

 

遗憾的是,DoorDash 的不同团队使用了不同的缓存系统,包括CaffeineRedis Lettuce和 HashMap。这也意味着他们会一次又一次地经历和解决同样的问题,比如缓存过期、严重依赖 Redis、键模式不一致等。出于这个原因,DoorDash 的一个工程师团队开始为他们所有的微服务创建一个共享缓存库,从 DashPass 开始,这是一个由于流量增加而面临扩展挑战和频繁故障的关键服务。

 

第一步是基于两个 Kotlin 接口定义一个公共 API:CacheManager,为特定的键类型和回退方法创建新的缓存;CacheKey类,对键类型进行抽象。


这让我们可以使用依赖注入和多态性在后台注入任意逻辑,同时保持业务逻辑缓存调用的统一性。

 

在尽力保持缓存简单的同时,DoorDash 工程师选择了一种包含三层的多层设计,进一步提高性能优化的可能性。第一层称为请求本地缓存,数据驻留在哈希映射中,其生存期受请求约束。第二层为本地缓存,使用 Caffeine 在同一 Java 虚拟机的所有工作线程之间共享数据。第三层是 Redis 缓存,同一 Redis 集群中的所有 pod 都可以使用 Redis Lettuce 访问。

 

这个多层缓存系统的一个重要特性是运行时控制,每个层都有,可以打开或关闭缓存,设置缓存生存时间(TTL)或是影子模式(在这种模式下,会将一定比例的缓存请求与真实来源进行比较)。此外,缓存系统还支持指标收集,包括命中和未命中、缓存延迟和日志记录。

 

在缓存系统准备就绪并在 DashPass 中达到预期效果后,他们就把它逐步推广到组织的其他部门,并就何时使用、如何使用或者是何时不使用提供明确的指导。

 

根据 Neiman 和 Fan 的说法,新的缓存系统提高了他们所有服务的可扩展性和安全性,同时也方便了团队在必要时采用缓存来提高性能。

 

原文链接:

https://www.infoq.com/news/2023/10/doordash-multilayered-cache/

2023-11-10 08:0048651

评论

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

什么是开源的「第一性原理」?

腾源会

开源 腾源会

2022 ARTS|Week 08

MiracleWong

算法 写作 ARTS 打卡计划

「架构实战营」模块八《如何设计贴合业务的高性能高可用中间件系统》作业

DaiChen

作业 「架构实战营」 模块八

极速生成缩略图,Serverless 支撑赛事转播锁定冬奥亮点

阿里巴巴云原生

阿里云 Serverless 云原生 冬奥会 函数计算FC

[架构实战营]模块八 消息队列Mysql表格设计

Vincent

「架构实战营」

模块八作业

李晓笛

「架构实战营」

架构实战模块八作业

Anlumina

「架构实战营」

【架构实战营】模块八:命题作业

wgl

「架构实战营」

消息队列基于Mysql存储表设计

tony

「架构实战营」

卫星商业价值的尽头,谁来善后?

脑极体

EventBridge消息路由|高效构建消息路由能力

阿里巴巴云原生

阿里云 云原生 消息队列 EventBridge

Meta启示:AI是通往元宇宙的关键变量

脑极体

架构实战营4期-模块八作业

木几丶

「架构实战营」

Lyft微服务研发效能提升实践 | 3. 利用覆盖机制在预发环境中扩展服务网格

俞凡

研发效能 大厂实践 2月月更 lyft

架构训练营模块八作业

zhongwy

架构训练营模块八作业

沈益飞

架构训练营 架构师训练营 4 期

模块八作业

hunk

云原生训练营

架构实战营第 4 期 -- 模块八作业

烈火干柴烛灭田边残月

架构实战营

Go 语言入门很简单:Go 如何面向对象

宇宙之一粟

面向对象 Go 语言 2月月更

Thinkphp最新版本漏洞分析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

工作想法小计(3):2/21 - 2/25

非晓为骁

个人成长 工作

架构实战营 模块八

架构实战营 「架构实战营」 模块八

架构实战营 4 期第八模块作业

jialuooooo

架构实战营

模块八作业-设计消息队列存储消息的MySQL表

CH

架构实战营 #架构实战营 「架构实战营」

Go 语言入门很简单:从 goroutine 出发到并发

宇宙之一粟

Go 语言 goroutine 2月月更

Vue3 过10种组件通讯方式

德育处主任

Vue 3 vuex 组件通信 Pinia mitt.js

【安全漏洞】深入剖析CVE-2021-40444-Cabless利用链

H

XSS练习小游戏和答案参考

喀拉峻

网络安全

设计消息队列存储消息数据的 MySQL 表格

AUV

「架构实战营」

模块八

Geek_59dec2

云原生训练营-Week02

jjn0703

云原生训练营

DoorDash重构多层缓存系统,提高性能并解决碎片化问题_微服务_Sergio De Simone_InfoQ精选文章