架构设计---数据库的存储优化
创始人
2024-05-09 07:06:23
0

前言:

互联网系统架构中,承受着最大出力压力,最难以被伸缩的,就是数据存储部分,原因主要有两方面,一方面,数据存储需要使用硬盘,而硬盘的处理速度要比其他几种计算资源都要慢,比如说CPU、内存等;数据是一个公司最重要的资产,公司需要保证数据的高可用以及一致性,非功能性约束也要更高一些。

因此数据存储通常都是互联网应用的瓶颈,在高并发的情况下,最容易出现性能问题的就是数据存储。目前用来改善数据存储能力的主要手段:数据库的主从复制、数据库分片和NoSql数据库。

数据库的主从复制:

MySql的主从复制,就是将MySql主数据库中的数据复制到从数据库中去,复制的原理:当应用程序客户端发送一条更新命令到主服务器数据库的时候,数据库会把这条更新命令同步记录到Binlog中,然后由另外一个线程从Binlog中读取这条日志,通过远程通讯的方式将它复制到从服务器上面。

从服务器获得这条更新的日志以后,将其加入到自己的Relay Log中,然后由另外一个SQL执行线程从Relay Log中读取这条新的日志,并且把它在本地数据库中执行一遍,这样当客户端应用程序执行一个update命令的时候,这个命令会同时在主数据库和从数据库中执行,从而实现了主数据库向从数据库的复制处理,使得从数据库与主数据库保持一致。

通过主从数据库复制的方式,我们可以实现数据库读写的分离,写操作访问主数据库,读操作访问从数据库,使数据库具有更强大的访问负载能力,支撑更多的用户访问。在实践中,通常采用一主多从的数据复制方案,也就是说,一个主数据库将数据复制到多个从数据库,多个从数据库承担更多的读操作压力,以及不同的角色,比如说有的从数据库用来做实时数据分析,有的从数据库用来做批任务报表计算,有的单纯做数据备份。

采用一主多从的方案,当某个从数据库宕机的时候,还可以将读操作迁移到其他从数据库上,保证读操作的高可用,但是如果主数据库宕机,系统就没法使用了,因此现实中,也会采用MySql主主复制的方案,也就是说,两台服务器互相备份,任何一台服务器都会将自己的Binlog复制到另一台机器的Relay Log中,以保持两台服务器的数据一致性。

使用主主复制需要注意的是,主主复制仅仅用来提升数据写操作的可用性,并不能用来提高写操作的性能,任何时候,系统中都只能有一个数据库作为主数据库,也就是说,所有的应用程序都必须连接同一个主数据库进行写操作,只有当该数据库宕机失效的时候,才会将写操作切换到另一台主数据库上面,这样才能保证数据库的一致性,不会出现数据冲突。

此外,不管主从数据复制还是主主数据复制,都无法提升数据的存储能力,也就是说,不管增加多少服务器,这些服务器存储的数据都是一样的,如果数据量太大的话,数据库无法存下这么多的数据,通过数据复制是无法解决问题的。

数据库分片:

数据库主从复制无法解决数据库的存储问题,但是数据库分片技术可以解决,也就是说,将一张表的数据分成若干片,每一片都包含了数据表中一部分的行记录,然后每一片存储在不同的服务器上面,这样一张表就存储在多台服务器上面了。

最简单的数据库分片存储可以采用硬编码的方式,在程序代码中直接指定一条数据库记录要存放到那个服务器上面,比如与说将用户分成两片,存储在两台服务器上面,那么就可以在程序代码中根据用户ID进行分配计算,ID为偶数的用户记录存储到服务器1,ID为奇数的存储在服务器2上面

但是硬编码方式的缺点比较明显,首先,如果要增加服务器,那么就必须修改分片逻辑代码,这样程序代码就会因为非业务需求产生不必要的变更,其次,分片逻辑耦合在处理业务逻辑的程序代码中,修改分片逻辑或者修改业务逻辑都可能使得另一部分代码因为不小心的改动而出现bug。

可以使用分布式关系数据库中间件来解决这个问题,将数据的分片逻辑在中间件中完成,对应用程序透明。

