最后更新:2026-03-26
统一认证与鉴权,灰度策略与地域就近接入。
静态加速、DDoS 防护、限流熔断;把“攻击”和“尖峰”拦在系统外。
路由、鉴权、统一日志、请求追踪;把复杂性从业务服务挪到治理层。
按领域拆分,服务间 RPC/HTTP;BFF 面向端做聚合以降低前端复杂度。
削峰填谷、解耦;用幂等与去重保障“至少一次”语义下的正确性。
注册与健康检查、动态配置;配合熔断/限流实现弹性与自愈。
热点数据加速;分布式锁与限流器常落在这里(需要续租与防误删)。
主从复制、分片路由;跨分片事务复杂,常用最终一致/补偿替代强一致。
图片/音视频/附件;多副本/纠删码,冷热分层与生命周期策略降低成本。
滚动发布、蓝绿/金丝雀;多可用区容灾,业务无感切流。
统一链路追踪(TraceId),以 SLO 驱动告警与容量规划。
配置中心、服务注册发现、租约与 Watch 通知等能力的稳定支撑。
Set-Cookie 下发,例如 Set-Cookie: session_id=abc123; HttpOnly; Secure; SameSite=Lax; Max-Age=3600。Cookie: session_id=abc123 回传给服务端。HttpOnly(JS 无法访问,防 XSS)、Secure(仅 HTTPS 发送)、SameSite(辅助防 CSRF)、Max-Age/Expires(控制有效期)等属性强化安全性。user_id 这类业务身份字段,否则被篡改后会造成严重越权问题。session_id 的 Cookie。{ session_id: "abc123", user_id: 123|null, is_login: true|false, expire_at: 1710000000 },本质上是一个承载用户状态的容器session_id,通过 Set-Cookie: session_id=xyz; HttpOnly; Secure 发给浏览器,之后每次请求浏览器都会自动带上 Cookie: session_id=xyz。session_id → 查 Redis / 内存 / 数据库 → 还原出“这是谁、是否登录、权限有哪些”,敏感数据始终只保留在后端受控环境中,不直接暴露给客户端。xxxxx.yyyyy.zzzzz——用两个点切成三段 header.payload.signature,由服务器用密钥签名后发给前端;后续请求在请求头里带上 Authorization: Bearer <token>,后端校验签名即可确认用户身份。
HS256)。通俗理解:像身份证上的“发证机关说明”——告诉大家:这是一张用什么算法做出来的证件。exp 等。注意:常见实现里这部分往往只是 Base64 编码,不是加密,任何人解码都能看到明文,因此绝对不能放密码等敏感机密。通俗理解:像身份证正面——姓名、角色、到期日都写在上面。user_id 等字段即可。结论:服务端只需安全保管密钥/公钥配置,不必为每一次会话在库里常驻一条记录(仍可用黑名单、短过期、refresh 等做风控,见下文代价)。http://localhost:3000,FastAPI 跑在 http://localhost:8000;协议/域名/端口有一个不一样),浏览器的同源策略与跨域:就会把这次跨域请求当成“有风险”,如果后端没显式允许默认不让你的前端自由访问后端资源。allow_origins=['http://localhost:3000']、allow_methods=['*']、allow_headers=['*'];这相当于给来自指定源的浏览器请求发了一张“通行证”,告诉它“这是可信前端,可以带着 JWT 来调用接口”。session_id 大;因此在单体、强安全、并发压力一般的后台里仍然适合用 Cookie + Session,而在前后端分离、微服务、高并发 API、移动端/第三方接入、需要跨域的系统里,JWT 带来的“无状态、高扩展、跨端统一”优势更大,通常会选用“短期 access_token(JWT)+ 较长期 refresh_token”的组合方案。access_token)→ 用房卡开门(访问资源)。门锁只认卡,不需要你反复出示身份证。code。code + client_secret 发送给授权服务器,授权服务器 把 Access Token 直接塞给你的后端(在 OAuth2 的体系中,授权服务器通常拥有一个专门的处理端点,技术上称为 Token Endpoint令牌端点。)。access_token(常配 refresh_token 用于续期)。Authorization: Bearer <access_token>,资源服务器验证后返回数据。access_token 常用 JWT。
client_secret 让授权服务器确认“真的是这个客户端”来换取令牌。uid % 10 < 1 的用户进入新版本,可以保证同一用户每次访问都稳定落在同一版本。将静态资源缓存到边缘节点,用户就近访问,显著降低首包时间与跨地域时延; 其中“边缘节点”是部署在离用户更近网络位置的 CDN 服务器,用于在源站之外提前响应内容请求; 源站是内容的权威来源与回源入口(负责生成/更新数据),CDN 服务器是其缓存与分发副本(命中则直接返回,未命中再回源拉取); 同时 CDN 还能吸收大规模突发流量,减少源站带宽与连接压力。
基于规则与行为分析拦截 SQL 注入、XSS、命令注入、恶意爬虫等应用层攻击; 通过虚拟补丁与策略更新,在业务未发版时快速降低漏洞暴露风险。
按 IP、用户、Token、接口维度施加 QPS/并发阈值( 令牌桶、漏桶、 滑动窗口); 抑制刷接口、暴力破解与突发洪峰,保障核心接口可用并防止下游雪崩。
example.com,由 Nginx 决定请求最终落到哪个服务。example.com/(或 /about、/dashboard)→ 转发到 Next.js(如 127.0.0.1:3000)。example.com/api/... → 转发到 FastAPI(如 127.0.0.1:8000)。0-5000,B 管 5001-10000,C 管 10001-16383。扩容到 D 时,只迁部分槽位给 D,而不是全量洗牌。slot = CRC16(key) % 16384,再把请求直接发到负责该槽位的节点。{} 指定同一哈希标签,例如 {user100}:order 与 {user100}:balance,Redis 只对 {user100} 计算槽位,因此两者必然落到同一槽位,便于多 Key 操作。Null → 回写“空记录”(如 value=empty)→ 设置短 TTL。expire_at;请求发现逻辑过期时,先返回旧值保证秒回,再异步线程/任务刷新缓存。
60 ± rand(1,10) 分钟,把失效时间打散,避免同一秒集中回源。user_id % 4,查 user_id=1001 时会直接命中第 1 号分片,只查一个库,不会 4 个库全扫。user_id/tenant_id 这类高基数字段;如果业务大多按用户查询,就优先按用户分片;时间字段更适合做分区裁剪,通常不单独作为唯一分片键。INSERT/UPDATE/DELETE 发生时,系统先把变更顺序追加到 WAL 并落盘,然后才允许事务提交。bgwriter 会持续地把共享缓冲区里的部分脏页提前刷盘,目的是在业务高峰时减少后端进程自己刷盘的概率,降低抖动;checkpoint 会周期性(或 WAL 达到阈值)触发,把某个时间点之前必须持久化的脏页推进到磁盘,并写入 checkpoint 记录。恢复时数据库从最近 checkpoint 开始回放 WAL,恢复窗口更短。简单说:bgwriter 负责平时分摊写压力,checkpoint 负责定期收口与缩短崩溃恢复时间。负责部署弹性与跨 AZ 容灾。
统一观测系统健康与故障定位。
作为配置、注册与租约治理底座。
把分布式锁想成“连锁店里洗手间的唯一钥匙”:同一时间只能有一个人拿到钥匙进入。
SET NX PX + owner token + Lua 原子删锁)、etcd(lease + txn 原子比较交换)、ZK(临时顺序节点)。把分布式事务想成“点餐”:收银(服务 A)收了钱,后厨(服务 B)必须出餐;钱收了餐没出就是事故。跨服务要做到“要么都成功,要么都失败”,代价通常很高。
Try 预留资源 → Confirm 确认 → Cancel 取消;一致性更强但对业务改造大。把分布式计算想成“切土豆”:100 斤土豆一个人切很久,10 个人并行能快很多。系统要做的不止是并行,还要能容错(有人中途停工怎么办)与控流(别让订单堆成山)。
checkpoint(断点续做)与一致处理语义(at-least-once / exactly-once 的成本边界)。把数据库想成“菜单”:一张纸写不下就分成多本(分片),怕丢就复印多份(复制)。你获得的是更高可用与更大容量,但要接受更复杂的一致性与查询成本。
join/事务很贵(通常需要在业务层改写)。把发布想成“新菜试卖”:不可能一夜之间全城门店全部换菜单。生产发布的核心是控制风险半径:先小范围试、观察指标、随时回滚。
把分布式存储想成“海量食材仓库”:不止要存得下,还要取用快、坏了不丢、成本可控。不同存储形态各司其职:对象存储更适合大文件,块存储更适合数据库,分布式文件系统更适合共享读写。