TiDB分布式数据库实战:HTAP架构与在线扩缩容方案

TiDB HTAP架构设计

TiDB是PingCAP开源的分布式数据库,采用存储计算分离的HTAP架构,同时支持OLTP事务处理和OLAP分析查询。TiDB架构由三个核心组件构成:TiDB Server(SQL层,无状态)、TiKV(行存储引擎,负责OLTP)和TiFlash(列存储引擎,负责OLAP)。PD(Placement Driver)负责元数据管理和调度。

HTAP的核心在于TiKV和TiFlash通过Raft Learner协议实现数据强一致性复制。TiFlash作为TiKV的Learner节点,异步接收Raft日志并转换为列存格式。OLTP查询走TiKV行存路径,OLAP查询走TiFlash列存路径,两类查询互不干扰,不需要ETL数据搬运。

TiKV与TiFlash存储引擎

TiKV基于RocksDB构建,使用Region作为数据分片单元,每个Region默认96MB。Region通过Multi-Raft协议管理副本,默认3副本。TiFlash基于列存引擎改造,通过Delta Tree结构实现实时写入和高性能查询的平衡。

-- 部署TiFlash节点
tiup cluster edit-config tidb-prod
# tiflash_servers:
#   - host: 192.168.1.201, data_dir: /data/tiflash-data
#   - host: 192.168.1.202, data_dir: /data/tiflash-data
#   - host: 192.168.1.203, data_dir: /data/tiflash-data
tiup cluster reload tidb-prod -R tiflash

-- 为表创建TiFlash副本
ALTER TABLE orders SET TIFLASH REPLICA 3;
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_NAME = 'orders';
-- 等待PROGRESS达到1.0表示同步完成

-- 指定查询走TiFlash
SELECT /*+ read_from_storage(tiflash[orders]) */
    customer_id, COUNT(*) as cnt, SUM(amount) as total
FROM orders WHERE order_date >= '2026-01-01'
GROUP BY customer_id ORDER BY total DESC LIMIT 100;

-- 智能路由:优化器自动选择引擎
SET SESSION tidb_isolation_read_engines = 'tiflash,tiKV,tidb';

分布式事务与PD调度

TiDB采用乐观事务模型,通过Percolator算法实现分布式事务。事务提交分两阶段:Prewrite阶段锁定涉及的所有Region,Commit阶段写入记录并释放锁。对于高冲突场景,TiDB也支持悲观事务模式。

-- 分布式事务示例
BEGIN PESSIMISTIC;

UPDATE inventory SET stock = stock - 10
WHERE product_id = 'P2026-001' AND stock >= 10;

INSERT INTO orders (order_id, customer_id, product_id, quantity, amount, status)
VALUES ('ORD-2026-0904-001', 'CUST-1001', 'P2026-001', 10, 1999.00, 'pending');

INSERT INTO transaction_log (log_id, order_id, type, amount)
VALUES ('LOG-001', 'ORD-2026-0904-001', 'order_create', 1999.00);

COMMIT;

-- 使用AutoRandom避免自增ID热点
CREATE TABLE orders (
    order_id BIGINT AUTO_RANDOM(5) PRIMARY KEY,
    customer_id BIGINT NOT NULL,
    product_id VARCHAR(32) NOT NULL,
    quantity INT NOT NULL,
    amount DECIMAL(10,2) NOT NULL,
    status VARCHAR(20) DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_customer (customer_id),
    INDEX idx_date (created_at)
) PARTITION BY RANGE (TO_DAYS(created_at)) (
    PARTITION p202609 VALUES LESS THAN (TO_DAYS('2026-10-01')),
    PARTITION p202610 VALUES LESS THAN (TO_DAYS('2026-11-01')),
    PARTITION pmax VALUES LESS THAN MAXVALUE
);

在线扩缩容操作实战

TiDB的在线扩缩容是核心优势之一。扩容时新节点加入集群,PD自动调度Region到新节点,整个过程对业务无感知。缩容时PD先将待下线节点的Region迁移到其他节点,迁移完成后安全下线。

# 扩容TiKV节点
tiup cluster scale-out tidb-prod scale-out.yaml

# 查看调度进度
mysql -h 192.168.1.101 -P 4000 -u root -p -e "
SELECT STORE_ID, ADDRESS, STORE_STATE, CAPACITY, AVAILABLE,
       LEADER_COUNT, REGION_COUNT
FROM information_schema.TIKV_STORE_STATUS;
"

# PD调度参数调优
pd-ctl config set schedule.max-snapshot-count 64
pd-ctl config set schedule.max-pending-peer-count 32
pd-ctl config set schedule.max-merge-region-size 20
pd-ctl config set schedule.max-store-down-duration 30m

# 缩容TiKV节点
tiup cluster scale-in tidb-prod --node 192.168.1.104:20160
tiup cluster display tidb-prod
# 状态变为Offline后等待迁移完成
tiup cluster prune tidb-prod

# 热点调度
pd-ctl config set schedule.hot-region-schedule-limit 4
pd-ctl config set schedule.leader-schedule-limit 4
pd-ctl config set schedule.balance-leader-scheduler true

HTAP混合负载测试

-- 创建测试表并设置TiFlash副本
CREATE TABLE sales_data (
    id BIGINT AUTO_RANDOM PRIMARY KEY,
    order_id VARCHAR(32) NOT NULL,
    customer_id BIGINT NOT NULL,
    region VARCHAR(20) NOT NULL,
    amount DECIMAL(12,2) NOT NULL,
    order_date DATE NOT NULL,
    INDEX idx_customer (customer_id),
    INDEX idx_date (order_date)
);
ALTER TABLE sales_data SET TIFLASH REPLICA 3;

-- OLTP负载:点查走TiKV
SET SESSION tidb_isolation_read_engines = 'tikv';
SELECT * FROM sales_data WHERE customer_id = 523456 AND order_date = '2026-03-15';

-- OLAP负载:复杂聚合走TiFlash
SET SESSION tidb_isolation_read_engines = 'tiflash';
EXPLAIN ANALYZE
SELECT region,
    DATE_TRUNC('month', order_date) as month,
    COUNT(*) as cnt, SUM(amount) as revenue,
    AVG(amount) as avg_val,
    PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY amount) as p95
FROM sales_data
WHERE order_date BETWEEN '2026-01-01' AND '2026-06-30'
GROUP BY region, month ORDER BY region, month;

-- 性能基准对比
-- TiKV行存聚合查询: 120s(扫描大量行)
-- TiFlash列存聚合查询: 3.2s(列裁剪+向量化执行)
-- 性能提升: 约37倍

生产环境部署TiDB需要关注资源隔离。通过Resource Control特性限制不同租户的计算资源配额,避免AP大查询影响TP事务延迟。TiDB v7.0+的Resource Group功能可以按CPU和IO维度做细粒度资源管控。集群监控推荐使用TiDB自带的Grafana Dashboard,关键指标包括QPS、延迟P99、Region数量、TiFlash同步延迟和PD调度速度。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/tidb-fen-bu-shi-shu-ju-ku-shi-zhan-htap-jia-gou-yu-zai-xian/

(0)
小编小编
上一篇 4小时前
下一篇 4小时前

相关推荐