实践中,最常见的数据分片算法是余数Hash算法,根据主键ID和服务器的数目进行取模计算,根据余数连接相对应的服务器。

关系数据库的混合部署:

关系数据库的主从复制,主主复制、数据库分片这几种改善数据库读写以及存储能力的技术方案,事实上,这几种方案可以根据应用场景的需要进行混合的部署处理,也就是说,可以在一个系统中混合使用以上多种技术方案。

对于数据访问和存储压力不太大,对可用性要求也不太高的系统,也许部署在单一服务器上面的数据库就可以解决问题,所有的应用服务器都连接访问这一台数据库服务器。

如果访问量比较大,同时对数据可用性要求也比较高,那么就需要使用数据库主从复制技术,将数据库部署在多台服务器上面。

随着业务复杂以及数据存储和访问压力的增加,这个时候可以选择业务分库,也就是说,将不同业务相关的数据库表,部署在不同的服务器上面,比如类目数据和用户数据相对关联关系不大,服务应用也不一样,那么就可以将这两类的数据库部署在不同的服务器上面,而每一类数据库还可以继续选择使用主从复制,或者主主复制进行处理。

不同的业务数据库,其数据库存储的数据和访问压力也是不同的,比如说用户数据库的数据量和访问量可能是类目数据库的几十倍,甚至上百倍,这个时候可以针对用户数据库进行数据分片,而每个分片数据库还可以继续进行主从复制或者主主复制进行处理。

NoSql数据库

NoSql数据库是改善数据存储能力的一个重要手段,NoSql数据库和传统的关系型数据库不同,主要的访问方式不是使用SQL进行操作,而是使用Key、Value的方式进行数据访问,所以被称为NoSql数据库,NoSql数据库主要用来解决大规模分布式数据的存储问题,常用的NoSql数据有Apache HBase、Apache Cassandra等,Redis虽然是一个分布式缓存技术产品,但是有时候也被归类为NoSql数据库。

NoSql数据库面临的挑战之一是数据一致性的问题,如果数据分布存储在多台服务器组成的集群上,那么当有服务器节点失效的时候,或者服务器之间网络通信故障的时候,不同用户读取的数据就有可能不一样的。

比如用户1连接服务节点A,用户2连接服务器节点B,当两个用户同时修改某个数据的时候,如果正好服务器A和服务器B之间的网络通信失败,那么这两个节点上的数据也就不一样了,其他用户在访问这个数据的时候,可能会得到不一样的结果。

关于分布式存储系统有一个著名的CAP理论,CAP原理说:一个提供数据服务的分布式系统无法同时满足数据一致性(Consistency)、可用性(Availability)和分区耐受性(Partition Tolerance)这三个条件。

一致性是说,每次读取的数据都应该是最近写入的数据或者返回一个错误,而不是过期数据,也就是说,数据是一致的。

可用性是说,每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不过这个响应不需要保证数据是最近写入的,也就是说,系统需要一致都是可以正常使用的,不会引起调用者的异常,但是并不保证响应的数据是最新的。

分区耐受性是说,即使因为网络的原因,网络分区失效的时候,部分服务器节点之间消息丢失或延迟了,系统依然应该是可以操作的。

CAP的原理是说,当网络分区失效发生的时候,我们要么取消操作,保证数据就是一致的,但是系统却不可用,要么继续写入数据,但是数据的一致性就得不到保证了。

对于一个分布式系统而言,网络失效一定会发生,也就是说,分区耐受性是必须要保证的,而对于互联网应用来说,可用性也是需要保证的,分布式存储系统通常需要在一致性上做一些妥协和增强。

Apache Cassandra解决数据一致性的方案是,在用户写入数据的时候,将一个数据写入集群中的三个服务器节点,等待至少两个节点响应写入成功,用户读取数据的时候,从三个节点尝试读取数据,至少等到两个节点返回数据,并且根据返回数据的时间戳,选取最新版本的数据。这样,即使服务器中的数据不一致,但是最终用户还是能得到一个一致的数据,这种方案也被称为最终一致性。

小结:

