程序员的“三高”
在 IT 开发领域,“三高” 通常指高并发、高性能、高可用,是衡量分布式系统设计与架构优劣的核心指标。这三个目标相互关联又彼此制约,需要从架构设计、技术选型、开发实践等多维度综合优化。以下是关于 “三高” 的详细解析及实现思路:
一、高并发(High Concurrency)
目标:系统同时处理大量请求的能力,避免因流量峰值导致服务崩溃。
核心挑战
- 流量突增时的请求处理能力不足(如秒杀、抢购场景)。
- 资源竞争导致的性能瓶颈(如数据库连接池耗尽、锁竞争)。
解决方案
- 流量分层与限流
- 分层过滤:通过 CDN 缓存静态资源(图片、JS、CSS),减少源站压力;使用 WAF(Web 应用防火墙) 拦截恶意请求。
- 限流策略:
- 基于令牌桶(Token Bucket)、漏桶(Leaky Bucket)算法限制请求速率(如每秒最多处理 1 万次请求)。
- 分级限流:对不同用户等级(如普通用户 / VIP)、接口优先级(核心接口 / 非核心接口)设置不同限流阈值。
- 工具:Guava RateLimiter(单机)、Sentinel/DistributedRateLimiter(分布式)。
2.异步与消息队列(MQ)
- 将非实时业务(如订单状态通知、日志记录)通过 MQ(如 Kafka、RabbitMQ) 异步处理,削峰填谷。
- 示例:用户下单后,主流程仅处理库存扣减,通知短信、积分奖励等操作通过消息队列异步执行。
3.水平扩展与负载均衡
- 无状态服务:将应用设计为无状态(不依赖本地存储),通过增加服务器节点(如 Docker 容器、Kubernetes Pod)横向扩展。
- 负载均衡:
- 四层负载均衡(如 Nginx、LVS):基于 IP + 端口转发请求,处理 TCP/UDP 层流量。
- 七层负载均衡(如 Traefik、阿里云 SLB):基于 HTTP/HTTPS 协议转发,支持按 URL、Header 分流。
- 流量分配策略:轮询、加权轮询、最小连接数、一致性哈希(适用于缓存节点路由)。
4.缓存优化
- 多级缓存:
- 浏览器缓存(Cache-Control、ETag)、CDN 缓存(边缘节点缓存静态资源)。
- 应用层缓存(如 Guava Cache 单机缓存、Redis 分布式缓存)存储热点数据(如商品详情、用户信息)。
- 缓存穿透 / 击穿 / 雪崩:
- 穿透:非法请求访问不存在的缓存数据,可通过布隆过滤器(Bloom Filter)拦截。
- 击穿:热点 key 过期时大量请求直达数据库,可使用互斥锁(Redisson)或逻辑过期(异步刷新)。
- 雪崩:大量缓存同时过期,可通过随机过期时间、二级缓存(如 Caffeine+Redis)缓解。
5.分库分表与读写分离
- 垂直拆分:按业务模块拆分数据库(如订单库、用户库),减少单库压力。
- 水平拆分:对单表数据按规则(如用户 ID 取模、时间范围)拆分到多个库表,避免单表数据量过大(如超过 5000 万行)。
- 读写分离:主库负责写,从库负责读,通过数据库中间件(如 MyCat、Sharding-JDBC)实现透明路由。