数据库架构的演变



如果你对项目管理、系统架构有兴趣,请加微信订阅号“softjg”,加入这个PM、架构师的大家庭

最近看了很多公司架构的演变的文章,发现其中的基本思路和架构演变都很类似,这里也总结一下数据库架构的演变以及演变背后的思路。

单主机

最开始网站一般都是由典型的LAMP架构演变而来的,一般都是一台linux主机,一台apache服务器,php执行环境以及mysql服务器,一般情况下,这些都在一台虚拟主机上,简称单主机模式。

单主机模式缺点:

1 web服务器和mysql服务器公用一台主机,共享硬件资源,可能存在某一方资源征用太大,导致整个应用产生瓶颈

2 当业务增长之后,没有办法做到横向扩展。

3 容错性太差,一旦主机存在问题,整个应用不可用

独立主机

随着业务的发展,可以把mysql服务器和web服务器主机分开,分别部署,就是独立主机模式。

独立主机模式下,web服务器和mysql不再共享硬件资源,分别部署。没有把鸡蛋放在一个篮子里面,增加了容错性。如果只是mysql服务器故障,那么对于web上不访问服务器的应用是不会受到影响的。而且web服务器可以做到横向扩展,如果web服务器性能不够,可以增加多台web服务器,进行负载均衡,分散web服务器的压力。

独立主机模式的缺点:

1 可扩展性问题:虽然web服务器可以做到横向扩展,但是mysql服务器是没有办法做到横向扩展的。

2 可用性问题:mysql服务器存在单点问题,一旦mysql服务器宕机,对影响的影响很大

3 性能问题:单台mysql服务器能够支撑的服务是有限的。

读写分离

随着业务的不断发展,数据库的压力会越来越大,单数据库慢慢的就不能满足需求了,一些网站对数据实时性要求不高,就会慢慢发展读写分离模式,对于普通的查询请求,分配到读库(也可以说是备库),对于修改请求,在主库上完成。对于读库,由于是无状态的,可以做到横向扩展。对于写库,还只能是单台主机

这种模式其实有限制的,要根据业务的类型来考虑。主库的数据是最新的,但是同步到读库会有时延,所以应用必须能够容忍短暂的不一致性。对于一致性要求非常高的场景是不适合的。

这种模式的存在的问题:

1 可扩展性:虽然读库可以做到横向扩展,但是写库还不行,读库不能够横向扩展

2 可用性:读库成为单点,一旦故障,影响所有的写操作业务

业务垂直拆分

随着业务的发展,一台写库显然不能够满足高并发的情况,但是考虑到写库是有状态的,不能简单的横向扩展,假设有两台写库,那么随机更新一台的数据,就会导致另一方数据存在问题。出现一种数据两个不同版本,显然是无法接受的。在写库上,可以考虑按照业务来垂直进行分库。由于我们这里讨论的是数据库架构,对于web层来说,其实也是可以按照业务垂直拆分的。

在按照业务垂直拆分以后,系统在性能上有了很高的提升,只需要把业务上分成垂直部分,分的越细,系统的整体扩展能力就越强。

这种模式下,存在以下几个问题

1 可用性:假设一个完整的业务流程P访问的数据库被拆分为A、B、C、D、E 五个库,假设每个写库可用性为99%,那么这个业务流程P的可用性就为99%*99%*99%*99%*99%=95%,库拆分的越多,对系统的整体可用性挑战就越大。

2 性能:由于垂直业务库每个库的负载可能不一样,假设交易库负载很高,一个交易写库肯定不能够满足需求,这个情况下,交易库成为整个系统的瓶颈。

3 可扩展性:单个节点的可扩展性没有得到改善,交易库不能单独进行扩展。

单业务库水平、垂直拆分

在上一种情况,假设交易库是整个系统的瓶颈,需要对交易库进行单独的扩展。可以考虑交易的水平拆分或者垂直拆分,有可能同时进行两种方式拆分。

水平拆分一般根据业务无关的关键字进行拆分,横向扩展性比较好,但是对于查询的挑战比较大

垂直拆分一般根据业务来拆分,但是可能导致数据不均匀以及拆分不够灵活。对于查询来说,相对比较友好

