浅谈网站架构程序员
做为一个从过后台开发已经2年的程序员来说,大部分时间都忙于业务逻辑分析,每每忽略了业务之上的架构层面的设计。数据库
本文做为网站架构知识的补充,不只开拓了眼界,也对之后的程序设计益处多多。下面咱们就一块儿来看看网站架构的演变历史。缓存
网站架构的演变大体分为以下几个阶段:安全
1服务器
初始阶段的网站架构网络
网站在最初开始时没有太多人访问,用一台服务器就彻底能够胜任,此时的网站架构以下图所示。架构
应用程序,文件存储,数据库全部的资源都在一台服务器上。也就是经典的LAMP架构模型(Linux操做系统+部署在Apache上+MySql存储+PHP开发)。负载均衡
2分布式
应用服务和数据服务分离性能
网站有了愈来愈多的用户,不断增加的访问量致使网站性能愈来愈差,数据库存储空间也愈来愈不足,此时由初始架构演变为应用程序与数据服务分离的架构,以下图所示。
各个服务器对硬件的资源要求各不相同:
应用服务器因为处理大量业务逻辑,所以须要更强大的CPU;
数据库服务器须要快速磁盘检索和数据缓存,所以须要更快的硬盘和更大的内存;
文件服务器须要存储大量的文件,所以须要更大的硬盘。
3
缓存改善网站性能
网站访问也遵循二八定律:80% 的业务访问集中在 20% 的数据上。
既然大部分的业务访问集中在一小部分数据上,那么把这一小部分数据缓存在内存中,天然能够提升网站性能,加入缓存后的网站架构以下图所示。
网站使用的缓存分为两种:
缓存在应用服务器上的本地缓存;
缓存在专门的分布式缓存服务器上的远程缓存。
那二者的区别有哪些呢?
本地缓存访问速度更快,可是受本地服务器内存限制,缓存数据有限。
远程分布式缓存通常使用集群的方式,部署大内存服务器做为专门的缓存服务器,能够理论上作到不受内存容量限制的缓存服务。
4
应用服务器集群
加入缓存后,数据访问压力缓解,可是单一服务器能够处理的请求有限,在访问高峰期,这会成为网站的瓶颈。
因此对于网站来讲,既然能够经过增长一台服务器的方式改善负载压力,那就能够以一样的方式持续增长服务器不断改善系统性能,从而实现系统的可伸缩性。应用服务器集群则应运而生。此时网站架构以下图所示。
经过负载均衡将请求分发到应用服务器集群,若是用户访问量持续增加,那么就在集群中加入更多的服务器,使服务器的负载压力再也不成为整个网站的瓶颈。
5
数据库的读写分离
随着网站用户不断增多,服务器搭建了集群便再也不是网站的瓶颈,数据库反而会由于负载太高而成为瓶颈。
因为大部分主流数据库都有主从热备的功能,经过配置两台数据库的主从关系,但是实现数据库之间的数据复制,从而实现数据库的读写分离,减轻数据库压力。
此时网站架构以下图所示。
读写分离:
应用服务器在写数据时,访问数据库,主数据库经过主从复制机制将数据更新到从数据库,当应用服务器读数据的时候就可用经过从数据库读取数据。
6
CDN和反向代理
CDN和反向代理本质也是缓存。加入CDN和反向代理会有效加速网站访问速度。此时网站架构以下图所示。
CDN通常部署在网络提供商的机房,使得用户在请求网站服务时,可从最近的网络提供商机房获取数据。
反向代理则部署在网站的中心机房,当用户请求到达中心机房后,先访问反向代理服务器,获取反向代理服务器中的缓存的资源,直接返回给用户。
7
分布式文件系统和分布式数据库
单一服务器都知足不了大型网站持续增加的需求,这时数据库要使用分布式数据库,文件系统使用分布式文件系统。此时网站架构以下图所示。
分布式数据库是网站数据库拆分的最后手段,只有在单表数据特别大时才使用。通常更经常使用的是业务分库,将不一样业务的数据库部署在不一样机器上。
8
使用NoSQL数据库和搜索引擎
随着网站运营愈来愈久,业务增加愈来愈大,数据的产生也就愈来愈大。此时对数据的检索和存储也就愈来愈复杂,那就须要采用非关系数据库技术-NoSQL数据库和数据库查询技术-搜索引擎。此时网站架构以下图所示。
9
业务拆分
大型网站业务日益复杂,会使用拆分的手段将整个网站分为不一样的产品线。在技术角度上讲,就是讲网站拆分红许多不一样的应用,每一个应用都要独立部署。此时网站架构以下图所示。
应用之间能够经过超连接创建关系,如在首页导航栏添加各个应用的连接地址。也能够经过消息队列进行数据分发,进行业务调用。
10
分布式服务架构
随着业务拆分愈来愈细,存储系统则愈来愈大,可能会出现不一样的应用系统须要执行许多相同的业务操做的状况。那将这些共用的业务提出出来,独立部署。经过分布式服务调用共用业务服务完成具体的业务操做。此时网站架构以下图所示。
大型网站架构演化到这一步,也就是时下流行的分布式架构。但架构发展并不会止步于此,目前许多大型网站都开始有本身的云计算平台,将计算做为一种资源出售。一些中小网站不须要再关心技术架构问题,将来的网站架构确定还会继续发展下去,会继续适应将来持续增加的业务需求。
网站架构概述大体分为以上几个阶段,后续咱们会针对网站架构优化方面再作分享,主要从网站的性能、可用性、伸缩性、扩展性、安全性这几个方面入手,继续讨论网站架构方面所遇到的问题,分享架构优化的知识。
参考资料:《大型网站技术架构》----李智慧
关注一下,我写的就更来劲儿啦