大型网站技术架构之 核心原理与案例分析-读书笔记

第一章:大型网站架构的演化

大型互联网系统有以下的特点

  • 高并发、大流量
  • 高可用:7*24小时的不间断服务
  • 海量数据:存储管理大量的的数据,需要使用大量的服务器。
  • 用户分布广泛,网络情况复杂
  • 安全环境恶劣:xss\SQL注入\CSRF\etc
  • 需求快速变更,发布频繁:office以年为更。一般大型网站以周为更,中小型以天为更。
  • 渐进式发展:由小变大

发展历程

第一阶段:LAPM

一个小型的网站在初期的时候,与用户的访问量小,实现的业务简单,一般一个服务器就足够。

应用程序、数据库、文件等所有的资源都放在一个服务器上。

通常的模式LAMP,Linux系统,应用程序使用PHP开发,然后部署在APache上,数据库

使用MySQL。汇集各种免费开源软件和一台廉价的服务器就可以开始网站的发展之路。

第二阶段:三台服务器

随着网站业务的增加,一台服务器已经不能满足,日益增加的用户访问量和越来越多的数据。这时候

需要将业务和数据分离来。分离后整个网站使用三台服务器,应用服务器,数据服务器,文件服务器。

三台服务器对硬件资源的需求各不相同。应用服务器,需要处理大量的业务,对CPU的要求较高,数据服务器需要查询和数据缓存,

需要更快更大的磁盘,文件服务器需要存储大量的文件,因此需要更大的硬盘。

应用和数据的分离,使用不同的服务器支持不同的服务角色,网站的并发能力和数据的存储空间得到了改善。

数据库压力太大导致延迟,影响性能,用户体验感不好,这时需要优化。

第三阶段:缓存

网站的数据访问遵循着一个规律:百分之八十的业务访问集中在20%的数据上。淘宝卖家的浏览量集中在少数的成交数量多评价好的商品上,所以

是否可以将20%的数据缓存在内存中,加快访问速度。

网站使用的缓存分为两种:一种是服务器的本地缓存,另一种是使用远程分布式缓存。第一种可能会出现本地服务器的缓存不足的情况,并且可能缓存会和

应用程序抢内存,这时可以考虑远程分布式缓存。使用集群的方式,部署大内存的服务器作为专门的缓存服务器。

解决了缓存的问题,此时单一的服务器不能解决多请求,网站访问高峰期,应用服务器成为瓶颈。

第四阶段:应用服务器集群

使用集群是解决高并发和海量数据的常用方法。当一台服务无法满足访问请求和存储的时候,不要考虑使用一个更大的服务器,再大的服务器也有无法满足网站

持续增加的业务需求。增加服务器的数量,多台服务器分担访问压力和存储压力。

对网站架构而言,只要是能够通过增加一台服务器改善负载压力,就可以通过同样的方式吃醋的增加服务器不断地改善系统的性能,应用服务器实现集群是网站

的可伸缩集群架构中一种简单成熟的方式。

通过负载均衡服务器,可以将来自用户浏览器的访问请求分发到应用服务器集群中的任何一台,增加集群的方式解决了服务器的负载压力问题。

第五阶段:数据库读写分离

在使用缓存之后,仍然有部分的读操作(缓存不命中,缓存过期)和全部的写操作要由数据库处理。用户数量到达一定的规模之后,数据库将会成为瓶颈。

这时考虑,数据库的读写分离。访问数据库时,写入主数据库,由主更新从数据库,读取的时候从从数据库中读取。实现数据库的读写分离。

第六阶段:加速访问

CDN和反向代理可以加速用户的访问响应的速度。

CDN和反向代理的基本原理都是缓存。CDN是部署在网络提供商的机房,使用户在请求网站的时候,可以从距离自己最近的网络提供商机房获取数据。

而方向代理是部署在网站的中心机房,当用户请求到达机房后,首先访问的服务器是反向代理服务器,如果方向代理中缓存这用户的请求资源,则直接返回给用户。

使用反向代理和CDN都可以加快用户请求的响应速度和减轻后端服务器的负载压力。

第七阶段: 使用分布式文件和数据库系统

使用数据库的主从复制是无法满足网站日益增加的业务需求的。这是需要分布式的数据库和分布式的文件系统。

分布式数据库时数据库拆分的最后手段。只有在单表的数据量非常哦昂达的时候才使用,一般使用放入数据库拆分方式是业务分库

讲不通业务的数据库部署在不同的物理服务器上。

第八阶段:非关系型数据库和搜索引擎

增加检索速度

第九阶段 :业务拆分

第十阶段:分布式服务

对着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂度增加,部署维护难度增加,所有的应用都要和数据库连接可能会咋成数据库拒绝服务。

每一个应用系统都需要执行许多的相同的业务操作,比如用户管理和商品管理,那么可以将这些共用的业务提取出来,独立部署,这些可复用的业务连接数据,提供共用的业务服务,而应用系统只要管理用户界面,通过分布式服务调用共用的业务服务完成具体的业务操作。

 

渣渣总结

由以上的介绍,可以看出,从一台服务的存储空间和处理性能不足,扩展到三台服务器处理不同的模块,再到增加额外存储增加数据访问速度,集群应用程序服务器解决高并发问题,数据库读写分离到集群在缓存上进一步减少数据库的压力,CDN和反向代理加快响应速度,分布式解决管理问题。

应用程序:独立服务器->多服务器->服务器集群->分布式管理

数据库-:缓存->读写分离->数据库集群->分布式管理

缓存:本地缓存->分布式缓存

前期使用CND和反向代理加快反应速度,使用消息队列管理分布式模块之间的通信。

第二章介绍了,实现大型网站的一些常用的模式。

 

posted @ 2019-10-03 13:55  博闻强识不是我  阅读(122)  评论(0)    收藏  举报