从数据库架构发展看性能优化策略

大型网站架构发展

1.初始阶段 :应用和数据库公用服务器,这是最初的系统架构设计,基本属于没有设计阶段,数据内容少,性能要求低,目前可能还有部分小微企业门户网站采用这种架构;

 但是,部分业务系统随着数据越来越多,数据存储要求越来越高,这种架构限制了数据存储和网站性能,于是研发同事们开始对架构进行升级;

2.应用数据分离 :应用服务器和数据库服务器分别部署到不同硬件服务器上;

 

这样我们可以把较高的配置给到数据库服务器,以此来支持其数据的存储、频繁读取等操作;

但是,我们发现,我们对数据库读取频率还是有点高,搜索效率不是太好,性能瓶颈频繁的出现在数据库端,而且在机械硬盘下,我们应该尽可能的减少对数据的读取,来增加硬件的寿命 ;研发同事们再次优化了系统的架构:引入缓存机制

3.使用缓存改善性能 :引入缓存,通过将频繁搜索、查询的条件以及结果存入缓存服务器(数据存于内存,而且是key-value键值对的格式,读取速度远高于从磁盘数据库读取),以此来减少对数据库的访问频次,增强应用服务器返回效率;

 应用服务器发起请求后,优先去缓存读取,开有没有想要的结果, 如果有直接从缓存取,如果没有从数据库取,取完返回给应用服务器并写入缓存服务器(从这个步骤可以看出,一开始缓存服务器加上后效率不会提升太快,这个缓存机制系统需要预热下才能明显看出性能的优化效果);

随着网站流量越来越大,请求越来越多,前端应用服务器逐渐成为瓶颈,研发们由开始考虑调整架构了。。。

4.使用多台应用服务器集群 :应用服务器集群化部署,前端之前加一个反向代理(nginx)控制访问的应用服务器,为了防止两个应用服务器之间session互相冲抵,需要采用共享session(redis存储)

 

但是随着应用系统扩容,但是数据库又跟不上了,我们研发开始继续优化数据库的结构:读写分离

5.数据库读写分离 :根据日志分析,我们发现数据库读的比例远远高于数据库写比例,大概7:3的比例,数据库可以多节点部署,一个或多个数据库负责读,一个数据库负责写。。。读的库从写的库同步数据就可以了

技术细分:主从复制、负载均衡、高可用

主从复制: 

设定一个为主数据库(一般是写的数据库)

另外的一个或者多个设定为主服务器或者从服务器(读数据库)

开启主机的二进制日志,然后通过设置从机器的ip、端口、用户等实现主库数据写入从库,也可以实现主主复制;

 

负载均衡:

 从多个从服务器读取数据,那么为了均衡的把请求压力分配到多个服务器上,我们需要配置负载均衡:通过软件Haproxy 来实现读的负载均衡,该软件通过请求流量控制访问从节点的数量,从而实现对多个从属数据库实现负载均衡;

 

高可用: 使用工具 keepalived

主数据服务和 负载均衡节点 只有单主机,单个主机在出故障后就无法保证整个集群的稳定性;为了保证主数据服务器以及负载均衡节点出故障后能够平移,我们给这俩服务加上个备份节点: 给主数据服务 新增一个主主复用节点,也给负载均衡软件增加一个备份节点,并设置一旦故障,启用备份数据库服务或者备份节点从而实现软件的高可用;(读(从)数据库并不用设置高可用,做好监控就行了,因为本身多个从节点数据是一样的,一个节点坏了无非就是其他几个节点压力变大。但同时要做好压力变大的稳定性处理机制,并入控制应用层流量等;防止整个集群压力大到宕机);

 

6.使用反向代理和CDN加速网站响应 :静态资源 ,选择最近的CDN节点进行访问从而提升系统访问速度(这个属于网络层)

7.随着数据量的进一步增大,数据请求速率仍需加快,我们研发已经无法从结构上进行优化,于是开始从数据库设计上出新:

分库分表

         (1).垂直切分、水平切分

                垂直切分:简单说就是库与库之间的切分(独立的业务对应的数据库拆开放),或者表与表之间的切分(单张表切成两个表,通过主外键关联来分表)

                水平切分:按照id序列化切分,或者按照时间戳进行切分存放,按照指定字段切分

         (2).物理拆分:单个文件切分成多个文件进行存储

         (3).分库分表等内容的实现:mycat 数据库中间件 通过中间件配置,实现对数据库的数据切分、读写分离、高可用等统一进行配置;

         (4).配置mycat高可用,给mycat增加一个主从节点,配置上高可用,可以保证系统的稳定性,结构上同上

随着数据量越来越大,业务系统又增加了各种计算的需求,而此架构下无法支持PB级数据的处理,我们再次优化,采用大数据技术,引入HDFS分布式文件系统;

8.使用分布式文件系统和数据库系统: 单节点出现问题会导致集群不稳定,为了保证高可用,采用hdfs分布式;为了提高磁盘性能采用磁盘阵列等方法;

        

其实,还是主从机构,只是,我们把管理元数据和存储主数据进行了拆分,HDFS 采用Master/Slave的架构来存储数据,这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。一个HDFS集群是由一个NameNode和一定数目的DataNode组成的。NameNode是一个中心服务器,负责管理文件系统的名字空间 (Namespace )及客户端对文件的访问。集群中的DataNode一般是一个节点运行一个DataNode进程,负责管理它所在节点上的存储;这个结构上直接有中间件提供了高可用和分布式。。。整个数据存储更高效更稳定;
 

大数据是一种生态,但是我们在有时候处理数据有极高需求的时候还可以考虑其他不同类型结构数据库结构;

9.使用nosql和搜索引擎 :这个是为了提升系统性能 如mongo和es等,mongo是一种nosql数据库,key-value格式的存储使其性能极快,增加分布式部署后,该数据库应用于网站实时处理、缓存、高伸缩;ES搜索引擎,也是一种基于内存技术的,其支持结构化表结构、json等格式,经过本人验证,es读写速率与gp结构化数据库对比,其速率极快大概30倍于普通数据库;  这两个既可以单独使用也可以纳入大数据生态。。。

应用层机构优化(参考,后续会详细介绍应用层架构发展)

10.业务拆分:不同业务部署到不同应用服务器上,以此提升性能

11.分布式服务: 微服务架构、springcloud,dubbo 进行服务统一管理等;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值