《大型网站技术架构》总结---架构演化

趁着放假,终于把《大型网站技术架构核心原理与案例分析》这本书看完了。这本书给了我对于网站架构的全新认识,整本书写的比较浅显易懂,让入门的人比较容易理解。里面介绍了很多技术概念。向反向代理和CDN等等。我写两篇文章,是看完之后的总结。

这本书的第一章就写了大型网站架构演化,写明了一个小网站是如何一步步的演化发展成一个大网站。

大型网站的特点:高并发,大流量;高可用;海量数据;用户分布广泛,网络情况复杂;需求变化快,发布频发;渐进式发展;安全环境恶劣。

一.开始阶段的网站架构

       这就是最初的小型网站,可能只有一台服务器,也用可能是自己的电脑。使用LAMP(Linux+Apache+MySQL+PHP)开发。使用的都是开源免费的软件。一个小型网站就搭建成功了,像应用程序,数据库和文件都放在一台服务器上。如下图:

二.应用服务和数据服务分离

      随着网站发展,一台服务器不能满足要求。越来越多的用户使得网站性能编程,存储空间不足。这时应该让应用程序和数据分离,分别存放在不同的服务器上。应用程序服务器需要更强大的CPU,数据库服务器需要快速磁盘检索和数据缓存,文件服务器需要更大的硬盘。如下图:

三.使用缓存改善性能

     随着用户增多,数据库的压力越来越大,每一次对数据库的操作都可能影响到整个网站的性能。网站的特点也符合二八定律,80%的业务访问集中在20%的数据上,因此我们可以对数据进行处理,将经常用到的数据缓存在内存中,这样减少数据库的访问压力。使用缓存可以用两种:缓存在本地或者专门的服务器上。分布式缓存采用集群的方式,部署大内存的服务器作为专门的缓存服务器,在理论上做到内存容量不受限制。如下图:

四.使用应用服务器集群

  在网站高峰期,应用服务器成为整个网站的瓶颈,使用集群是网站处理高并发,海量数据的常用手段。当一台服务器的处理能力不足时,这时应该增加一台服务器分担原有服务器的访问及存储压力。通过不断的增加服务器改善系统性能,实现系统的可伸缩性。通过负载均衡将用户的请求分发到服务器集群的一台服务器上。如下图:

五.数据库读写分离

      使用缓存后,绝大多数的数据读访问操作都可以不通过数据库来完成。但是,小部分读操作和全部的写操作任需要访问数据库。在网站规模达到一定程度后,数据库因负载压力过高而成为瓶颈。目前大部分数据库都提供主从热备份功能,通过配置两台数据库主从关系,将一台数据库的数据更系同步到另一台服务器上。这可以实现数据库的读写分离,如下:

六.使用反向代理和CDN加速网站响应

      为了提供更好的用户体验,网站需要加速网站访问速度。主要有使用CDN和反向代理。它们的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在访问网站时,可以从距自己最近的网络提供商机房获取数据;而方向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就直接返回给用户。如图:

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

      任何强大的单一服务器都满足不了大型网站持续增长的业务需求。数据库经过读写分离后,仍不能满足需求。这时要使用分布式数据库,文件系统也是一样。分布式数据库是网站数据库拆分的最后手段,包括业务分库和单表拆分。如下图:

八.使用NoSQL和搜索引擎

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

九.业务拆分

      大型网站为了应对日益复杂的业务场景,通过分而治之的手段将网站的业务拆分,分成不同的产品线,归不同的团队负责。如图:

十.分布式服务

     随着业务拆分越来越小,存储系统越来越大,整体复杂度程指数级增加,部署维护越来越困难。每一个应用系统可能会执行相同的操作,比如用户管理等。将这些公用的业务提取出来,独立部署,由这些可复用的业务连接数据库,提供公用业务服务,如下图:

经过上面十条的演变,基本大多数的技术问题得以解决。这十点改进让我理解了网站架构的演变过程,增强了对于网站架构的直观认识,虽然我没有进去过机房内部。网站技术的发展是要随着业务发展而进步的。上面有很多概念性的内容,如分层,缓存,CDN,分布式等等。后面一篇文章再来具体说说这些技术。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章