惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Martin Fowler
Martin Fowler
aimingoo的专栏
aimingoo的专栏
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
S
Securelist
博客园 - Franky
P
Proofpoint News Feed
量子位
雷峰网
雷峰网
Security Latest
Security Latest
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Latest news
Latest news
L
Lohrmann on Cybersecurity
W
WeLiveSecurity
月光博客
月光博客
Hacker News: Ask HN
Hacker News: Ask HN
宝玉的分享
宝玉的分享
GbyAI
GbyAI
小众软件
小众软件
M
MIT News - Artificial intelligence
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Secure Thoughts
The Cloudflare Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
IT之家
IT之家
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Threat Research - Cisco Blogs
Stack Overflow Blog
Stack Overflow Blog
有赞技术团队
有赞技术团队
Attack and Defense Labs
Attack and Defense Labs
Y
Y Combinator Blog
Scott Helme
Scott Helme
O
OpenAI News
Know Your Adversary
Know Your Adversary
AWS News Blog
AWS News Blog
阮一峰的网络日志
阮一峰的网络日志
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
V
Vulnerabilities – Threatpost
博客园 - 【当耐特】
K
Kaspersky official blog
Microsoft Azure Blog
Microsoft Azure Blog
S
SegmentFault 最新的问题
Forbes - Security
Forbes - Security
腾讯CDC
NISL@THU
NISL@THU
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Tailwind CSS Blog

ypingcn

为什么我还在用 Firefox - ypingcn [streamscharts]2025年全年全球直播平台报告 [streamscharts]2025年全年全球直播平台报告 [streamscharts]2025年Q4第四季度全球直播平台报告 [streamscharts]2025年Q4第四季度全球直播平台报告 奇点前尘:回望人工智能2025 奇点前尘:回望人工智能2025 [streamscharts]2025年Q3第三季度全球直播平台报告 [streamscharts]2025年Q3第三季度全球直播平台报告 在工作中使用 AI 辅助 在工作中使用 AI 辅助 连麦、PK和语音房的实现设计思路 连麦、PK和语音房的实现设计思路 数据密集型应用系统设计笔记 数据密集型应用系统设计笔记 Podcast 是新一代的 Blog?| 播客收听体验分享 Podcast 是新一代的 Blog?| 播客收听体验分享 2022 年终总结 2022 年终总结 追「个人养老金」热点?不如多了解观望看看 追「个人养老金」热点?不如多了解观望看看 静态页面也能实现短链接 | 个人博客历史(二) 何为同路人? | 人生七年(一) 简化开发逻辑的用户属性服务设计 用户权限服务的设计 博客更新记录总结 | 个人博客历史(一) blade build 在微服务开发中的应用 如何高效地搜索 投顾服务初观察 The South 18 年春招记录 2017 年终总结 Firefox Quantum 引发的思考 续写 《像我这样的一个女子》 用 WPS 生成文档目录 用 nodePPT 完成网页演示 Dr.com 认证的校园网里使用 WiFi 初试 ssh 命令 MATLAB 选修课上的一些有趣的代码 用 Jekyll 在 Github 上搭建一个简易博客 Hello! Github Page 感谢
使用本地缓存优化微服务
ypingcn · 2022-01-30 · via ypingcn
[AD] -- 下方为内容广告,点击支持作者,想过滤广告? -- [AD]

一 背景

微服务相较于整体式架构而言具有易拓展、敏捷开发、在各个小型独立团队之间职责明确的特点。相关接口在日常维护过程中,根据业务发展情况进行优化是一项必要且成效明显的工作。

由于业务逻辑中会经常进行信息查询(例如查询用户信息/获取活动配置等),这部分信息的变动并不是很频繁,如果每次都需要走 RPC 调用查询的话,就会多额外的网络请求和资源消耗。特别是在有突发流量的情况下,上游接口调用的暴增会向下传递给下游服务,用户信息等基础信息的查询量会因此而暴增。如果用户信息服务出现瓶颈,上游服务都会不同程度地受到影响,从而降低用户体验甚至导致事故。使用网络调用代替本地调用在查询这种相对稳定不变化的结果无疑是一种资源的浪费。

优化可以从这种额外的网络请求和资源消耗做起,使用本地内存缓存取代远程查询进行优化,这种缓存对服务的优化效果是十分显著的。

二 优化方式

2.1 在用户接入侧进行缓存

在实际业务中,有部分请求都是在获取配置等公用信息。这种对一致性容忍度比较高的接口结果可以在用户接入点侧进行缓存,起到类似于动态 CDN 的效果。缓存需要一个唯一 key 来对不同用户进行区分从而进行缓存,这种唯一 key 可以从多个接口参数值获取,根据一定算法得出。例如地区维度的接口可以将地区代码设置成唯一 key ,相同地区的请求获取相同的配置。这种做法能够得到 20%-80% 的缓存命中率,优化削峰填谷效果明显。

有一个额外的问题是,从接口参数获取唯一 key 的做法无法兼容到需要服务端 ABTest 的场景。 这种情况需要将缓存逻辑继续后置给业务服务处理,而不是在用户接入侧缓存。

2.2 缓存其他微服务接口的结果

可以在内存中缓存相关的接口结果。例如用户信息这种极少变化的接口结果就可以用 LRU 内存缓存下来,如果业务场景可以接受的话,缓存有效期时间可以设置 5 分钟甚至更长时间。而排行榜这种对有效性要求比较高的场景下,设置秒级的有效期更能符合业务需求。

还可以在这种缓存的逻辑下增加降级熔断逻辑,避免业务异常流量继续向下游传递。

三 实现细节

3.1 缓存雪崩、击穿的问题

本地内存缓存与下游微服务结果之间,跟数据库(如 MySQL )与分布式缓存工具(如 Redis )搭配使用一样,都会有缓存过期带来的雪崩、击穿问题。

雪崩问题可以在实现细节里增加一个额外的随机过期时间,将数据过期的时间尽可能地错开避免集中向下游服务请求导致雪崩。

而击穿问题则是因为热点数据的过期导致的,这种可以使用singleFlight合并查询等方法,将并发而来的多个同类型的请求合并成一个,只向下游发送一次请求来复用结果。

3.2 一致性问题

可以使用内存进行缓存的时候,只能是对一致性要求不高、数据变动少的场景。因为微服务架构下,多节点之间的缓存同步与刷新是一种事倍功半的工作,只能追求最终一致性。

应用场景简化了一致性的要求,所以只需要做到 淘汰缓存 + 先查询再异步更新缓存 的方法。

[AD] -- 下方为内容广告,点击支持作者,想过滤广告? -- [AD]