大型网站架构设计的演化(上)

大型网站架构设计的演化(上)

    • 概述
    • 大型网站架构演化发展历程
      • 初始阶段的网站架构
      • 应用服务和数据服务分离
      • 使用缓存改善性能
      • 使用应用服务器集群
      • 数据库读写分离

概述

截止到现在,互联网站的发展只有20多年的时间。在这20多年的发展过程中,网站的架构也随之一步步向更复杂的方向发展。下面我们一起回顾一下网站架构演化的过程。

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

众所周知,大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得很棘手。大型网站架构主要就是解决这类问题。

初始阶段的网站架构

大型网站架构设计的演化(上)_第1张图片
如图所示,这是最简单的一个网站架构了,程序、数据库、文件系统都在一台服务器上,一般采用的都是LAMP的开发体系(服务器操作系统采用Linux,应用程序使用PHP开发,数据库使用Mysql,部署在Apache上面),这些都是免费的开源软件,特别适合网站开始建设时的场景

应用服务和数据服务分离

随着网站的发展和访问量的提升,采用一台服务器会导致性能越来越差,上传文件的增多也会令存储空间成为一个大问题,这时候,就需要将应用和数据分离。
大型网站架构设计的演化(上)_第2张图片
这三台服务器对硬件资源的要求各不相同,应用服务器需要处理大量的业务逻辑,因此需要更快更强大的CPU;数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存;文件服务器需要存储大量用户上传的文件,因此需要更大的硬盘。
应用和数据分离后,不同的服务器承担不同的职责,网站的并发能力和性能会得到很大的改善,但是目前的架构,在并发量继续加大的时候,数据库连接将会是一个瓶颈,所以还需要进一步的优化,缓存的作用就体现出来了。

使用缓存改善性能

使用缓存来减缓数据库的压力几乎是目前必然要做的架构设计。在查找没有命中缓存的时候,突然的大量请求访问数据库,很容易造成数据库服务器宕机,明显的例子就是前几年的微博,一旦出现突然的明星结婚或离婚的消息,网站很容易就崩了,就是因为大量请求直接到数据库的服务器。这两年好多了,估计对于热点探测微博下了不少功夫。
缓存的原理简单来说就是把数据放在内存中,查询的时候如果命中缓存,会极大的提升访问速度,同时也减缓了数据库的访问压力,是提升性能一种很好的策略。
网站使用的缓存一般有两种策略::缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。本地缓存的访问速度更快一些,但是受应用服务器内存限制,其缓存数据量有限,而且会出现和应用程序争用内存的情况。远程分布式缓存可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务。
大型网站架构设计的演化(上)_第3张图片
使用缓存后,数据库的压力将会得到很大的缓解,但是如果还是只有一台应用服务器,由于一台服务器的处理能力有限,在网站访问高峰时,应用服务器将会成为整个网站的瓶颈,于是,架构继续演进,成为下面的样子。

使用应用服务器集群

当一台服务器的处理能力、存储空间不足时,企图换一台性能更强悍、存储空间更大的的服务器来解决这个问题是不现实的,因为不管多么强悍的服务器,都满足不了网站持续增长的业务需求。这种情况下,增加一台服务器来分担原有服务器的压力是更合适的做法。
大型网站架构设计的演化(上)_第4张图片
对于网站而言,只要增加一台服务器能够改善负载压力,就同样可以增加更多服务器不断改善系统性能,从而实现系统的可伸缩性(个人觉得一般情况下只有伸,缩的情况较少)。
用户请求进来后,通过负载均衡调度到不同的应用服务器处理,使得平均情况下每一台的应用服务器的压力不会太大,自然应用服务器就不会成为瓶颈了。

数据库读写分离

在网站规模继续增大后,即使采用缓存的技术,应用服务器也进行了集群部署,但是所有的写操作,以及部分的读操作(缓存不命中、缓存失效等)还是会继续访问数据库,这是数据库的连接数就会成为新的瓶颈。有了应用服务器的经验,数据库服务器也可以采用类似的操作来解决这个问题,那就是读写分离。
目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站利用数据库的这一功能,实现数据库读写分离,从而改善数据库负载压力

大型网站架构设计的演化(上)_第5张图片
在这种架构下,采用的做法是当应用访问数据库进行写操作时,访问主数据库,主数据库通过主从复制机制将数据同步到从数据库;应用访问数据库进行读操作时,访问从数据库,这样,整个数据库的压力就减轻了很多。目前读写分离已经成为了数据库架构设计的一项基本规范。

你可能感兴趣的:(架构设计)