谷歌技术总监分享:大型网站技术架构-原理与案例分析
大型网站软件系统的特点
特别需要关注的有以下4点:
- 高并发,大流量。需要面对高并发用户,大流量访问。
- 高可用。系统无间断地提供服务,不能出现宕机。
- 海量数据。需要使用大量服务器存储、管理数据。
- 安全环境恶劣。需高度注意黑客攻击问题。
大型网站架构演化发展历程
以下按业务规模的从小到大的10个阶段分别介绍对应采用的技术架构:
1.初始阶段
开发一个小型网站,只需一台服务器即可,服务器上只需部署应用服务器、数据库服务器,然后部署应用即可访问。架构图如下:
2.应用服务和数据服务分离
当应用系统的业务规模较大时,出于对应用的性能、数据库存储空间的考虑,这时候需要考虑将应用服务与数据服务分离,各使用一台服务器,两台服务器配置各不一致,提供应用服务的服务器需要配置更好的CPU,提供数据库服务的服务器则需要配更好的硬盘和内存。书中还说到一个文件服务器,实际上文件服务器在企业应用中不多见,如用户上传的文件特别多,则需另外再开一台更大硬盘的服务器。此时,架构图如下:
3.使用缓存
业务系统常有一些数据,需要经常被访问的,但却不经常被修改,如一个集团公司的全部下级单位、首页的图表汇总数据,像这类数据应使用缓存技术减少与数据库的交互,提高访问速度,这样数据库服务器的处理读请求的压力就能得到有效缓解。
网站使用的缓存有两种,一种是在应用服务器上的本地缓存,受内存限制,缓存数据量有限,另一种则是远程分布式缓存,可以通过硬件配置来解决内存容量限制的问题。此时,架构图如下:
4.使用应用服务器集群
当业务系统需要接受更大量的并发访问时,这时一台应用服务器给再好的配置也可能无法解决问题,而集群技术则是通过增加多台应用服务器去分担原有的应用服务器的访问及存储能力,其中需要有一台有负载均衡调节的服务器,来负责判断将用户的访问请求分发到某一台应用服务器上。架构图如下:
5.数据库读写分离
当业务系统中的用户又增长到一定规模时,即使是有使用缓存技术,此时需要考虑大量的读写操作对数据库服务器性能影响的问题。这时常见的做法是将数据库分为两台,一台作为主库,负责写操作,一台作为从库,负责读操作,而从库需要从主库拷贝,配置上主库的配置要求要更高些。通过读写分离,能有效改善数据库服务器的负载压力。架构图如下:
6.使用反向代理和CDN
当不同地区的用户访问网站时,有时会出现网站访问延迟的情况, 此时需要使用反向代理和CDN技术,其基本原理是缓存技术,用户在请求网站服务时,CDN服务器就会判断读取最近的网络提供商机房,反向代理则缓存着用户请求的资源。架构图如下:
7.使用分布式数据库系统
在业务系统中,当即使经过了数据库的读写分离也无法满足需求时,此时到了不得已的时候,才考虑将数据库进行业务分库,将不同业务的数据库部署在不同的物理服务器上。架构图如下:
8.使用nosql和搜索引擎
当业务系统有对部分数据有存储、检索方面的特殊需求时,此时可考虑再新增两台服务器,分别是nosql服务器和搜索引擎服务器,能有效减轻数据库服务器的访问压力、管理多个数据源的麻烦。架构图如下:
9.业务拆分
大型系统为了应对日益复杂的业务场景,通过分而治之的手段将整个网站分成不同的应用系统,具体到技术上,则可以对每个应用系统进行独立部署维护。应用系统间可以通过超链接相互访问,也可以通过再新建一个消息队列服务器进行数据分发。架构图如下:
10.分布式服务
对于大型应用网站而言,当进行过分布式数据库、业务拆分后,此时,每个应用系统需要跟所有分布式数据库建立连接,当应用系统较多时,对于数据库而已可能导致数据库连接资源不足。此时的解决方案是,将全部应用系统中的公共业务提取出来,与需要的分布式数据库建立连接,提供业务服务,进行独立部署,这时应用系统就可以减少较多与分布式数据库直接的连接。大型网站的架构演化到这里,基本上大多数的技术问题都得到解决。此时,架构图如下:
总结:想成为进阶架构师,那么资源肯定也是少不了的,如果你对技术提升很感兴趣,小编在这里提供了一份针对架构进阶视频资料,资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。
需要的可以关注之后私信哈,回复“资料”领取免费架构视频资料,记得要点赞转发噢!!!