2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论

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

设计模式-值类型与引用类型、深拷贝与浅拷贝、原型模式详解

C++后台开发

数据结构 设计模式 后端开发 Linux服务器开发 C++开发

NodeJS 实战系列:DevOps 尚未解决的问题

光毅

DevOps nodejs

ChatGPT十问十答 | 图解ChatGPT

涛哥 数字产品和业务架构

人工智能 ChatGPT

在 JavaScript 如何下载文件

devpoint

JavaScript Blob download

DNS 原理及大规模高性能监测

郑州埃文科技

DNS

贝叶斯AB测试

俞凡

最佳实践 ab测试

开源ChatGPT要来了;软件2.0智能革命;GLM、Diffusion模型大加速

OneFlow

人工智能 深度学习

状态机设计举例

timerring

FPGA

Python 发展趋势:与 Rust 深度融合、更易于编写 Web 应用

Python猫

Python

使用开源实时监控系统 HertzBeat 5分钟搞定对 Mysql 数据库监控告警

TanCloud探云

Java 数据库 GitHub 开源 数据库监控

Dromara HertzBeat 开源社区新晋两位 Committer

TanCloud探云

Java GitHub 开源 后端 开源社区

【SpringBoot】SpringBoot常用注解

No8g攻城狮

Spring Boot 2 #面试

2023-02-11:给你两个整数 m 和 n 。构造一个 m x n 的网格,其中每个单元格最开始是白色, 请你用 红、绿、蓝 三种颜色为每个单元格涂色。所有单元格都需要被涂色, 涂色方案需要满足:

福大大架构师每日一题

算法 rust 福大大

如何做总架构师

agnostic

总架构

Ruby on rails入门

阿呆

ruby-on-rails

支撑MVP,架构师需要做什么

agnostic

MVP

ThreadLocal源码分析及避坑指南

喝水不抬头

软件测试/测试开发 | Web测试方法与技术之CSS讲解

测试人

软件测试 自动化测试 测试开发 Web自动化测试 web测试

极客时间架构训练营模块七-王者荣耀商城异地多活架构设计

张Dave

Kubernetes环境cert-manager部署与应用

Galen Suen

Kubernetes TLS cert-manager Certificate Let's Encrypt

怎样做新人培训

Joseph295

2023最新Python阅读书籍推荐

kcodez

Python

架构训练营 - 模块四作业

Sam

架构实战营

大家心心念念的RocketMQ5.x入门手册来喽

中间件兴趣圈

RocketMQ rocketmq5

湖仓一体电商项目(二十):业务实现之编写写入DM层业务代码

Lansonli

湖仓一体电商项目

springboot自动配置原理

喝水不抬头

四点原因,Zoom裁员15%,视频会议甜蜜期结束

B Impact

运维训练营第十三课作业

好吃不贵

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