数据库(1)

一、什么是双机热备?      

        为了确保数据库产品的稳定性,很多数据库拥有双机热备功能,按工作中的切换方式可分为:主-备方式(Active-Standby方式)和双主机方式(Active-Active方式),主-备方式即指的是一台服务器处于某种业务的激活状态(即Active状态),另一台服务器处于该业务的备用状态(即Standby状态)。而双主机方式即指两种不同业务分别在两台服务器上互为主备状态(即Active-Standby和Standby-Active状态)。

.2)实现方案

组成双机热备的方案主要的三种方式分别为:基于共享存储(磁盘阵列)的方式,全冗余方式和复制方式。

(a)基于共享存储(磁盘阵列)的方式

共享存储方式主要通过磁盘阵列提供切换后,对数据完整性和连续性的保障。用户数据一般会放在磁盘阵列上,当主机宕机后,备机继续从磁盘阵列上取得原有数据。

(b)全冗余方式

       全冗余方式就是双机双存储,基于单台存储的传统双机热备方式,确实存在存储单点故障的情况,为实现存储冗余,存储高可用也已经越来越多的被用户接受。我们从理解上可以看出,双机热备最早是为解决服务器的计划性停机与非计划性宕机的解决方案,但是我们无法实现存储的计划性停机与非计划性宕机带来的服务器停机,而存储作为双机热备中唯一存储数据的设备,它一旦发生故障往往会造成双机热备系统全面崩溃。                                                                                                                                                    

(c)复制方式

        这种方式主要利用数据的同步方式,保证主备服务器的数据一致性。

参考资料:

           http://baike.baidu.com/link?url=X9wkYULPkAYBpCGC790BmOTQAwl-3F2oBTdHB1dZSOEjEfn7qup1N-CyI3t8_9YazNTyVcmZple4crIkkJHNMK



二、什么是数据库读写分离

        简单的说就是把对数据库读和写的操作分开对应不同的数据库服务器(一般一个Master库,多个slave库),这样能有效地减轻数据库压力,也能减轻io压力。主数据库提供写操作,从数据库提供读操作。当主数据库进行写操作时,数据要同步到从的数据库,这样才能有效保证数据库完整性。

简而言之,数据库读写分离分为3个部分:

       主数据库                 处理事务性增、改、删操作(INSERT、UPDATE、DELETE)

       从数据库                 处理SELECT查询操作(多个从服务器可以采用负载均衡)

       数据库复制             被用来把事务性操作导致的变更同步到集群中的从数据库。

.2)经典应用

读写分离目前应用于很多大型网站,如ebay,ebay用的是oracle,主从复制好像是Quest Share Plex(这个不确定,有兴趣的可以自己查找资料看看),我们来看看ebay的读写分离图,

数据库(1)_第1张图片

从图我们可以看出,读写分离的控制实际在应用层面,其配置是在数据库层面。

.3)优缺点

  (1)数据的实时性差:数据不是实时同步到只读服务器上的,当数据写入主服务器后,要在下次同步后才能查询到。

  (2)数据量大时同步效率差:单表数据量过大时插入和更新因索引,磁盘IO等问题,性能会变的很差。

  (3)同时连接多个(至少两个)数据库:至少要连接到两个数据数据库,实际的读写操作是在程序代码中完成的,容易引起混乱

  (4)读具有高性能高可靠性和可伸缩:只读服务器,因为没有写操作,会大大减轻磁盘IO等性能问题,大大提高效率;只读服务器可以采用负载均衡,主数据库发布到多个只读服务器上实现读操作的可伸缩性。

注意点:

        在进行写操作时,考虑到数据的唯一性,写数据的分配不能使用随机算法,一般采用哈希映射。举个例子,很多网站注册的时候已经注册的用户名不能重复注册,如果使用的是随机算法,用户A注册了用户名为zhangsan,写操作分配到主机A,用户B也注册了用户zhangsan,写操作分配到主机B,那么就很难控制数据的唯一性,建议采用哈希映射,比如说哈希规则为将请求为z的写操作统一分配给主机A,以避免此类情况的产生。

参考资料:

         http://tech.it168.com/a2012/0110/1300/000001300144_2.shtml



三、负载均衡

 负载均衡集群是由一组相互独立的计算机系统构成,通过常规网络或专用网络进行连接,由路由器衔接在一起,各节点相互协作、共同负载、均衡压力,对客户端来说,整个群集可以视为一台具有超高性能的独立服务器。

.1)实现原理

       实现数据库的负载均衡技术,首先要有一个可以控制连接数据库的控制端。在这里,它截断了数据库和程序的直接连接,由所有的程序来访问这个中间层,然后再由中间层来访问数据库。这样,我们就可以具体控制访问某个数据库了,然后还可以根据数据库的当前负载采取有效的均衡策略,来调整每次连接到哪个数据库。

.2)优缺点:
   (1) 扩展性强:当系统要更高数据库处理速度时,只要简单地增加数据库服务器就 可以得到扩展。
   (2) 可维护性:当某节点发生故障时,系统会自动检测故障并转移故障节点的应用,保证数据库的持续工作。
   (3) 安全性:因为数据会同步的多台服务器上,可以实现数据集的冗余,通过多份数据来保证安全性。另外它成功地将数据库放到了内网之中,更好地保护了数据库的安全性。
   (4) 易用性:对应用来说完全透明,集群暴露出来的就是一个IP
   (5) 不能够按照Web服务器的处理能力分配负载。
   (6) 负载均衡器(控制端)故障,会导致整个数据库系统瘫痪。

参考文件:

        http://www.cnblogs.com/happyday56/archive/2012/01/11/2319136.html



四、分库,分表

为了应对单库多表随着数据库表及表数据量的不断增加带来的性能瓶颈,切分数据库也成为一种不错的解决方式,其主要思想是将一个数据库切分成多个不同部分到多个数据库中,根据业务系统的不同,切分又可以分为垂直切分和水平切分两种。

常用分库分表方法:

1.)水平切分

       水平切分主要是将一张表中的不同数据切分到不同库中,相对垂直切分而言,切分规则比较复杂,维护也更加复杂一些。常用的水平切分场景,如果一张表中存放有大字段或者内容较多的字段,而且这些字段查询的概率较低,一般建议分表操作,将一张表拆分成两张对应的表,需要获取这些大字段或者内容较多的字段时查询分表,通过这种拆分,可以大大提高效率。

.2)垂直切分

     垂直切分往往是将不同业务模块的表切分到不同的数据库中,比较适合业务逻辑清晰,业务之间耦合度低且相互影响小的系统,相对而言规则较简单,实施也容易。

而实际应用中,往往是将垂直切分跟水平切分结合起来,往往先垂直切分,再进行水平切分,如下图(引用其他博客的图)

数据库(1)_第2张图片

参考资料:

        http://blog.csdn.net/bluishglc/article/details/7696085



你可能感兴趣的:(数据库)