系统设计:十万级并发电商商品详情页,如何设计
目录
一、架构核心策略:动静分离
二、多级缓存结构
三、解决四大缓存痛点
四、动态数据的高并发设计
五、服务兜底与高可用架构
一、架构核心策略:动静分离
1、静态页面CDN化:将详情页的HTML骨架CSS、JS、图片全部推送到CDN边缘节点。用户访I时,直接从最近的CDN获取页面框架
2、动态数据异步加载:页面加载后,通过Ajax/Fetch请求后端接口获取价格、库存等数据进行渲染。
二、多级缓存结构
1、浏器/客户端缓存:利用HTTPCache-Control头,让静态资源在用户本地缓存。
2、CDN边缘缓存:90%的静态资源请求会被CDN拦截。
3、Nginx/Gateway网关层缓存:通过网关层缓存,解决超热点商品(如iPhone17首发),请求穿透到后端应用层,导致Tomcat线程池瞬间耗尽的问题。
4、应用本地缓存:缓存商品的聚合信息对象(DTO),设置极短的过期时间(例如5-10秒)。哪怕只有1秒,也能挡住数万次请求。
5、分布式缓存:使用String存储Protobuf序列化后的二进制数据(体积小)。大促开始前,将热门商品提前加载到]Redis。
三、解决四大缓存痛点
1、热点Key问题:针对某个商品极其火爆,万级请求全打向Redis集群中的某一个分片,导致该节点网卡打满或CPU100%,引入热点发现系统,实时统计
最近N秒内的Key访问频率。一旦发现是热Key,立刻推送到所有应用服务器的本地缓存,后续请求直接走JVM内存,不再请求Redis;
2、缓存击穿:面对热点Key突然过期,瞬间万级流量打穿Redis直奔数据库的问题,通过逻辑过期异步更新缓存和互斥锁解决只允许一个线程查DB的问题;
3、缓存穿透:面对恶意请求查询不存在的ID带来的数据库承压问题,通过布隆过滤器拦截+缓存空对象的办法进行解决;
4、缓存雪崩:随机化缓存对象的过期时间,避免缓存同时过期带来的数据库压力问题;
四、动态数据的高并发设计
1、库存展示:面对动态读取库存的压力问题,通过Redis存储库存数量,详情页展示的是“概数”(如“有货”或“剩余5件”),允许短暂延迟。真实的库存扣减校
验放在“下单/结算”环节;
2、价格计算:面对商品价格计算逻辑非常复杂(基础价+会员折扣+优惠券+满减)的问题,设计独立的价格计算服务。如果计算逻辑太重,可以对不同用户
等级计算出的价格进行缓存。
五、服务兜底与高可用架构
1、服务降级:当依赖的下游服务(如促销服务、评价服务)响应慢或报错时,直接切断调用,例如:页面不显示优惠卷,用户评价等,保证核心交易链路(查
看商品->下单)可用;
2、服务限流:针对QPS超过阈值的接口,通过Sentinel直接拒绝多余请求,返回友好的用户提示;
3、数据库保护:为了避免土库压力,详情贝只读从库,如果商品衣达到亿级,按商品进行分库分表;
