第八章:生产实践¶
部署架构¶
生产环境架构¶
┌─────────────────────────────────────────────────────────────┐
│ 生产环境架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 应用层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ App Server 1 App Server 2 App Server 3 │ │
│ │ Sharding-JDBC Sharding-JDBC Sharding-JDBC │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 数据库层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ DB0 (Master) DB1 (Master) DB2 (Master) │ │
│ │ ├── Slave 1 ├── Slave 1 ├── Slave 1 │ │
│ │ └── Slave 2 └── Slave 2 └── Slave 2 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
部署要求¶
分片设计¶
分片键选择¶
分片键选择原则:
1. 数据均匀分布
2. 查询频率高
3. 业务逻辑相关
4. 避免跨分片查询
常见分片键:
- 用户表:user_id
- 订单表:user_id, order_id
- 日志表:create_time
分片数量¶
分片策略¶
# 分片策略选择
sharding-algorithms:
# 用户表:按用户 ID 取模
user_mod:
type: MOD
props:
sharding-count: 10
# 订单表:按用户 ID 哈希取模
order_hash_mod:
type: HASH_MOD
props:
sharding-count: 100
# 日志表:按时间分片
log_interval:
type: AUTO_INTERVAL
props:
datetime-lower: 2023-01-01 00:00:00
sharding-seconds: 86400
性能优化¶
SQL 优化¶
-- 推荐:带分片键查询
SELECT * FROM t_order WHERE user_id = 1 AND order_id = 100;
-- 不推荐:不带分片键查询(全分片扫描)
SELECT * FROM t_order WHERE amount > 100;
索引优化¶
-- 分片表索引
CREATE INDEX idx_user_id ON t_order_0 (user_id);
CREATE INDEX idx_user_id ON t_order_1 (user_id);
-- 联合索引
CREATE INDEX idx_user_order ON t_order_0 (user_id, order_id);
连接池优化¶
spring:
shardingsphere:
datasource:
ds0:
hikari:
maximum-pool-size: 50
minimum-idle: 10
idle-timeout: 600000
max-lifetime: 1800000
connection-timeout: 30000
安全加固¶
访问控制¶
SQL 审计¶
敏感数据加密¶
spring:
shardingsphere:
rules:
encrypt:
tables:
t_user:
columns:
password:
cipher-column: password
encrypt-algorithm-name: aes
encrypt-algorithms:
aes:
type: AES
props:
aes-key-value: 123456
监控告警¶
监控体系¶
监控层级:
1. 应用监控
- JVM 内存
- GC 频率
- 线程数
2. ShardingSphere 监控
- SQL 执行次数
- SQL 执行时间
- 分片路由
3. 数据库监控
- 连接数
- 查询性能
- 慢查询
告警规则¶
groups:
- name: shardingsphere-critical
rules:
- alert: ShardingSphereDown
expr: up{job="shardingsphere"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "ShardingSphere 服务不可用"
故障处理¶
常见问题¶
1. 分片路由慢¶
2. 连接池耗尽¶
3. 数据倾斜¶
最佳实践¶
1. 分片设计¶
2. SQL 编写¶
3. 事务管理¶
4. 运维管理¶
小结¶
生产实践要点:
- 部署架构:生产环境架构、部署要求
- 分片设计:分片键选择、分片数量、分片策略
- 性能优化:SQL 优化、索引优化、连接池优化
- 安全加固:访问控制、SQL 审计、敏感数据加密
- 监控告警:监控体系、告警规则
- 故障处理:常见问题
- 最佳实践:分片设计、SQL 编写、事务管理、运维管理
完成本教程后,你应该能够在生产环境中部署和管理 ShardingSphere 分库分表系统。