Skip to content
🎨 作者:mikigo 📔 阅读量:

大型网站技术架构

这本书是阿里资深架构师(李智慧)写的,人如其名,这满脑子哐哐都是智慧,实战型大佬,全方位的解读了构建大型网站面临的各种架构问题及应该怎样去做;内容绝对是教材级别的;

概述

大型网站软件系统的特点:高并发,大流量、高可用、海量数据、用户分布广,网络情况复杂、安全环境恶劣、快速迭代发布;

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

一台服务器:大型网站都是从小型网站慢慢发展过来的,小网站最开始没啥人访问,一台服务器就够了;

应用服务和数据服务分离:随着用户增多,性能越来越差,存储空间不足,将应用和数据分离:应用服务器、文件服务器、数据库服务器;

使用缓存改善网站性能:实际业务中,80% 的业务方位集中在 20% 的数据上,将这 20% 的数据缓存在内存(缓存服务器)中,改善性能;

应用服务器集群改善并发处理能力:随着访问量增加,换更强大的服务器是不行的,再厉害的服务器都顶不住持续增长的业务需求,而应该增加服务器分担访问和存储压力;

增加了很多服务器之后就成了集群,通过负载均衡调度服务器,将来自用户浏览器的访问请求分发到应用服务器集群;

数据库读写分离:使用缓存服务器后,虽然大部分数据读可以不走数据库,但是小部分读和全量写数据库的操作也会让数据负载压力过大,造成性能瓶颈;

可以将一台数据库服务器的数据更新同步到另一台服务器(主从关系),做数据库的读写分离:写数据走主数据库,主数据库同步到从数据库,读数据走从数据库;

反向代理和CDN网络加速:基本原理都是缓存,CDN部署在网络提供商的机房,用户请求时可以从距离最近的一个机房获取;反向代理服务器也缓存了数据,用户访问方向代理服务器,由反向代理服务器中缓存返回用户;

业务拆分(模块化)分布式服务

大型网站核心架构要素

5个架构要素:性能、可用性、伸缩行、扩展性、安全性

性能

在浏览器端,可以通过浏览器缓存、使用页面压缩、合理布局页面、减少Cookie传输等手段改善性;

在应用服务器端,可以使用服务器本地缓存和分布式缓存,通过缓存在内存中的热点数据处理用户请求,加快请求处理过程,减轻数据库负载压力;

在网站有很多用户高并发请求的情况下,可以将多台应用服务器组成一个集群共同对外服务,提高整体处理能力,改善性能;

在代码层面,也可以通过使用多线程、改善内存管理等手段优化性能;

在数据库服务器端,索引、缓存、SQL优化等性能优化手段;

可用性

7×24可用

网站高可用的主要手段是冗余,应用部署在多台服务器上同时提供访问,数据存储在多台服务器上互相备份,任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。

伸缩性

伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。

主要标准就是是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。

扩展性

业务功能要能方便的扩展新功能,而且对原来的功能不造成影响,需要做好模块化划分;

安全性

XSS攻击、SQL注入等


书中的核心内容都是围绕这5个有要素来展开描述的

架构

高性能架构

前端性能优化、应用服务器性能优化、存储性能优化

高可用架构

高可用的架构、高可用的应用、高可用的服务、高可用的数据、高可用的软件质量保证、运行监测

事物总是先求生存,然后求发展。保证网站可用,万无一失,任重而道远。

伸缩性架构

应用服务器集群伸缩性设计、分布式缓存集群的伸缩性设计、数据存储服务器集群的伸缩性设计。

高手定律:这个世界只有遇不到的问题,没有解决不了的问题,高手之所以成为高手,是因为他们遇到了常人很难遇到的问题,并解决了;

救世主定律:遇到问题,分析问题,最后总能解决问题。

可扩展性架构

设计网站可扩展架构的核心思想是模块化,并在此基础之上,降低模块间的耦合性,提高模块的复用性。

模块分布式部署以后具体聚合方式主要有分布式消息队列和分布式服务;

马克思的劳动价值理论告诉我们,产品的内在价值在于劳动的时间,劳动的时间不在于个体付出的劳动时间,而在于行业一般劳动时间,资本家只会为行业一般劳动时间买单,如果你的效率低于行业一般劳动时间,对不起,请你自愿加班。反之,如果你有一个更具有扩展性的网站架构,可以更快速地开发新产品,也许你也享受不了只上半天班的福利,但是至少在这个全行业加班的互联网领域,你能够按时下班,陪陪家人,看看星星。

安全架构

常见的攻击是 XSS 攻击、SQL 注入攻击、CSRF、Session 劫持

做好信息加密:单向三列加密、对称加密、非对称加密;


软实力

作者在后面几个章节还讲了很多职场攻略,没有多余的废话,都非常实用。