蒙恩招生网 蒙恩招生网4
2023-10-30
更新时间:2023-11-17 07:22:09作者:51data
随着互联网的广泛应用,海量数据的存储和访问成为系统设计的瓶颈。对于一个大规模的互联网应用来说,每天数百万甚至上亿的PV无疑对数据库造成了相当高的负载。这给系统的稳定性和可扩展性带来了很大的问题。
一、负载均衡技术
负载均衡集群由一组独立的计算机系统组成,这些计算机系统通过常规网络或专用网络连接,并通过路由器连接。各个节点相互协作,分担负载,平衡压力。对于客户端来说,整个集群可以看作一个独立的超高性能的服务器。
1.实施原则
要实现数据库的负载均衡技术,必须有一个能控制数据库连接的控制终端。这里切断了数据库和程序的直接联系,所有程序都访问这个中间层,然后中间层访问数据库。这样就可以有针对性地控制对某个数据库的访问,然后就可以根据数据库当前的负载采取有效的平衡策略来调整每次连接哪个数据库。
2.实现多个数据库的数据同步。
对于负载均衡,最重要的是所有服务器的数据实时同步。这对于集群是必要的,因为如果数据不是实时的和不同步的,那么用户从一个服务器读取的数据与从另一个服务器读取的数据是不同的,这是不允许的。因此,必须实现数据库的数据同步。这样在查询可以有多个资源,达到平衡。常用的方法是SQL Server集群的莫比乌斯。SQL Server集群的莫比乌斯采用核心程序驻留在每台机器的数据库中的方法。这个核心程序叫做SQL Server中间件的莫比乌斯,主要功能是监控数据库中数据的变化,并将变化的数据同步到其他数据库中。客户端在数据同步后才会得到响应,同步过程是并发完成的,所以时间同步到多个数据库和同步到一个数据库基本相等;此外,同步过程在事务环境中完成,保证了多个数据在任何时候的一致性。由于莫比乌斯中间件主机在数据库方面的创新,中间件不仅可以知道数据的变化,还可以知道引起数据变化的SQL语句。根据SQL语句的类型,智能地采用不同的数据同步策略,使数据同步的代价最小化。
如果数据数量少,数据内容不大,就直接同步数据。
数据片段很少,但包含大数据类型,如文本、二进制数据等。所以数据要先压缩再同步,减少对网络带宽和传输的占用时间。
有很多数据。这时中间件会得到引起数据变化的SQL语句,然后对SQL语句进行分析,分析其执行计划和执行成本,选择是同步数据还是同步SQL语句到其他数据库。这种情况在调整表结构或批量更改数据时非常有用。
3.优点和缺点
(1)可扩展性强:当系统需要更高的数据库处理速度时,可以简单地通过添加数据库服务器进行扩展。
(2)可维护性:当一个节点出现故障时,系统会自动检测故障,并调用故障节点的应用,保证数据库的持续工作。
(3)安全性:由于数据会在多个服务器上同步,可以实现数据集的冗余,通过多个数据保证安全性。此外,还成功地将数据库放到了内网中,更好地保护了数据库的安全性。
(4)易用性:完全透明,集群暴露为IP。
(1)不能根据Web服务器的处理能力来分配负载。
(2)负载均衡器(控制端)故障会导致整个数据库系统瘫痪。
第二,数据库读写分离
1.实现原理:读写分离简单来说就是把对数据库的读写操作分离出来,分别对应不同的数据库服务器,可以有效减轻数据库和io的压力。主数据库提供写操作,而从数据库提供读操作。其实在很多系统中,主要是读操作。主数据库写的时候,数据要同步到从数据库,这样才能有效保证数据库的完整性。
(ebay读写比260: 1,易贝读写比分开)
(微软数据库分发版)
2.实现方法:在MS Sql server中,通过发布定义实现数据库复制,实现读写分离。复制是将一组数据从一个数据源复制到多个数据源的技术,它是将一个数据发布到多个存储站点的有效方法。使用复制技术,用户可以将数据副本发布到多台服务器上。复制技术可以保证分布在不同地方的数据自动同步更新,从而保证数据的一致性。SQL SERVER复制技术有三种类型:快照复制、事务复制和合并复制。SQL SERVER主要使用发布和订阅来处理复制。数据所在的服务器就是发布服务器,负责发布数据。发布服务器将要发布的数据的所有更改复制到分发服务器,分发服务器包含一个分发数据库,它可以接收数据的所有更改,保存这些更改,然后分发给订阅者。
3.优点和缺点
(1)数据实时性差:数据没有实时同步到自读服务器。当数据写入主服务器时,只有在下一次之后才能同步查询。
(2)数据量大时同步效率差:当单个表的数据量过大时,由于索引和磁盘IO等问题,插入和更新的性能会很差。
(3)同时连接多个(至少两个)数据库:连接至少两个数据数据库,实际的读写操作在程序代码中完成,容易造成混乱。
(4)读具有高性能、高可靠性和可扩展性:只读服务器,因为没有写操作,会大大减少磁盘IO等性能问题,大大提高效率;只读服务器可以采用负载均衡,主数据库发布到多个只读服务器,实现读操作的可伸缩性。
三。数据库拆分(分布式)
通过一定的特定条件,将存储在同一个数据库中的数据分布到多个数据库中实现分布式存储,并通过路由规则访问特定的数据库,使得每次访问面对的不是单台服务器,而是N台服务器,减轻了单机的负载压力。
纵向(垂直)拆分:指按功能模块拆分,如订单数据库、商品数据库、用户数据库……这样,多个数据库的表结构就不一样了。
横向(水平)拆分:同一个表的数据被分区保存在不同的数据库中,这些数据库中的表具有相同的结构。
(垂直拆分)
(水平分割)
1.实现原理:使用垂直拆分主要看应用类型是否适合这种拆分方式。例如,系统可以分为订单系统、商品管理系统和用户管理系统。业务系统比较清晰,垂直拆分可以起到很好的分散数据库压力的作用。业务模块不清晰、耦合度高(表关联)的系统不适合这种拆分方式。但是,垂直分裂法并不能完全解决所有的压力问题。比如有5000w的订单表,订单数据库的压力还是很大的。比如我们需要在这个表中插入一条新的数据,插入后数据库会重新索引这个表,索引5000w行数据的系统开销是不能忽略的。反过来,如果我们把这个表分成100个表,从table_001到table _ 100,500W行数据,平均下来,每个子表只有50万行数据。此时,我们在一个只有5000w行数据的表中插入数据后时间的索引会下降一个数量级,大大降低了DB提高的运行效率。
2.实现方法:垂直拆分。拆分方法实现起来相对简单。您可以根据表名访问不同的数据库。水平拆分有很多规则。下面总结一下前辈们的观点。
(1)顺序拆分:如果可以根据订单日期按年份划分产品,就把它们放在2003年的db1,2004年的db2,以此类推。当然也可以按照主键标准拆分。
优点:部分迁移
缺点:数据分布不均匀。可能2003年有100W的订单,2008年有500W的订单。
(2)hash modulo:hash user_id(或者如果user_id是数值的话直接用user _ id的值),然后用一个特定的numDB1r .比如一个数据库在应用中需要分成四个数据库,我们就用数字4对user_id的哈希值取模,也就是user_id%4。这样,每个操作就有四种可能。当结果为2时,对应DB2;当结果为3时,对应DB3;当结果为0时,它对应于DB4,因此数据均匀分布在四个DB4中。
优点:数据分布均匀
缺点:数据迁移麻烦;无法根据机器性能分配数据。
(3)将数据库配置保存在认证库中。
就是建立一个DB,单独存储user_id和DB的映射关系。每次访问数据库,都要先查询这个数据库一次,获取具体的DB信息,然后才可以执行需要的查询操作。
优点:灵活性强,一对一关系
缺点:每次查询前面都是查询,会造成一定的性能损失。