【读书笔记】大型网站架构演化

写在最前面

强烈推荐李智慧老师所著的《大型网站技术架构》一书,它能带领你从一个俯瞰的角度清晰的了解了一个网站的架构设计!本菜鸡以前每次接到一个项目的时候,总是一开始就罗列各种需要实现的功能,然后马上着手开始设计数据库,从来没有一个良好的严谨的架构思想,可能也是因为本菜鸡一直干的都是给学校开发各种管理系统的low比项目吧。。。

前前后后大概花了三天的时间一字不落的读完了整本书,真是意犹未尽。它改变了我以往的那种,一接到项目就思考繁杂业务功能这种错误的思维模式,让我学会了要在项目开始之前,要好好的设计一个网站的架构,要先描绘出一个整体的骨架,然后再考虑各个模块的具体实现。

当当网打5折时买的,不到30块钱,收获这么大,感觉有点对不起李智慧老师。。。

大型网站架构演化发展历程

这是《大型网站技术架构》第二章的内容,它非常直观的描述了一个小型网站随着不断的发展所遇到的问题,以及相对应的在架构上所做出的优化。用浅显易懂的语言介绍了小型网站到大型网站的成长历程。

一、初始的网站架构

在这里插入图片描述
最朴素的架构,甚至毫无架构可言,所有的东西,全部都部署在同一台服务器上。本菜鸡目前做的项目无一例外都是这种架构模型。。。

新的问题:随着网站的发展。用户量越来越大,请求量越来越多,越来越多的数据,也会导致单一服务器的存储空间不足。

怎么解决?请往下看!

二、应用服务与数据服务分离

在这里插入图片描述
将应用服务、文件服务、数据库服务拆开,分别部署在不同的服务器上。

而且,这三种服务器在性能上也是各有各的要求。

  • 应用服务器:CPU密集型,需要更强劲的CPU。
  • 数据库服务器:IO密集型,需要更快的磁盘和更大的内存。
  • 文件服务器:要存储大量的数据,需要更大的磁盘。

新的问题:用户量再增多,数据库压力太大,导致访问延迟。

怎么解决?请往下看!

三、使用缓存改善网站性能

在这里插入图片描述
我们都知道,内存存取速度比硬盘快上几个数量级,所以我们可以通过将热点数据缓存在内存中,这样对于频繁访问的数据,就不需要每次都去数据库里去取。

同时,本地缓存虽然会更快一些,但是由于应用服务器的内存有限,在缓存数据量巨大时,还需考虑加入远程的分布式缓存服务器,这种服务器最大的特点就是内存大!

新的问题:使用缓存后,数据访问压力得到了有效的缓解。但是我们的应用服务器能处理的请求数量毕竟还是有限,在网站访问高峰期,性能将会受到极大的影响。

怎么解决?继续往下看!

四、使用应用服务器集群

在这里插入图片描述
当一台服务器的处理能力、存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加服务器分担原有服务器的压力。

新的问题:现在我们发现,尽管使用了缓存,但是仍有一部分读操作、和全部的写操作
需要访问数据库。随着用户的增长,数据库因为负载压力过高而成为网站的瓶颈。

怎么解决?接着往下看吧。。。

五、数据库读写分离

在这里插入图片描述
应用程序在写数据时,访问主数据库,主数据库通过主从复制机制将数据更新同步至从数据库,这样应用程序读数据时,就可以访问读数据库,这就实现了读写分离!

新的问题:网站进一步发展,规模进一步扩大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大。

解决办法在下面,接着看吧。。。

六、使用CDN和反向代理加速网站访问

在这里插入图片描述
CDN和反向代理的原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房。当用户请求到达网站中心的机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中,缓存着用户请求的资源,就将其直接返回给用户。

使用CDN和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。

新的问题:任何强大的单一服务器都满足不了大型网站持续增长的业务需求。数据库经过读写分离后,从一台服务器拆分成两台服务器,但是随着网站业务的发展依然不能满足需求,文件服务器也是同理。

别问,问就是往下看。。。

七、使用分布式文件系统和分布式数据库系统

在这里插入图片描述
分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常庞大的时候才使用。不到不得已时,网站更常用的数据库拆分手段是业务分库,将不同业务的数据库部署在不同的物理服务器上。

八、使用NoSQL和搜索引擎

在这里插入图片描述
随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。

九、业务拆分

在这里插入图片描述
将业务拆分成一小块一小块的业务。如大型购物交易网站就会将首页、商铺、订单、买家、卖家等拆分成不同的产品线,分归不同的业务团队负责。

十、分布式服务

在这里插入图片描述
将可复用的服务提取出来,独立部署,提供共用业务服务。应用系统通过分布式服务调用共用业务服务完成具体业务操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值