探索大型网站技术架构(三)

来源:互联网 发布:js字符串转成数组 编辑:程序博客网 时间:2024/04/27 03:00

上篇说到,对数据库进行读写分离,读写分离方案主要是应用于网站读写比例严重失衡的网站,而互联网上绝大部分网站都是读操作的比例远远大于写操作,这是网站的主流。

如果一个网站读写比例比较均衡,那么这个网站一般都是提供专业服务的网站,这种网站对于用户而言是一个提供生活便利的工具,类似于企业应用软件。很多关注大型网站架构技术关心的重点应该是那种对于读写比例失衡的网站,因为它们做起来更加有挑战性。

OK,啰嗦了这么多,大家也应该有个疑问,为什么对数据库进行读写分离就会提高系统的整体效率呢?说这个问题的时候可以借鉴硬盘的读写原理,首先我们大家都知道硬盘是由一个圆形的盘片和一个磁头组成,那么硬盘在进行读数据和写数据的时候,显然是顺序读写比随机读写要快的多。

那么再来想一想我们的数据库,在进行写数据的时候因为要考虑到并发的情况下多个用户同时修改一条数据,因为要保证数据的准确性,所以相对硬盘的写来讲要复杂的多,这个时候我们就不得不将并行的操作改成串行,然后要引入一个锁的概念,数据操作由原来的一起执行,到现在一条一条的执行,当一条在执行的时候锁是锁死的,执行完毕锁打开供后面的继续执行,这个概念大家应该都清楚尤其是在java线程那部分。

所以就是这个概念,写数据本来就很复杂了,如果这个时候再加入大量的读操作,那么对于这台DB来讲压力是非常大的,因此我们做读写分离会提高系统的效率。

其实做读写分离只是DB性能优化的第一步,因为从业务上来讲读写分离,基本不涉及什么业务,从操作性上来讲也是很容易上手操作很简单,从成本上来讲也是最低的,所以综合来讲是很容易让任何系统所接受的一种基本的处理方式。

随着我们的系统用户量的增大,我们DB的数据会越来越大单纯的读写分离已经不能满足我们的要求了,这个时候我们就要开始考虑分析,将我们数据库中哪些体积比较大,比较臃肿的表拆分出来形成一个单独的库,比如电商系统中数据最多的表大概就是“商品”、“订单”这两张表了,将其拆分成两个库,这样就大大降低了数据库的压力,这种做法叫做“垂直拆分”。

注意垂直拆分的定义:把一个数据库中不同业务单元的数据分到不同的数据库里。

然后紧接着,当我们的系统做完了读写分离,数据垂直拆分后,我们的网站还在迅猛发展,最终一定又会达到新的数据库瓶颈,当然这些瓶颈首先还是出现在那些数据量大的表里,这些表数据的处理已经超出了单台服务器的能力,这个时候我们就得对这个单库单表的数据进行更进一步的拆分,也就是将一张表分布到两台不同的数据库里,这个做法就是叫做数据的水平拆分了。

注意水平拆分的定义:是根据一定的规则把同一业务单元的数据拆分到多个数据库里。

OK,我们画个图来梳理一下:

这里写图片描述

这样思路很清晰了,感觉有些东西只有写出来,画出来才会有概念…好了就先到这里吧。

1 0