您当前的位置:首页 > 电脑百科 > 数据库 > 百科

一文带你看透数据库架构的演变过程

时间:2019-11-01 14:00:37  来源:  作者:

背景

在互联网初创时期,企业往往采用单体架构去搭建自己的应用系统,但是,随着企业的不断壮大,系统访问量不断随之上升,数据量也急剧增长。数据的存储是首先要解决的问题,在这个大数据时代,数据就是企业的命根子,数据库的单体架构很难满足数据的存储,这时,我们要对数据进行切分,数据的切分又分为垂直切分和水平切分。

数据切分和数据库架构

在数据切分之前,我们的所有业务都放在一个数据库中,比如:我们的用户业务,商品业务,订单业务。数据库的架构如下:

一文带你看透数据库架构的演变过程

 

在业务发展到一定规模时,一个数据库很难满足数据的存储,并且导致数据的访问比较慢,导致用户的流失。这时,我们要对数据进行切分,使其从单一的数据库的存储分散到多个数据库的存储。在进行数据切分时,我们要遵循先垂直水平的原则。

数据的垂直切分也就是数据的纵向切分,按照业务将数据进行切分。在上面的例子中,我们将一个数据库切分为:用户库,商品库,订单库。将原来的一个数据库分为了三个数据库,分散了数据的存储压力,同时也分散了数据的读取压力。如图所示:

一文带你看透数据库架构的演变过程

 

但是,随着业务的发展,单个业务库也会遇到存储的瓶颈,比如:用户的急剧增长,导致单一的用户库无法存储,用户访问的速度变慢等。这时,我们就要对数据进行水平切分了,将用户按照某种规则平均分配到多个数据库中,也就是将原来的单一的用户库进行了水平扩展。如图所示:

一文带你看透数据库架构的演变过程

 

这里,我们只是水平的拆分了两个库,大家可以根据自己的系统情况,拆分成更多的数据库。

分库分表中间件MyCAT

数据库的整体架构我们规划好了,那么我们在进行开发的时候,怎么确定一条数据从哪个数据库读取呢?或者插入一条数据的时候,这条数据要插入到哪一个数据库呢?数据库的选择是交给开发人员负责呢?还是统一的设置一个代理层呢?开发人员在开发的时候,关注的焦点是业务,复杂的业务已经占据了他们大部分的精力,如果再让他们去考虑数据库的问题,对他们的压力是非常大的,而且每个开发人员的代码风格也不一样,导致项目混乱,臃肿,难以维护。所以,我们往往采用代理层统一处理数据的分片,这时,我们的MyCAT分库分表中间件就登场了,它去做统一的数据库层的代理。如图:

一文带你看透数据库架构的演变过程

 

MyCAT统一做数据库层的代理,对外暴露一个地址,应用系统直接连接MyCAT,就像连接普通的MySQL一样,没有任何的区别。所有的CRUD操作都直接对应MyCAT,再由MyCAT做具体的数据分片,数据分片的过程对于开发人员来说是透明的,不需要额外的处理,这样,开发人员只需要关注业务就可以了。

MyCAT集群

可用性对于一个系统来说是非常重要的,尤其是在当今的互联网时代,系统宕机1分钟,带来的损失都是非常严重的,所以,我们在搭建系统时,往往采用集群方式,某一个节点的不可用,不影响整体系统的可用性。在前面的例子中,我们所有的节点都是单节点,存在着单点故障,这是我们不希望看到的,所以我们要搭建集群。6个业务数据库我们都可以做主从,这时,用户1库可以搭建为 用户1(主)和用户1(从),用户2库可以搭建为 用户2(主)和用户2(从)。订单库和商品库也可以做同样的操作,如图:

一文带你看透数据库架构的演变过程

 

