微信号:infoqchina

介绍:有内容的技术社区媒体

数据设计测试分析方案

2014-05-22 13:33 InfoQ

数据拆分机制

一、 背景

支付宝从2009年开始进行1111大促开始,从2009年大促600w 的交易量到2013年大促那天2亿的交易量;在这四年中,支付宝系统的容量经历了每年指数级的提升;如果需要支持这么大的容量的话,初步估算,一个支付系统至少得支持每天30亿次的数据库事务,150亿次的dao访问,30T的数据包传输;如果不进行数据库拆分,这么大的开销单靠一台物理db完全是支撑不了的,所以必须对单点的物理db进行拆分。

二、 数据拆分的方案

Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题;不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直拆分,即把关系紧密(比如同一业务模块)的表切分出来放在一个物理db上;如果表并不多,但每张表的数据非常多,这时候适合水平拆分,即把表的数据按某种规则(比如按ID散列)拆分到多个物理db上;当然,现实中更多是这两种情况混杂在一起,这时候需要根据实际情况做出选择,也可能会综合使用垂直与水平拆分,从而将原有数据库切分成类似矩阵一样可以无限扩充的数据库(server)阵列。

三、 数据拆分的实例介绍

在支付宝的架构演进过程中也进行了很多数据拆分这一方面的改造。

垂直拆分的案例:支付宝系统,该系统上面运行了三大块的业务:充值/充退/提现;充值业务非常重要,业务的流量也非常大,是个非常关键的业务;充退和提现的业务重要性相对低一点,但是这类业务会进行一些大数据量的操作,对于db的影响非常大;所以为了确保充值业务的稳定性,db层面进行了垂直拆分的改造,把充值和充退提现数据分两个物理db进行存储和访问。

水平拆分的案例:支付宝系统,支付关键的业务都在该系统上,而且每天的业务量都非常大;根据业务量增长的趋势,在不久的将来,单个db已经支撑不了这么庞大的业务吞吐量,所以我们对支付的数据按照用户id的维度进行了水平的拆分。

四、 水平拆分应用测试分析

本次我们会对水平拆分的方案做详细的测试关注点分析。

功能性需求测试分析

1、分库分表功能逻辑的覆盖

考虑到拆分前的数据是落地到一个物理库一个物理表,拆分后其实是落地到多个物理库的多个物理表中,所以对于不同拆分维度的数据落地到正确的数据库和数据表是水平拆分类改造最重要也是最关键的测试覆盖点。

2、跨库的事务无法支持

事务是完整性的单位,一个事务的执行是把数据库从一个一致的状态转换成另一个一致的状态,但是如果在一个事务模板中出现了多次数据库的操作,并且这些操作对应的数据源针对的是不同的物理存储,那么这个事务一致性肯定不不能被保证的;在应用分库之后,原先在一个事务中的多次数据库的操作有可能被指向不同的物理存储,所以针对这样的逻辑是肯定需要改造的,测试分析的时候一定要重点分析这样的场景。

3、业务数据merge需要覆盖所有分库

拆分前,一份表中所有的数据都是存放在一个物理表中;而数据库表拆分后,原来在一个表中的数据有可能会分布在不同的物理数据库和物理数据表中,所以在进行一些大数据的查询操作时,从原先的一条sql执行就能获取全量数据,拆分后就可能需要通过针对不同表的多个sql获取并在应用逻辑中进行合并,所以测试的时候一定需要关注到这部分的改造是否到位,是否有分析遗漏的地方。

非功能性需求测试分析

一般数据库拆分的项目实施过程中,在应用发布后,其实数据层面还是没有真正的做到物理上的切分,需要逻辑分库的这么一个过程主要是考虑到发布过程中的一些数据和业务兼容性,还有一些可能是由于物理机器采购和调试的进度和项目发布的时间点不匹配等客观因素,所以在真正做物理拆分前会有一个逻辑分库运行的阶段。

1、逻辑拆分过程中数据一致性

2、物理拆分过程中数据一致性

3:新老库seq同步性问题

性能需求测试分析

说到性能提升,其实这是我们做分库分表改造的初衷,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈,所以分库分表就是为了解决单个db性能的瓶颈。

1、关注tps,内存,连接数等性能指标

2、连接数,ps-cache,fetch_size设置合理性

更多精彩内容,请点击阅读原文。

***********************************

本文来自InfoQ微信公众账号:infoqchina

1、回复“今日新闻”,查看今天更新的新闻;

2、回复“今日英文”,查看今天英文站的更新;

3、回复“文章 +关键词”,搜索关键词相关内容;

4、回复“QCon”,了解QCon大会相关信息;

5、回复“活动”,了解最近InfoQ组织的线下沙龙;

6、回复“架构师”,获取《架构师》下载地址;

7、回复“投稿”,了解投稿和加入编辑团队的流程。

***********************************

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 创业失败当事人 | 把创意当做机密 Vue.js 60 分钟快速入门 不同优秀程度JavaScript开发者的差别 网友如何看待百度的“诊断报告”和李彦宏的内部信? [年终福利] WordPress插件 微信公众平台管家 WechatManager V2.0 发布