拿交易库举个例子,可以先交易的类型进行业务上的垂直分库,在按照订单号进行水平分库。

假设可以分成M*N个库,那么单个库的故障会影响1/M*N 的交易,但是假设每个库可用性为99% ,那么交易数据库故障概率为 (99%)的(M+N)次方,如果数据库拆分的越多,发生单个数据库故障概率就越高。

这种方式存在的问题:

1 虽然单个节点故障影响的用户很少,但是整体可用会降低。

2 数据库管理上带来复杂的挑战,假设交易库表结构变更,需要执行M×N次脚本变更。

3 由于发生单个数据库故障的概率比较高,dba会很苦逼的,估计经常性要救火

4 开发和测试起来会非常苦逼,开发和测试成本会变高,查询非常复杂。

5 单个节点如果发生故障,没有失败检测并且切换机制

6 分库还不能在水平方向做到无限扩展,我们的算法是事先分配M个库,如果添加一个库基本上不可行

随机分库

对于第六个问题,在水平方向的无线扩展,可以考虑一种机制,在insert数据的时候,申请一个数据库编号,然后把数据库的编号作为一个字段保存或者在把这个编号添加到已经字段上。

例如假设我们申请insert数据库,得到一个数据库编号为1000,那么我们可以构造出来一个订单号为1000_tradeno,订单号前面是分库编号,订单号后面是实际tradeno,这样解决了水平无线扩展的问题。这种就是随机分库模式。但是这一种方式的局限性很大,

随机分库的缺点:

1 分库算法和业务耦合在一起,比较适合特定的场景,适用范围比较窄

2 对于insert操作,比较容易,对于update操作,必须有分库编号,也就是说,只能根据特定的字段来进行更新

3 不适合批量查询的场景,查询功能限制比较大,这也是分库带来的问题

单数据库备份以及失败切换

对于单个数据库,如果发生故障,会影响业务,但是能否在发生故障的时候进行切换。虽然可以实现,但是会存在一定的问题,需要特定场景进行特定的分析。这一块比较复杂,说起来可以在写一篇文章,就简单的介绍一下

以上就是总结的数据库的架构演变,数据库的演变需要很多基础技术做支撑,主要包括

1 强大的分布式数据库的管理中间件,主要屏蔽底层的数据库路由以及数据管理功能

2 强大的数据运维团队以及监控体系,能够检测出每个节点的数据库状态

3 强大的数据库管理管理团队,能够维护这么的数据库集群

4 强大的业务架构能力和技术架构能力,能够掌控这么复杂的业务场景。

如果你对项目管理、系统架构有兴趣,请加微信订阅号“softjg”,加入这个PM、架构师的大家庭

数据库架构的演变,布布扣,bubuko.com

时间: 2024-10-29 04:53:46

数据库架构的演变的相关文章

直播平台的数据库架构演变

8月24日,阿里云数据库技术峰会到来,本次技术峰会邀请到了阿里集团和阿里云数据库老司机们,为大家分享了一线数据库实践经验和技术干货.在本次峰会上,特邀嘉宾映客直播架构师王振涛分享了映客直播作为创业公司从0至日活千万的数据库架构变迁,数据库在直播中的经典应用场景,数据库存储的优化思路,以及如何构建一个高可用数据库架构. 以下内容根据演讲嘉宾现场视频以及PPT整理而成. 本次分享的内容将主要围绕以下四个部分: 一.映客直播发展历程 二.直播遇上云数据库 三.风口上的数据库架构变迁 四.直播典型应用场

数据库架构演变及分库分表

当生产环境中业务量激增,数据库数据量也会极具增加.当数据库的数据量达到一定程度时(数据库瓶颈),数据库宿主机负载超高,会严重影响业务,严重时会导致数据库宕机.为了避免这种极端情况的发生,我们应当在发生前做好预案,用于解决数据库数据量过载的问题.以下是我个人工作中使用的解决方案:1)数据库主从或多主多从方案2)数据库冷热数据拆分3)数据库分库分表操作4)在数据库前端增加缓存redis或memcached 一开始时,公司部分业务的架构如下(全都是单节点情况)经过自己强调该架构严重的缺点:节点单一,服