架构是一门关于权衡的艺术,这一点在数据存储架构上表现的最明显了,由于数据存储的挑战性和复杂性,无论你选择何种技术方案,都会带来一些新的问题和挑战,数据存储架构没有一下子就能处理的解决方案,唯有在深刻理解自己业务场景和各种分布式存储技术特点的基础上,进行各种权衡的考虑处理,才能选择最合适的解决方案,并且可以想办法进行处理相关的缺陷,才能真正的进行解决问题。

相关内容

热门资讯

安卓系统计划软件推荐,精选计划... 你有没有发现,手机里的安卓系统越来越智能了?这不,最近我可是挖到了一些超棒的安卓计划软件,它们不仅能...
收钱吧安卓系统插件,便捷支付新... 你有没有发现,现在的生活越来越离不开手机了?手机里装满了各种应用,而今天我要跟你聊聊一个特别实用的工...
鸿蒙系统是否还属于安卓,独立于... 你有没有想过,那个在我们手机上默默无闻的鸿蒙系统,它到底是不是安卓的“亲戚”呢?这个问题,估计不少手...
安卓系统手机用什么钱包,轻松管... 你有没有想过,你的安卓系统手机里装了那么多应用,但最离不开的,可能就是那个小小的钱包了。没错,就是那...
安卓系统能玩部落冲突吗,部落冲... 你有没有想过,安卓系统上的手机,是不是也能玩那款风靡全球的《部落冲突》呢?这款游戏自从推出以来,就吸...
智能机器人安卓系统,引领未来智... 你知道吗?在科技飞速发展的今天,智能机器人已经不再是科幻电影里的专属了。它们正悄悄地走进我们的生活,...
华为win10系统改装安卓系统... 你有没有想过,你的华为笔记本电脑里的Windows 10系统,能不能来个华丽变身,变成安卓系统呢?这...
旧电脑上安什么安卓系统,适配不... 你那台旧电脑是不是已经闲置好久了?别让它默默无闻地躺在角落里,给它来个华丽变身吧!今天,就让我来告诉...
安卓app语言跟随系统,随系统... 你知道吗?在手机世界里,有一个神奇的小功能,它就像你的贴身翻译官,无论你走到哪里,都能帮你轻松应对各...
惠城安卓系统降级在哪,揭秘降级... 你有没有遇到过手机系统升级后,发现新系统让你头疼不已,想回到那个熟悉的安卓系统呢?别急,今天就来告诉...
阿里云系统转安卓,揭秘安卓平台... 你知道吗?最近有个大动作在互联网圈里引起了不小的波澜,那就是阿里云系统竟然要转战安卓阵营了!这可不是...
安卓系统有最美壁纸么,探寻最美... 哦,亲爱的安卓用户,你是否曾在某个午后,百无聊赖地翻看着手机,突然被那一张张壁纸惊艳了眼眸?是的,我...
安卓系统采用Linux操作系统... 你知道吗?安卓系统,这个在我们手机上无处不在的小家伙,它的心脏竟然是Linux操作系统内核!是不是觉...
安卓原生平板通用系统,探索安卓... 你有没有发现,现在市面上平板电脑的品牌和型号真是五花八门,让人挑花了眼?不过,你知道吗?在众多安卓平...
小米1系统是安卓几,搭载安卓几... 你有没有想过,你的小米手机里那个熟悉的系统,其实是基于安卓的哦!没错,就是那个全球最流行的手机操作系...
可以安装安卓系统的相机,智能摄... 你有没有想过,一台相机不仅能拍出美美的照片,还能像智能手机一样,玩转各种应用?没错,现在市面上就有这...
安卓系统gps定位不准,安卓G... 你是不是也遇到过这种情况?手机里的安卓系统GPS定位总是不准,让人头疼不已。有时候,你明明就在家附近...
电信机顶盒装安卓系统,开启智能... 你有没有想过,家里的电信机顶盒其实也可以装上安卓系统呢?听起来是不是有点不可思议?别急,让我带你一步...
安卓系统可以做苹果桌面,打造个... 你知道吗?现在科技的发展真是让人眼花缭乱,竟然有人想出了安卓系统可以做苹果桌面的神奇想法!是不是觉得...
安卓系统自带的网页,功能与特色... 你有没有发现,每次打开安卓手机,那熟悉的系统界面里总有一个默默无闻的小家伙——安卓系统自带的网页浏览...