文章目录

  • 一、引言
  • 二、读服务的功能性需求
  • 三、两大基本设计原则
    • 1. 架构尽量不要分层
    • 2. 代码尽可能简单
  • 四、实战方案:懒加载架构及其四大挑战
  • 五、改进思路
  • 六、总结与思考题

在这里插入图片描述


一、引言

在任何后台系统设计中,「读多写少」的业务场景占据主流:浏览商品、刷资讯、访问用户画像……相比写操作,读操作的并发压力更大、对性能的要求也更苛刻。为此,我们需要从 读服务(或称读接口/读业务)的角度,系统地探讨如何在高可用、高性能和超高 QPS(上万~百万峰值)的场景下构建稳健的架构。

接下来我们将围绕读服务的功能特点、两大基本设计原则,以及行业中常见的懒加载架构及其四大挑战,快速掌握实战思路。


二、读服务的功能性需求

读服务在执行流程上,基本是 无状态无副作用 的:

  1. 从持久层(数据库、Redis、Elasticsearch 等)获取原始数据;
  2. 简单加工或直接返回给前端。

因此,读服务必须满足三大指标:

  • 高可用:任何业务都需保证持续在线;
  • 高性能:TP999 必须控制在 100ms 以内;
  • 超高 QPS 支撑:满足上万至百万级峰值请求。

只有确保这三点,才能给用户带来流畅的体验,避免卡顿或秒级延迟。


三、两大基本设计原则

1. 架构尽量不要分层

传统分层(服务层→数据访问层→存储)虽然能降低代码耦合,但网络调用(RPC/HTTP)往返会成倍消耗延迟。监控数据显示,分层架构下读请求的 TP99、TP999 指标往往翻倍,且毛刺明显增多。

优化思路:将数据访问层编译进同一进程,去除网络传输环节。

内嵌后,TP999 可下降近 50%,平均延迟降低 20%~30%,部署成本也大幅下降。

在这里插入图片描述


2. 代码尽可能简单

读服务链路虽然清晰,但模型层次多、映射开销大。引入过多框架、全量日志打印、全量字段查询都会拖慢性能。

  • 慎用反射/Codegen 框架:如 Spring Bean.copyProperties,反射性能开销高。
  • 精细化日志:只打印关键信息,避免 JSON 序列化全量对象。
  • 按需字段查询:MySQL 避免 SELECT *,Redis 使用 Hash 并定位字段。

简化至:参数校验 → 查询构建 → 存储反序列化 → 业务加工 → 返回,把每一步都做到最轻量。
在这里插入图片描述


四、实战方案:懒加载架构及其四大挑战

最常见的读服务方案:缓存(Redis)+ 数据库(MySQL) 的懒加载模式:

  1. 服务先查 Redis;
  2. 未命中则读数据库并写回缓存(带过期时间);
    在这里插入图片描述

该方案实现成本低、思路清晰,但在高并发下会暴露以下问题:

  1. 缓存穿透

    • 恶意请求不存在的 key → 每次都落到数据库,易打挂。 符 + 参数前置校验(如 IP、MAC、KOAP token),拦截非法请求。
  2. 缓存雪崩

    • 同期过期后大量请求打到数据库。
    • 解决:过期时间加盐,避免同一时刻热点 key 大规模失效。
  3. 实时性不足

    • 依赖过期失效机制,更新延迟。
    • 改进可在写操作后主动推送变更,但需处理数据库与缓存更新顺序及分布式事务漏失。
      在这里插入图片描述
  4. 性能毛刺

    • 缓存过期瞬间穿透到数据库,延迟从毫秒级飙升至秒级。
    • 可以借助全量缓存和预热机制以平滑毛刺。

五、改进思路

利用 全量缓存消息队列同步预热与降级 等技术,打造真正的毫秒级读服务。请参考下篇博客 。


