1. 课程导论:gRPC与缓存一致性的概念、为什么需要缓存一致性、课程目标与学习路径
1.1 什么是gRPC?
gRPC 是 Google 开源的高性能远程过程调用(RPC)框架,基于 HTTP/2 协议和 Protocol Buffers(protobuf)序列化协议。它支持双向流、流控、头部压缩和多路复用,是微服务间通信的主流选择之一。
| 特性 | 说明 |
|---|---|
| 传输协议 | HTTP/2(多路复用、头部压缩、服务器推送) |
| 序列化 | Protocol Buffers(二进制、高压缩、强类型) |
| 通信模式 | 一元、服务器流、客户端流、双向流 |
| 接口定义 | .proto 文件定义服务与消息,自动生成客户端/服务端代码 |
| 生态 | 负载均衡、健康检查、拦截器、认证、TLS |
1.2 什么是缓存一致性?
缓存一致性是指:当数据在多个缓存节点或缓存层与数据源之间复制时,所有副本在逻辑上保持相同值,且任何更新操作都能被后续读取操作及时感知。在分布式系统中,缓存一致性面临以下核心挑战:
- 写后读不一致:写入数据源后,缓存未失效或未更新,读取到旧值。
- 并发写冲突:多个服务同时更新同一缓存键,导致脏写或丢失更新。
- 缓存穿透/击穿/雪崩:缓存失效导致大量请求直接打到数据库。
- 跨服务缓存漂移:不同微服务各自维护缓存副本,更新不同步。
关键指标:缓存一致性通常用 最终一致性窗口(从更新到所有副本一致的时间)和 读脏概率 来衡量。gRPC 的强类型接口和流式能力为缩小一致性窗口提供了新的技术手段。
1.3 为什么需要缓存一致性?
在 gRPC 微服务架构中,缓存一致性直接影响系统的正确性、用户体验和运维成本。以下三个场景最能说明问题:
- 用户会话与权限:用户修改密码或角色后,若缓存未及时失效,其他服务仍按旧权限放行,造成安全漏洞。
- 库存与订单:电商场景下,库存缓存与数据库不一致会导致超卖或少卖,直接造成经济损失。
- 配置中心:动态配置更新后,各服务实例缓存未刷新,导致部分节点执行旧逻辑,引发线上故障。
| 场景 | 不一致后果 | gRPC 可提供的帮助 |
|---|---|---|
| 用户权限 | 权限绕过、越权操作 | 双向流实时推送权限变更事件 |
| 库存扣减 | 超卖、退款纠纷 | 一元 RPC 携带版本号做乐观锁 |
| 配置更新 | 灰度不一致、功能异常 | 服务器流批量推送配置快照 |
1.4 课程目标
本课程旨在帮助学员掌握在 gRPC 微服务架构中设计和实现缓存一致性的完整方法论。完成本课程后,你将能够:
- 理解缓存一致性的理论基础(CAP、BASE、最终一致性模型)。
- 掌握 gRPC 拦截器、流式通信、元数据传递等机制在缓存同步中的应用。
- 设计并实现基于 失效通知、版本号校验、写穿透 和 最终一致性补偿 的缓存方案。
- 使用 Redis、etcd 等中间件与 gRPC 集成,构建高可用的缓存一致性基础设施。
- 通过实战项目(电商库存、配置中心、用户会话)巩固所学知识。
1.5 学习路径与课程结构
课程共 30 章,分为四个阶段:
| 阶段 | 章节范围 | 核心内容 |
|---|---|---|
| 基础篇 | 1-6 | gRPC 核心概念、缓存一致性理论、一致性模型对比 |
| 策略篇 | 7-15 | 失效通知、版本号、写穿透、读写分离、最终一致性补偿 |
| 实战篇 | 16-24 | 电商库存、配置中心、用户会话、多级缓存、gRPC 拦截器集成 |
| 进阶篇 | 25-30 | 分布式锁、缓存一致性监控、混沌工程、性能调优、生产部署 |
学习建议:每章都包含可运行的代码示例和测试用例。建议在本地搭建 gRPC + Redis 环境,边学边练。基础篇的
.proto 文件和服务骨架会在后续章节反复使用,务必亲手生成并理解。
1.6 课程中的关键概念速查
在进入后续章节之前,建议先熟悉以下术语:
| 术语 | 定义 | 本课程中的角色 |
|---|---|---|
| Cache-Aside | 应用先读缓存,未命中则读数据库并回填缓存 | 基础模式,后续所有策略的起点 |
| Write-Through | 写操作同时更新缓存和数据库 | 保证强一致性,但写延迟增加 |
| 失效通知 | 数据更新后主动通知各缓存节点删除/刷新键 | gRPC 流式推送的典型应用 |
| 版本号 | 每条数据附带递增版本号,用于检测冲突 | 配合 gRPC 元数据实现乐观锁 |
| 最终一致性窗口 | 从更新发生到所有缓存副本一致的时间差 | 衡量方案优劣的核心指标 |
常见误区:不要试图在所有场景下都追求强一致性。gRPC 的流式能力虽然可以缩小一致性窗口,但网络分区和节点故障仍然存在。本课程会教你如何根据业务容忍度选择合适的一致性级别,而不是盲目追求“绝对一致”。