大型网站架构设计演化过程

一般大型的网站或服务器软件,都是业务从小到大的过程。在这个过程中,需要提前考虑好可能出现的问题以及设计,然后再倒回来从小到大让他们按照预期一点点长大。

在长大的过程中简略的说无非是:用户请求增长,存储数据增长。在这两个维度下,依然要确保软件正常可用。那么相应他要经历的过程分别为:

第一阶段:应用程序,数据库,文件在一个机器上
此阶段是属于业务试运行初期,考虑成本和维护因素,直接使用一台服务器来部署应用程序,安装数据库软件,使用本地磁盘存储文件。
运行一段时间,或是正式部署时,其会发现随着用户请求增长和存储数据增长,本机的CPU,内存,磁盘资源都会慢慢变得吃力。此时就需要进入第二阶段。

第二阶段:应用程序,数据库,文件分离部署到三个机器上

  • 应用程序部署在:高CPU,高内存机器
  • 数据库部署在:高性能磁盘,高内存机器
  • 文件部署在:高性能磁盘机器

原因:
1.应用程序需要处理大量数据请求执行运算过程,所以需要高CPU和高内存以满足运算支撑
2.数据库文件在本机存储,高性能磁盘可以保证IO读写性能,高内存机器可以确保数据库查询速度和缓存支撑
3.文件部署在高性能磁盘机器,同样是高性能磁盘可以保证IO读写性能,确保文件读写高效。

第三阶段:无法应对大量数据库操作,提供数据库缓存服务器解决读,提供消息队列解决写
第二阶段运行一段时间后,随着数据量增长和用户量增长,首当其冲的就是数据库的读性能会受到制约。
此时提供数据库缓存服务器,将常被使用的数据在缓存服务器上保存一份,这样可以大大降低数据库的读操作,以提高性能。
使用消息队列将要写的非实时数据排队进行写数据库,起到消峰作用

第四阶段:无法应对大量并发请求,提供负载均衡
第三阶段运行一段时间后,当请求量过大或是有大量并发请求时,单台服务器已经无法处理,此时需要更多服务器来分担压力,此时需要负载均衡服务器作为资源的调度方,将请求资源调配到空闲的服务器上,以实现横向扩展

第五阶段:负载均衡解决了网络请求,读写分离解决数据库读写瓶颈
随着数据库数量的增加,缓存服务器存储的数据库可能出现数据量过期需要重新读取或是缓存不命中问题,此时数据库的读写就再次成了瓶颈。此时可以将读和写使用主从数据库方式将其分离开。主数据库专注于写数据,从数据库专注于提供读数据。

第六阶段:数据量过于庞大,检索性能降低,使用分区分表分库方式解决
当数据库过于庞大,单台数据库单个表已经无法承担或是检索性能严重制约时,此时可以考虑:1.按照业务将数据库分割为多个物理数据库形成分布式数据库,2.按照时间分区,比如按照三个月为档将新老数据分区提高检索速度,

至此常见的大型网站技术架构设计已经完毕,主要涉及:

  • 计算资源:负载均衡,实现横向扩展
  • 数据库资源:缓存,提供热点数据复用;消息队列,非实时保存数据消峰;业务分库,按照业务分库降低单个数据库节点压力;时间分区,分档新老数据提高检索速度
  • 文件资源:分布式文件存储,实现横向扩展

其他设计比如:
1. CDN内容分发加速
2. 加大自身服务器节点网络带宽
3. 数据库,文件服务器采用高性能磁盘
4. 数据库采用大内存形成自身缓存
5. 优化业务逻辑算法,数据结构设计

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