这样我们的业务数据库不存在单点故障了,但是MyCAT成为了单点,如果MyCAT发生故障,或者MyCAT承载了大量的数据库的请求,MyCAT成了整个系统的唯一瓶颈。那么MyCAT我们如何搭建集群呢?有的小伙伴可能会说了,我们再部署一个MyCAT,这个MyCAT和前一个MyCAT配置一样就可以了。是的,这只是其中的第一步,我们有了两个MyCAT连接数据库,那么我们的应用系统也需要连接两个MyCAT吗?两个MyCAT我们要如何分配请求呢?这是不是又增加了应用系统的复杂性呢?所以,我们在两个MyCAT上面再增加一个负载均衡器,它可以将请求按照某种规则分配到两个MyCAT上,这个负载均衡器我们采用HAProxy。整体架构如图:

一文带你看透数据库架构的演变过程

 

这样MyCAT的单点故障解决了,但是HAProxy又成了单点,这是不是很有意思,似乎总有一个单点解决不了。在这里最后一个单点HAProxy,我们使用KeepAlived做故障转移就可以解决了,两个KeepAlived可以提供一个虚拟IP,业务系统直接连接这个虚拟IP,后面的过程对于应用系统是透明的。如图所示:

一文带你看透数据库架构的演变过程

 

这就是我们最终的数据库架构,不存在任何的单点故障。

分布式事务与分布式ID

进行了分库分表后,随之而来的问题也就出现了,那就是ID的问题和分布式事务的问题,分布式ID和分布式事务在MyCAT中都有相应的解决方案,我们在MyCAT中进行配置就可以了。



