
1) 【一句话结论】考试季高并发下,通过负载均衡分散请求压力、缓存策略减少数据库访问、容灾方案保障业务连续性,需结合数据库连接池优化、资源规划及数据一致性措施,三者协同保障系统稳定。
2) 【原理/概念讲解】
3) 【对比与适用场景】
| 类型/策略 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 负载均衡(Nginx) | 反向代理+负载均衡 | 功能丰富,配置灵活,支持轮询/加权轮询等算法 | Web应用高并发 | 需配置upstream模块,结合健康检查 |
| 负载均衡(LVS) | 专有负载均衡 | 高性能,适合大规模 | 大型系统 | 需内核支持,配置复杂 |
| 缓存策略(LRU) | 最近最少使用 | 淘汰最久未使用项 | 访问频率变化大的数据 | 可能导致冷启动 |
| 缓存策略(基于访问频率) | 动态缓存高频数据 | 根据访问次数排序,优先缓存热点 | 高并发热点数据 | 需实时统计访问频率 |
| 容灾方案(主备) | 主节点处理写,备节点热备 | 切换时间短,备节点利用率低 | 对切换时间要求高的场景 | 需健康检查机制 |
| 容灾方案(多活) | 多节点同时处理请求 | 切换时间短,数据同步成本高 | 对高可用要求高的场景 | 需数据同步机制(如半同步复制) |
4) 【示例】
upstream exam_backends {
server 192.168.1.1:8080 weight=3; # 加权轮询,性能高的服务器权重更高
server 192.168.1.2:8080 weight=2;
server 192.168.1.3:8080 weight=1;
health_check;
}
server {
listen 80;
server_name exam.tsdx.com;
location / {
proxy_pass http://exam_backends;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://db1:3306/exam_db");
config.setUsername("user");
config.setPassword("pass");
config.setMaximumPoolSize(100); // 最大连接数
config.setConnectionTimeout(10000); // 连接超时10秒
HikariDataSource ds = new HikariDataSource(config);
def get_hot_score(student_id):
key = "score:hot"
# 记录访问次数
redis.zadd(key, student_id, time.time())
# 超时1小时
redis.expire(key, 3600)
# 获取Top 100热点数据
hot_ids = redis.zrevrange(key, 0, 99)
# 缓存热点数据
for sid in hot_ids:
score = redis.get(f"score:{sid}")
if score:
redis.setex(f"score:{sid}", 3600, score)
return redis.get(f"score:{student_id}")
[mysqld]
server-id = 1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = exam_system
semisync_master = 1 # 开启半同步复制
5) 【面试口播版答案】
考试季高并发时,保障系统稳定需从三方面入手:负载均衡、缓存策略、容灾方案。首先,负载均衡用Nginx将请求分发到多台服务器,配置upstream用加权轮询,根据服务器性能分配权重,避免单机过载。其次,缓存策略用Redis缓存成绩查询等热点数据,通过访问频率统计(如zset记录访问次数)识别热点,设置1小时TTL,查询时先看缓存,命中则直接返回,减少数据库压力。最后,容灾方案采用MySQL主备架构,主库处理写操作,备库通过半同步复制同步数据(减少binlog同步延迟),故障时通过健康检查快速切换到备库,保证业务不中断。同时配置数据库连接池(如HikariCP设置最大连接数100,连接超时10秒),避免数据库连接耗尽。三者结合,能有效应对高并发,保障系统稳定。
6) 【追问清单】
7) 【常见坑/雷区】