六、总结与思考题

  • 两大原则:架构不分层、代码简单。
  • 懒加载四大问题:穿透、雪崩、实时性、毛刺。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/81643.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/81643.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/81643.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

永磁同步电机控制算法--基于PI的位置伺服控制

一、原理介绍 永磁同步伺服系统是包含了电流环、速度环和位置环的三环控制系统。 伺服系统通过电流检测电路和光电编码器检测电动机三相绕组电流和转子位置θ,通过坐标变换,计算出转矩电流分量iq和励磁电流分量id。 位置信号指令与实际转子位置信号的差…

linux系统线程实现原理浅析

背景 对进程和线程的理解,之前一直都是凭一些零碎不完整的信息在理解; linux的进程和线程基本上一样,线程是轻量级进程,彼此有关联又独立。 得亏内核支持的好,写用户态程序可以不依赖于实现的理解,只需要…

MySQL连接报错处理:1130-host ... is not allowed to connect to this MySql server

在MySQL安装完成后,很多开发者会遇到这样一个问题: 错误代码 1130:host xxx.xxx.xxx.xxx is not allowed to connect to this MySql server 这个错误通常出现在你尝试通过远程工具(如 Navicat、DBeaver 等)连接 MySQL …

Linux系统之----进程控制

1.进程创建 进程创建部分由于就是fork函数,还有写时拷贝,在上一篇已经讲述过了,这里不在进行赘述,有疑问的读者可以前往上一篇博文《Linux系统--程序地址空间》中阅读! 这里在多说一嘴写时拷贝吧 我们可以对比一下写…

Spring框架的设计目标,设计理念,和核心是什么 ?

Spring框架是一个为简化企业级应用开发而设计的开源框架,它提供了全面的基础设施支持,使得Java应用开发更加简单、快速和可维护。下面我将详细解释Spring框架的设计目标、设计理念以及核心组件。 设计目标 简化Java企业级应用开发:通过提供…

Red Hat6.4环境下搭建DNS服务器

DNS服务器(Domain Name System Server)是互联网中用于将域名(如 www.example.com)解析为IP地址(如 192.0.2.1)的服务器。它是互联网基础设施的重要组成部分,帮助用户通过易于记忆的域名访问网站…

Nginx核心功能 02

目录 Nginx代理技术核心概念 (一)正向代理(Forward Proxy) 1. 基本定义 2. 技术原理 3. 应用场景 (二)反向代理(Reverse Proxy) 1. 基本定义 2. 技术原理 3. 应用场景 一、…

关于Python:3. Python标准库和常用模块

1. os 和 sys(系统编程基础) 这两个模块是进行系统层面操作(如文件管理、路径处理、环境变量访问等)必不可少的工具。 os 模块 os 主要是用于与操作系统交互的,比如: 文件和目录操作 获取系统信息 运行…

Java基于SaaS模式多租户ERP系统源码

目录 一、系统概述 二、开发环境 三、系统功能介绍 一、系统概述 ERP,全称 Enterprise Resource Planning 即企业资源计划。是一种集成化的管理软件系统,它通过信息技术手段,将企业的各个业务流程和资源管理进行整合,以提高企业…

个人健康中枢的多元化AI网络革新与精准健康路径探析

引言 随着数字化转型的深入推进,个人健康中枢作为集成化健康管理系统,正在从传统的单一功能向多元化的AI驱动方向快速发展。在这一背景下,新兴网络硬件技术,特别是DPU(数据处理单元)和全光网络的出现,为个人健康中枢的革新提供了前所未有的机遇。本研究将深入探讨这些技…

AI跑得快,MCP来加速——模型计算平台在训练与推理中的硬核作用

AI跑得快,MCP来加速——模型计算平台在训练与推理中的硬核作用 一、引言:AI是“铁人三项”,但训练+推理常常“掉链子” 如今的人工智能系统越来越强,像ChatGPT、Stable Diffusion、Segment Anything等模型不断刷新技术天花板。但你是否也注意到: 明明模型设计得挺好,训练…

