系统设计:十万级并发电商商品详情页,如何设计 目录一、架构核心策略动静分离二、多级缓存结构三、解决四大缓存痛点四、动态数据的高并发设计五、服务兜底与高可用架构一、架构核心策略动静分离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、数据库保护为了避免土库压力详情贝只读从库如果商品衣达到亿级按商品进行分库分表