不合理的数据库访问,比如不恰当的连接池设置、高危SQL无拦截、无限流和熔断等治理能力
无弹性伸缩能力,单机数据库性能或者容量不足时,扩容非常繁琐低效
缺乏常用的功能特性,不支持读写分离、影子库表、单元化架构、数据库加密
不支持跨语言,并且与应用服务强耦合,编码和升级都非常困难
路由至单数据分片100%兼容
支持分页、去重、排序、分组、聚合、关联等常见查询场景
多种分片算法
自增分布式ID
读写分离,可设置主从同步容忍阈值
影子库
HTAP
3.核心设计
CDAS的核心目标是解决用户海量数据存储、访问问题,聚焦到分片场景中,主要体现在解析、路由、重写、聚合等逻辑 。
Math.min(cpuNum * X, maxThreadsThreshold)
X:默认75,可配置
maxThreadsThreshold:默认800,可配置
begin;
select * from t_order where order_id = 1;
update t_order set gmt_modify = now() where order_id = 1;
update t_order_item set cnt = 2 where order_id = 1;
commit/rollback;
connection_db1为t_order_1表所在数据库上的连接
热点分片处理困难
无法针对分片进行迁移
分片名无意义,无法自解释
select * from t_order where order_id=10
{type:select,table:t_order,condition: order_id=10}
order_id mod 16 => 10 mod 16 => 10
select * from t_order_10 where order_id=10
select * from t_order where order_id in (10,11)
select * from t_order_10 where order_id in (10,11)
select * from t_order_11 where order_id in (10,11)
压测Proxy,Proxy连接2个RDS集群
压测单个RDS集群,作为Proxy性能对比的基准
CREATE TABLE `sbctest_x` (
`id` bigint(11) NOT NULL,
`sharding_k` bigint(11) NOT NULL,
`k` int(11) DEFAULT NOT NULL,
`name` varchar(100) NOT NULL,
`ts` timestamp NULL DEFAULT NULL,
`dt` datetime DEFAULT NULL,
`c` char(100) DEFAULT NULL,
`f` float DEFAULT NULL,
`t` tinyint(4) DEFAULT NULL,
`s` smallint(6) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `sharding_k_idx` (`sharding_k`),
KEY `k_idx` (`k`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
压测SQL
#QPS 非事务的简单查询
SELECT COUNT(1) FROM $table WHERE sharding_k=?
#TPS 包含 1条查询,4条变更语句
BEGIN;
SELECT c FROM $table WHERE sharding_k=?
UPDATE $table SET k=k+1 WHERE sharding_k=?
UPDATE $table SET c=?,ts=?,dt=? WHERE sharding_k=?
DELETE FROM $table WHERE sharding_k=?
INSERT INTO $table (id,sharding_k,k,name,ts,dt,c,pad,f,t,s) VALUES(?,?,?,?,?,?,?,?,?,?,?)
COMMIT;
作者简介
jianliu OPPO高级后端工程师
目前主要专注于数据库代理、注册中心、云原生相关技术曾就职于折800、京东商城
推荐阅读
|QCon-OPPO数据平台Cloud Lake 降本增效实践
|大数据SQL优化之数据倾斜解决案例全集
|中间件运维之故障自愈
本文版权归OPPO公司所有,如需转载请在后台留言联系。