CQRS
数据库读写分离、本地缓存和分布式缓存本质上都是 CQRS,即将写操作和读操作拆分到不同路径;写数据存储负责可靠更新,读数据存储负责高效查询,二者通过消息队列、主从复制、binlog 监听或定时任务同步数据,从而提升高并发读能力,但代价是架构复杂度增加和读数据存在最终一致性延迟。 一、核心主线 本节是对前面高并发读方案的抽象总结。 无论是: 数据库读/写分离; 本地缓存; 分布式缓存;...
Hi,这里是达达芬奇。欢迎来到我的 Blog —— 我在这里沉淀学习笔记、技术实践和项目复盘,偶尔也记录一些生活里的观察与思考。希望这些文字能对你有所帮助。
数据库读写分离、本地缓存和分布式缓存本质上都是 CQRS,即将写操作和读操作拆分到不同路径;写数据存储负责可靠更新,读数据存储负责高效查询,二者通过消息队列、主从复制、binlog 监听或定时任务同步数据,从而提升高并发读能力,但代价是架构复杂度增加和读数据存在最终一致性延迟。 一、核心主线 本节是对前面高并发读方案的抽象总结。 无论是: 数据库读/写分离; 本地缓存; 分布式缓存;...
分布式缓存通过 Redis 等系统解决本地缓存无法共享和可扩展性差的问题,典型读流程是先查缓存、未命中再查数据库并写回缓存;同时需要通过缓存空值和布隆过滤器防止缓存穿透,通过随机过期时间和 Redis 高可用防止缓存雪崩,并采用“先更新数据库,再删除缓存”的策略尽量保证缓存与数据库最终一致。 一、核心主线 本节讲的是高并发读场景的第三种通用方案: 分布式缓存 。...
本地缓存通过把远程数据保存在服务进程内存中提升高并发读取性能,并通过 FIFO、LFU、LRU、W-TinyLFU 等策略管理有限的缓存空间;其中 W-TinyLFU 综合近期访问和访问频率提高命中率,而 SingleFlight 则将同一个 Key 的并发缓存未命中请求合并为一次数据库访问,避免热点数据失效造成缓存击穿。 一、核心主线 本节讲的是高并发读场景的第二种通用方案: 本地缓存 。...
数据库读写分离通过 Master 承担写请求、Slave 承担读请求来扩展高并发读能力,但主从复制会带来主从延迟问题,因此需要根据业务一致性要求选择同步复制、强制读主或会话分离等方案,在读性能、写性能和数据一致性之间做权衡。 一、核心主线 高并发读场景的第一种通用方案: 数据库读/写分离 。 大多数互联网应用都是读多写少: 1 2 3 刷帖请求 > 发帖请求 浏览商品请求 > 下单请求...
高并发并不只是“能扛很多请求”,而是系统在海量请求下仍然具备高性能、高可用性和可扩展性。 一、核心主线 本节主要回答三个问题: 1 2 3 4 5 什么样的系统才算高并发系统? ↓ 如何衡量高并发系统设计得好不好? ↓ 高并发场景应该如何分类? 二、形成高并发系统的三个必要条件 1. 高性能 高性能表示系统具备较强的并行处理能力。 它的价值体现在两个方面: 节约硬件资源...
消息队列是分布式系统中最重要的中间件之一。 一、核心主线 它在生产者和消费者之间增加一个消息存储与转发层: 1 2 3 4 5 生产者 ↓ 发送消息 消息队列 ↓ 消费消息 消费者 生产者只负责把消息投递到队列,不需要等待消费者立即处理;消费者则可以根据自身能力选择消费消息的时机和速度。 本节重点介绍两部分内容: 消息队列的三大用途: 异步化、流量削峰、服务解耦 ; Kafka...
关系型数据库并不擅长解决所有数据存储问题。面对海量数据、动态字段、全文检索、复杂关系查询和水平扩展等特殊需求,需要选择更合适的 NoSQL 数据库。
LSM Tree(Log-Structured Merge Tree,日志结构合并树)是一种 面向高并发写入优化,同时兼顾查询效率的键值存储模型 。 一、核心主线 LSM Tree被广泛应用于 BigTable、HBase、Cassandra、TiDB 等 NoSQL 或分布式数据库中。 核心思路是: 将随机写转换为内存写和磁盘顺序写,以充分发挥内存与磁盘的性能优势。 整体数据流转过程: 1 2...
大型互联网系统如何将 Redis 从单机内存数据库,逐步演进为高性能、高可用、可水平扩展的分布式存储系统。
大型互联网后台中,MySQL 作为关系型数据库如何承担核心数据存储,以及如何通过主从复制、MHA、MMM、MGR 等方案构建高可用架构。