中大型网站的架构是如何演变的?( 四 )

中大型网站的架构是如何演变的?
文章插图
 
之前的部分我们对tomcat服务器左侧进行了优化,但是右侧的数据库还是孤零零的只有一台,这样的话,个人博客项目还好只有读操作,能够应付得了,但是如果我们扩展业务,将博客做成了csdn这样的博客平台,有大量的用户频繁进行读写操作,那我们的数据库还能应付嘛?肯定需要优化了,首先我们会想到的就是把数据库的读写进行分离 。
数据库读写的分离一般需要设置主从数据库,主库只用来写数据,从库用来读取数据,而两个数据库之间则需要实现数据的同步,否则会出现数据差异,实现数据库同步的方法有很多,MySQL提供了一种方法是binlog,目前还是比较普遍的,具体的操作配置步骤这里不再描述,以后有机会会尝试写写 。
 
六、NOSQL数据库 + 分布式搜索引擎 

中大型网站的架构是如何演变的?

文章插图
 
读写分离做完之后,过不了多久会发现,如此多的用户读写数据,主从库的压力也在日益攀升,变得越来越大,那么如何优化读取、写入数据的速度呢?
1.引入redis数据库
既然我们的Mysql数据库读写压力那么大,那么我们就在它的前面添加一层NOSQL内存数据库作为盾牌,redis作为最常用的NOSQL数据库一直以来深受大家的欢迎,而且因为是内存中读写数据,所以效率也是非常的高,将它放到关系数据库的前面,用来存放一些高频率、热点的常用搜索数据,能够抵抗大量的搜索压力,这样的话在读写分离,redis分摊压力的情况下,Mysql的数据库压力会大规模降低 。
2.增加分布式搜索引擎
你以为这就完了吗,不,还不够,为了优化搜索的速度,给用户带来更好的体验效果,引入分布式搜索引擎才是好的选择,目前行业内使用最广泛的分布式搜索引擎非Elasticsearch莫属 。
Elasticsearch技术简称ES,是一个基于Lucene的搜索服务器 。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口 。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎 。
Elasticsearch分布式搜索引擎可以进行分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索,并且可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据,这样的话我们就可以通过这种方式构建索引,再去查询就更加减轻了关系数据库的压力 。
 
七、NOSQL数据库(HA)+分库分表 
中大型网站的架构是如何演变的?

文章插图
 
随着博客平台的发展,海量用户的暴增,搜索类目的多样性,用户体验的实时性,对网站提出了更高的要求,必须满足高并发、高可用、高性能的要求才能继续业务的发展,对于我们程序员而言要做的仍然需要更新当前的架构技术,以面对更强大的冲击和考验,那么我们还要如何优化我们的系统呢?第七个阶段我们又要引入三种方案:
1.NOSQL数据库的HA
通过在Mysql服务器前面添加redis服务器确实能够抵御不少的对Mysql数据库的读写压力,但是对于前面的盾牌来讲,难道它就没有压力吗,怎么降低redis服务器的压力呢,首先我们会想到去配置redis集群的方式加一台或者几台服务器,但是配置redis集群其实经常会出现错误,而且对于redis集群来说,经常要求redis服务器可以自动扩容,为了解决这些问题更好的管理redis集群,我们可以选择引入分布式 Redis 解决方案,前段时间redis官方的3.0出了稳定版,3.0就可以支持集群管理的功能 。这里选择的是国产的分布式 Redis 解决方案-Codis 。
Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别, 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务 。
2.分库分表
随着业务的递增,分库分表的技术也需要运用到如此庞大的项目中,主要是因为各种业务表正在变得越来越大,例如用户表、博客表等等,你会想到如果每个业务表都能分开存放那该多好,添加多个数据库服务器,每个服务器负责一块业务表的维护管理,数据库1存放用户数据,数据库2存放博客信息,从而达到进一步细分数据库的目的,而这种拆分数据库的方式就叫做的垂直拆分方式 。


推荐阅读