《MATLAB实战训练营:从入门到工业级应用》工程实用篇-自动驾驶初体验:车道线检测算法实战(MATLAB2016b版)

《MATLAB实战训练营:从入门到工业级应用》工程实用篇-🚗 自动驾驶初体验:车道线检测算法实战(MATLAB2016b版) 大家好!今天我要带大家一起探索自动驾驶中一个非常基础但又至关重要的技术——车道线检测。我…

模型部署——cuda编程入门

CUDA中的线程与线程束 kernel是在device上线程中并行执行的函数&#xff0c;核函数用__global__符号声明&#xff0c;在调用时需要用<<<grid_size, block_size>>>来指定kernel要执行的线程数量。在CUDA中&#xff0c;每一个线程都要执行核函数&#xff0c;并…

WordPress不支持中文TAG标签出现404的解决方法

我们在后台编辑文章时输入中文标签会发现出现404的情况&#xff0c;其实中文TAG标签链接无法打开的原因是WordPress不支持中文的编码。那么解决的方法也很容易&#xff0c;只要改代码让WordPress能支持中文的编码形式&#xff0c;也就是UTF-8和GBK编码即可&#xff0c;无需用到…

金融信贷公司所需的技术和风控体系及其带来的价值

金融信贷公司的技术架构通过集成传统大型机系统与现代数据平台&#xff0c;能够有效支持金融信贷业务的运作&#xff0c;同时通过大数据、ETL、报表开发、数据仓库等技术为公司带来更高效的数据驱动决策、精准的风控分析和更灵活的业务支持。 一、公司技术架构 数据仓库架构&…

《AI大模型应知应会100篇》第43篇:大模型幻觉问题的识别与缓解方法

第43篇&#xff1a;大模型幻觉问题的识别与缓解方法 摘要 当AI系统自信满满地编造"量子计算机使用香蕉皮作为能源"这类荒谬结论时&#xff0c;我们不得不正视大模型的幻觉问题。本文通过15个真实案例解析、6种检测算法实现和3套工业级解决方案&#xff0c;带您掌握…

计算方法实验五 插值多项式的求法

【实验性质】 综合性验 【实验目的】 掌握Lagrange插值算法、Newton插值算法&#xff1b;理解Newton插值算法相对于Lagrange插值算法的优点。 【实验内容】 先用C语言自带的系统函数sin x求出 的值&#xff0c;然后分别用Lagrange、Newton方法求出的值&#xff0c;并与用…

文献总结:TPAMI端到端自动驾驶综述——End-to-End Autonomous Driving: Challenges and Frontiers

端到端自动驾驶综述 1. 文章基本信息2. 背景介绍3. 端到端自动驾驶主要使用方法3. 1 模仿学习3.2 强化学习 4. 测试基准4.1 真实世界评估4.2 在线/闭环仿真测试4.3 离线/开环测试评价 5. 端到端自动驾驶面临的挑战5.1 多模态输入5.2 对视觉表征的依赖5.3 基于模型的强化学习的世…

PostgreSQL:pgAdmin 4 使用教程

pgAdmin 4 是一个用于管理和维护 PostgreSQL 数据库的强大工具。它提供了一个图形化界面&#xff0c;使用户能够轻松地连接到数据库、创建表、运行 SQL 语句以及执行其他数据库管理任务。 安装和使用 安装 pgAdmin 4 安装 pgAdmin 4 非常简单。下载并运行安装程序&#xff0…

Java学习手册:关系型数据库基础

一、关系型数据库概述 关系型数据库是一种基于关系模型的数据库&#xff0c;它将数据组织成一个或多个表&#xff08;或称为关系&#xff09;&#xff0c;每个表由行和列组成。每一列都有一个唯一的名字&#xff0c;称为属性&#xff0c;表中的每一行是一个元组&#xff0c;代…