Tags:数据库架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
为正确的案例选择正确的模式 前言困惑的特德恳求说:"很难相信这是不可能的。""这是2020年;当然,必须有另一种方式"。这是Acme Widgets的教学时刻。他们技术堆栈中的数据库发生...【详细内容】
2020-12-07  Tags: 数据库架构  点击:(156)  评论:(0)  加入收藏
一、SMP数据库架构SMP(对称多处理器结构,Symmetric Multi-Processor)数据库架构部署成本相对较低,可以运行从大型服务器到中型商用硬件的各种设备。它在提供合理的性能和吞吐量...【详细内容】
2020-12-01  Tags: 数据库架构  点击:(536)  评论:(0)  加入收藏
在分布式系统里面,往往制约整个系统发展的瓶颈点就是数据库,所以数据库的架构和高可用以及数据库的切分都是我们值得花大力气去学习的。首先我们来说说数据库的架构。1、mysql...【详细内容】
2020-06-09  Tags: 数据库架构  点击:(55)  评论:(0)  加入收藏
本文以MYSQL数据库为例说明。一、数据库架构原则有以下几种:1、高可用2、高性能3、一致性4、扩展性二、常见的架构方案: 方案一:主备架构,只有主库提供读写服务,备库冗余作故障转...【详细内容】
2019-12-24  Tags: 数据库架构  点击:(119)  评论:(0)  加入收藏
数据库作为基础软件中的重要一环有着很深的技术含量,在这样的大背景下国产数据库厂商开始发力,这其中分布式数据库如雨后春笋般出现,良性的竞争环境使它们都得到了长足的发展,其...【详细内容】
2019-11-19  Tags: 数据库架构  点击:(152)  评论:(0)  加入收藏
背景在互联网初创时期,企业往往采用单体架构去搭建自己的应用系统,但是,随着企业的不断壮大,系统访问量不断随之上升,数据量也急剧增长。数据的存储是首先要解决的问题,在这个大数...【详细内容】
2019-11-01  Tags: 数据库架构  点击:(120)  评论:(0)  加入收藏
一、数据库架构原则 高可用 高性能 一致性 扩展性二、常见的架构方案方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用 jdbc:mysql://vip:3306/xxdb1、高可用分析:高...【详细内容】
2019-09-27  Tags: 数据库架构  点击:(121)  评论:(0)  加入收藏
一、数据库架构原则 高可用 高性能 一致性 扩展性二、常见的数据库架构方案方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用 jdbc:mysql://vip:3306/xxdb1、 高...【详细内容】
2019-09-16  Tags: 数据库架构  点击:(195)  评论:(0)  加入收藏
本文总结一下接触过的关系型数据库常用的几种架构及其演进历史。...【详细内容】
2019-08-16  Tags: 数据库架构  点击:(254)  评论:(0)  加入收藏
一、数据库架构原则 高可用 高性能 一致性 扩展性二、常见的架构方案方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用 jdbc:mysql://vip:3306/xxdb1、高可用分析...【详细内容】
2019-06-28  Tags: 数据库架构  点击:(347)  评论:(0)  加入收藏
▌简易百科推荐
1增1.1【插入单行】insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values (&#39;开心朋朋&#39;,&#39;男&#39;,&#39;1980/6/15&#3...【详细内容】
2021-12-27  快乐火车9d3    Tags:SQL   点击:(2)  评论:(0)  加入收藏
最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫, 不知道各种写法孰优孰劣,该选用哪种写法,以及各种写法的优缺点,本文以一个简单的查询...【详细内容】
2021-12-23  linux上的码农    Tags:sql   点击:(9)  评论:(0)  加入收藏
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的HasorDB 是一个全功能数据库访问工具,提供对象映射、丰...【详细内容】
2021-12-22  GitHub精选    Tags:HasorDB   点击:(5)  评论:(0)  加入收藏
作者丨Rafal Grzegorczyk译者丨陈骏策划丨孙淑娟【51CTO.com原创稿件】您是否还在手动对数据库执行各种脚本?您是否还在浪费时间去验证数据库脚本的正确性?您是否还需要将...【详细内容】
2021-12-22    51CTO  Tags:Liquibase   点击:(4)  评论:(0)  加入收藏
场景描述:由于生产环境的表比较复杂,字段很多。这里我们做下简化,只为说明今天要聊的问题。有两张表 tab1,tab2: tab1 数据如下: tab2 数据如下: 然后给你看下,我用来统计 name=&#3...【详细内容】
2021-12-20  Bald    Tags:SQL   点击:(7)  评论:(0)  加入收藏
前言知识无底,学海无涯,知识点虽然简单,但是比较多,所以将MySQL的基础写出来,方便自己以后查找,还有就是分享给大家。一、SQL简述1.SQL的概述Structure Query Language(结构化查...【详细内容】
2021-12-16  谣言止于独立思考    Tags:SQL基础   点击:(13)  评论:(0)  加入收藏
前言作为一名测试工程师,工作中在对测试结果进行数据比对的时候,或多或少要和数据库打交道的,要和数据库打交道,那么一些常用的 SQL 查询语法必须要掌握。最近有部分做测试小伙...【详细内容】
2021-12-14  柠檬班软件测试    Tags:SQL   点击:(15)  评论:(0)  加入收藏
话说C是面向内存的编程语言。数据要能存得进去,取得出来,且要考虑效率。不管是顺序存储还是链式存储,其寻址方式总是很重要。顺序存储是连续存储。同质结构的数组通过其索引表...【详细内容】
2021-12-08  小智雅汇    Tags:数据存储   点击:(18)  评论:(0)  加入收藏
概述DBConvert Studio 是一款强大的跨数据库迁移和同步软件,可在不同数据库格式之间转换数据库结构和数据。它将成熟、稳定、久经考验的 DBConvert 和 DBSync 核心与改进的现...【详细内容】
2021-11-17  雪竹聊运维    Tags:数据库   点击:(26)  评论:(0)  加入收藏
一、前言 大家好,我是小诚,《从0到1-全面深刻理解MySQL系列》已经来到第四章,这一章节的主要从一条SQL执行的开始,由浅入深的解析SQL语句由客户端到服务器的完整执行流程,最...【详细内容】
2021-11-09  woaker    Tags:SQL   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条