一:大型网站架构演化
1.初级阶段网站架构
应用服务器,数据库,文件等所有的资源都在一台服务器上,采用LAMP架构,一般我们学生开发就是采用这种架构
2.应用服务与数据服务分离(应用与数据分离)
随着网站业务的发展,一台服务器已经不能满足性能的需求,这时我们把业务服务和数据服务分开,此时网站就变成了三个服务器:应用服务器,数据库服务器,文件服务器,一般小型项目就是这种开发模式,比如我 在360我们组的项目初期没有用缓存,就是这种架构,数据库有专门的服务器
应用服务器 -> 需要处理业务逻辑 -> 强大的CPU
数据库服务器 -> 磁盘读写缓存服务 -> 更快的硬盘,更大的内存
文件服务器 -> 存储大文件图片等 -> 更大的硬盘
3.使用缓存改善服务器性能
网站服务器也遵循二八定律,80%的访问集中在20%的数据上。如:微博,淘宝商品。百度搜索关键词。使用缓存保存热点数据,会大大提升网站性能,并且降低数据库服务器压力
缓存分为两种:缓存在本地服务器的本地缓存,和缓存在专门的分布式缓存服务器的远程缓存。
本地服务器缓存:优:本地,快! 缺点:内存大小有限,缓存大了后会与应用程序竞争内存
分布式缓存服务器:优:可使用集群,挑选大内存的专用缓存服务器
4.应用服务器集群改善网站并发处理的问题
当一头牛拉不动田时,我们首先想到的是再找一头牛,而不是找一头更强壮的牛
web开发也同样如此,当一台服务器扛不住压力时我们可以增加服务器的个数从而改善性能,在服务器集群前做负载均衡调度服务器,分发浏览器请求
5.数据库读写分离
应用程序在写数据的时候访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,读数据时访问从数据库,这里的从数据库也可以搭建多台。
6.使用反向代理和CDN加速
这两个原理上,还是缓存!!CDN部署在提供商的机房,用户访问时可从最近的(压力最小的)CDN节点获取数据,反向代理网站的中心机房,用户访问时先看反向代理中是否缓存着用户请求的数据
CDN和反向代理,都是要尽早的吧把数据提供给用户,一方面加快用户的访问,另一方面降低了服务器的负载压力
7.使用分布式文件系统和分布式数据库系统(就是所有东西使用分布式)
任何一台服务器都不能满足用户的需求时,我们就要考虑使用分布式系统,
分布式数据库就需要对表进行业务的拆分,垂直拆分,水平拆分(难度大,维护起来费劲)
8.使用NoSQL和搜索引擎
9.业务拆分
大型网站会将网站业务分成不同的产品线,如将首页,订单,卖家,商铺拆分成不同的产品线,分归不同的团队负责
10.分布式服务
参见:大型网站技术架构--李智慧