`
thinkerAndThinker
  • 浏览: 282838 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据库架构的演变

 
阅读更多

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

单主机

最开始网站一般都是由典型的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 强大的业务架构能力和技术架构能力,能够掌控这么复杂的业务场景。

 

分享到:
评论

相关推荐

    百度数据库架构演变 介绍了很多架构

    ### 百度数据库架构演变概览 #### 一、百度数据库架构综述 百度数据库架构的演变历程可以分为三个阶段:分散式、集中式以及分布式。每个阶段都针对当时面临的特定挑战进行了相应的优化和改进。 #### 二、业务概念...

    数据库架构演变与设计

    数据库架构演变与设计,感兴趣的人读一下,看一下

    百度数据库架构演变与设计

    ### 百度数据库架构演变与设计 #### 一、百度数据库架构综述 百度数据库架构的发展历程和技术演进,不仅反映了互联网技术的进步,也展示了如何应对海量数据处理和高并发访问带来的挑战。百度数据库架构可以分为三...

    架构师学习与成长 百度数据库架构演变与设计 共26页.pptx

    本文将深入探讨百度数据库架构的演变与设计,从早期的集中式和分散式系统到后来的分布式数据库,以及在此过程中面临的挑战和解决方案。 首先,百度数据库架构的综述涉及了业务概念、业务接口和业务规则。业务概念是...

    MySQL数据库架构的演化观察-褚霸(余锋)

    ### MySQL数据库架构的演化观察 #### 一、架构演进的路径 MySQL作为一款广泛使用的开源关系型数据库管理系统,其架构随着技术的发展和社会需求的变化而不断进化。在阿里巴巴研究员褚霸(余锋)的研究中,我们可以...

    大型网站架构演变和知识体系

    架构演变第一步:物理分离webserver和数据库 架构演变第二步:增加页面缓存 架构演变第三步:增加页面片段缓存 架构演变第四步:数据缓存 架构演变第五步: 增加webserver 架构演变第六步:分库,数据库集群 架构...

    腾讯大讲堂 - 2012精品讲座合集(pdf)

    6-QQ基础数据库架构演变之路 7-QQ空间技术架构之峥嵘岁月 8-架构之美-开放环境下的网络架构 9-智能应用和云服务:手机浏览器的未来之门 10-开放之路:成就创新的四把钥匙 11-从十元到十亿:腾讯包月产品深度思维 12-...

    2011年DTCC数据库大会ppt下载

    王龙:百度数据库架构演变与设计.pdf 杨海潮: 基于MySQL的分布式数据库实践_公开.pdf 姜承尧:MySQL创新工厂.pdf 邵宗文:数据库托管平台介绍.pdf 杨涛:MySQL 的开源DW 解决方案.pdf Digoal.Zhou - PostgreSQL ...

    百度分布试数据库架构、设计及优化(共六文件

    其次,"百度数据库架构演变与设计.pdf"揭示了百度数据库架构的发展历程,从单一数据库到分布式数据库的转变。这通常涉及到水平扩展和垂直扩展的策略,以及如何处理数据分片、事务一致性、容灾恢复等问题。百度可能...

    去哪网数据库架构发展历程.pdf

    总结来说,去哪儿网的数据库架构演变体现了从单一到分布式,从低可用到高可用,从弱一致性到强一致性的转变。这个过程反映了企业在面对大数据、高并发和多机房部署等挑战时,如何选择和优化数据库架构,以实现系统的...

    互联网公司技术架构资料.淘宝.数据库架构演进历程

    淘宝数据库架构的演变过程反映了互联网技术从无到有、从简单到复杂、从单一到分布式的发展趋势,这其中涉及到一系列的技术挑战和解决方案。本文将深入探讨这个主题,围绕“架构”和“Java”这两个关键词,解析淘宝...

    互联网公司技术架构

    数据库架构演变与设计 互联网公司技术架构资料.百度.贴吧架构实践 互联网公司技术架构资料.淘宝.技术架构介绍 互联网公司技术架构资料.淘宝.数据库架构演进历程 互联网公司技术架构资料.淘宝.数据魔方系统架构 ...

    互联网公司技术架构资料-百度_淘宝_腾讯_新浪

    数据库架构演变与设计 互联网公司技术架构资料.百度.贴吧架构实践 互联网公司技术架构资料.淘宝.技术架构介绍 互联网公司技术架构资料.淘宝.数据库架构演进历程 互联网公司技术架构资料.淘宝.数据魔方系统架构 ...

    数据库架构——MySQL数据库架构的演化观察 共19页.pdf

    - **数据结构的演变**:数据库架构的发展始终围绕数据进行,不断探索更高效的数据存储和访问方式。 - **业务架构的变化**:随着业务需求的变化,数据库架构也逐渐从单一的数据存储转变为计算和存储分离的模式。 - **...

    金融行业数据库架构变迁.pdf

    金融行业的数据库架构经历了长期的发展和演变,以适应不断增长的数据量、复杂的应用需求以及日益严格的法规遵从性。在2016年的背景下,DBA(数据库管理员)的角色显得尤为重要,他们不仅要关注数据库的安全性、标准...

    大型网站技术架构演变过程

    1.架构演变第一步:物理分离webserver和数据库。 2.架构演变第二步:增加页面缓存 3.架构演变第三步:增加页面片段缓存 4.架构演变第四步:数据缓存 5.架构演变第五步: 增加webserver,应用服务器集群 6.架构演变第...

    大型网站架构演变和知识体系 讲解

    #### 架构演变的第一步:物理分离Web服务器与数据库 在网站初创阶段,通常是通过一台主机来承载所有的功能,包括Web服务和数据库服务。随着用户访问量的增长,单一主机的性能瓶颈开始显现,其中最明显的就是Web服务...

    HTAP专场:买单侠数据库架构之路(客户-赵怀刚).pdf

    3. 架构演变过程 买单侠数据库架构从最初的单体架构,逐渐演变为现在基于云计算的分层架构。最初架构存在严重的数据库耦合问题,导致异构数据迁移、大量SQL审核和频繁生产发布等挑战。 4. 分层架构特点 买单侠的...

    百度公司技术架构资料.zip

    本资料主要涵盖了三个方面:海量日志分析架构、数据库架构演变与设计以及贴吧架构实践。 首先,海量日志分析架构是大数据时代的核心挑战之一。百度在这一领域积累了丰富的经验,通过分布式存储和处理技术,如Hadoop...

Global site tag (gtag.js) - Google Analytics