数据倾斜方案
数据倾斜是指在分布式数据库中,数据分布不均匀的现象。具体是指当大量的相同key被分配到同一个分区或节点进行处理时,就会导致该节点承载过多的数据或计算负载,而其他节点则相对空闲的现象。例如在大商户中每天的数据量和一个小商户的数据量相差较大,大商户一个月的数据可能就会把一个DN的空间塞满,这时无论用户使用hash分布表还是shard表,同一个商户的数据都只会落到一个数据节点,从而导致该系统无法存储更多的数据而停机。
为了有效的应对这个问题,TeleDB团队设计了数据重平衡(RDA算子模块)来解决数据倾斜问题:
首先我们把系统的DN分为group,每个group里面:
- 包含一个或者多个DN。
- 每个group有一个shardmap。
- 在建sharded表时,可以指定存储的group,也就是可以指定存储在group1或group2。
- CN可以访问所有的group,而且CN上也存储所有表的访问方式信息。
对于系统中数据量较大用户进行特别的识别,并为他们创建白名单。不同的用户使用不同的数据分布逻辑,具体如下图所示:
- 普通用户使用默认的数据分布逻辑,即:Shardid = Hash(merchantid) % #shardmap
- 大商户使用定制的数据分布逻辑,即:Shardid = Hash(merchantid) % #shardmap + fcreate_time dayoffset from 1970-01-01
通过在大商户group分布逻辑中加入日期偏移,来实现同一个用户的数据在group内部多个节点间均匀分布。从而有效的解决数据分布不均匀问题。
示例:
如大小商户数据的不同处理逻辑:
从以上示例可以看出,大商户的数据每天都有不同的shardid,不同的shardid也就意味着不同的数据库节点,从而可以达到数据在group内部的完美平衡。
冷热数据分级存储方案
冷热数据分级存储是指TeleDB支持根据数据的访问频率和业务重要性,将数据分为冷数据和热数据,并分别存储在不同的存储介质中。冷数据是指访问频率低,对当前项目价值较低,但需要长期保存的数据。这些数据一般存储在低成本、低性能的介质中。热数据是指经常被访问和修改,且需要快速访问的数据。由于这些数据为高性能和低延迟设计,需存储在高性能的存储介质中。针对冷热数据的存储介质的差异,TeleDB开发了冷热数据分离的功能,从而有效的降低业务的资源成本。
TeleDB冷热数据分离功能的整体逻辑框图如下:
对象存储OSS或是HDFS文件系统作为冷数据存储对象,通过XBlock搬迁数据至远端文件系统,通过XLake从数据库访问远端文件系统。
说明
Oss是指对象存储,在冷热分离方案中用于存放冷数据。
XBlock一种远端访问文件系统,可以屏蔽掉不同类型的底层文件系统,并将数据库数据搬迁至远端文件系统。
XLake一种数据库外部访问方案,可以让数据库直接访问外部的数据文件,并参与内部查询。
XBlock主要包括文件系统接口、访问连接管理、文件缓存、元数据管理和文件系统实现等。
- 文件系统接口:天翼云TeleDB数据库的冷热分离特性,需要能够将冷数据,转存到相应的冷数据存储中,并且能过对冷数据存储中的文件进行相应的打开、读取、写入等操作。
- 访问连接管理:冷热分离组件也需要考虑数据库的并发场景,需要能够支持多session同时对冷热分离模块进行访问读取。
- 文件缓存:多次对冷数据进行访问,则也需要在内存中缓存部分数据,提升后续的访问速率,且需要有缓存管理,能够根据一定规则进行缓存淘汰。
- 元数据管理:冷热分离特性对于冷数据的转储,请求读取等操作,都会记录一条元数据到相应的元数据库中,并且需要能够对元数据进行管理。
- 文件系统实现:冷热分离特性需要实例能够对冷数据存储中的文件有相应的操作能力,包括不限于ls、state等命令。
XLake主要包括文件访问的配置、不同数据格式的支持和不同文件系统的访问支持。
- 文件访问的配置:需要Xlake能够以外部文件为基准,创建外表,并且对外表进行查询,以及查询计划的展示和优化。
- 不同数据格式的支持:需要Xlake能够支持不同的文件格式,包括text、csv以及Parquet文件格式。
- 不同文件系统的访问支持:需要Xlake能够支持不同的文件系统,包括oss、hdfs、hive等,从而能够通过对接不同的文件系统,实现冷热分离的功能。