MyCat 启蒙:分布式系统的数据库架构演变

MyCat是一个数据库分库分表中间件,使用MyCat可以非常方便地实现数据库的分库分表查询,并且减少项目中的业务代码.今天我们将通过数据库架构发展的演变来介绍MyCat的诞生背景,以及MyCat在其中扮演的角色,从而使得大家对MyCat的诞生及其作用有深入的理解. 单数据库架构 一个项目在初期的时候,为了尽可能快地验证市场,其对业务系统的最大要求是快速实现.在这个阶段,代码开发人员为了能快速实现业务系统,一般都是将所有层级(MVC)的业务代码都写在同一个项目中,所有的业务数据都存放在同一个数据库

开启 J2EE(七)— Model1、Model2和三层架构的演变

Model1和Model2是Javaweb开发的两种常见的模型,Model1是jsp+javabean的模式,Model2是jsp+servlet+javabean的模式.JavaBean就是将逻辑处理.数据库访问等等,在java中对对象进行的打包(对应下文图中的业务逻辑). 下面就详细的认识认识: 一.Model1 在Model1模型中,是以JSP为中心,这种模型中JSP既要做页面显示,又要结合业务逻辑处理服务端过程,简单说就是Model1开发没有Servlet,JSP中既有HTML代码又有逻

linux 网站架构的演变

上一节,我们学习了linux下文件服务器NFS的搭建,了解了他的基本原理.可以说也是很简单的一个服务.今天我们学习影响互联网最重要服务web服务(应用服务).什么是web服务呢?就是我们平常在浏览器输入一个网站的地址,然后能给我们提供服务的就是web服务器.Web服务器的发展历史我就不多说了,我直接说下现在流行的搭建这种服务的常用软件.在Linux下比较常用的有三种分别是apache软件,tomcat软件,nginx软件.这三款是我在工作都接触过的,当然还有别的,其原理都是一样的,在这里我就不多

互联网数据库架构设计思路

一 .58同城数据库架构设计思路 (1)可用性设计 解决思路:复制+冗余 副作用:复制+冗余一定会引发一致性问题 保证"读"高可用的方法:复制从库,冗余数据,如下图   带来的问题:主从不一致 解决方案:见下文 保证"写"高可用的一般方法:双主模式,即复制主库(很多公司用单master,此时无法保证写的可用性),冗余数据,如下图   带来的问题:双主同步key冲突,引不一致 解决方案: a)方案一:由数据库或者业务层保证key在两个主上不冲突 b)方案二:见下文 5

架构的演变1.0

1.0主要解决数据库压力过高而成为网站的瓶颈,网站利用数据库的主从热备功能 实现数据库的读写分离,从而改善数据库的负责压力.应用服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据同步从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据.为了便于应用程序访问读写分离后的数据库,通常应用服务器使用专门的数据库访问模块,使数据库读写分离对应用透明. 1.1会在下一篇文章体现,敬请期待. 架构的演变1.0

数据库架构

看到一篇讲数据库架构的文章,四种方案优缺点描述很清晰,转了:https://www.cnblogs.com/littlecharacter/p/9084291.html 一.数据库架构原则 高可用 高性能 一致性 扩展性 二.常见的架构方案 方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用 jdbc:mysql://vip:3306/xxdb 1.高可用分析:高可用,主库挂了,keepalive(只是一种工具)会自动切换到备库.这个过程对业务层是透明的,无需修改代码或配置. 2.高性

数据架构的演变

大数据技术的兴起,让企业能够更加灵活高效地使用自己的业务数据,从数据中提取出更多重要的价值,并将数据分析和挖掘出来的结果应用在企业的决策.营销.管理等应用领域.但不可避免的是,随着越来越多新技术的引入与使用,企业内部一套大数据管理平台可能会借助众多开源技术组件实现. 01 传统数据基础架构 如图1-1所示,传统单体数据架构(Monolithic Architecture)最大的特点便是集中式数据存储,企业内部可能有诸多的系统,例如Web业务系统.订单系统.CRM系统.ERP系统.监控系统等,这些