大型网站瓶颈优化思路

1.大型网站存在问题

网站在发展过程中会遇到这些问题  :  1.大访问量,2.数据量大,PV量巨大,3.高负载(压力大),4.访问瞬间爆发,5.访问速度慢等问题,6.高并发访问,7.服务器要高可靠运行,8.用户分布广泛,网络情况复杂(南电信,北网通),9.安全环境恶劣(例如:SQL注入,XSS攻击,CSRF攻击,流量攻击)

2.解决方案(渐进式去解决)

初始阶段的网站架构(应用程序,数据库,文件都在一个服务器上)
			||
			\/
		 访问量上升
			||
			\/
		解决方法:纵向扩展(提高服务器配置)
			 横向扩展(买更多的服务器,分离应用和数据)
			||
			\/
	解决方法:应用服务和数据服务分离
	应用服务器(php,apache,服务器配置重CPU,用于处理大量业务)
	数据库服务器(mysql,服务器配置重磁盘,内存,用于磁盘检索和数据缓存)
	文件服务器:存放用户上传的文件(需要更大的硬盘)
			||
			\/
	应用和数据分离后,随着用户的增多,数据库压力增大导致访问延迟
			||
			\/
		优化:使用memcache缓存区改善网站的性能
		原因(28定律):80%的业务访问集中在20%的数据中
			||
			\/
		缓存的分类:文件缓存(页面静态化)
			   内存缓存(memcache Redis(NoSQL)),最常用
			   数据库缓存
			||
			\/
		缓存:提高访问效率,减轻数据库压力
		本地缓存:缓存在应用服务器上,访问快但应用服务器内存有限制
		远程缓存:缓存在分布式缓存服务器上,不受内存限制
			||
			\/
	使用缓存后数据库压力减缓,但高峰期应用服务器成为整个网站的瓶颈
			||
			\/
	解决应用服务器的压力:买应用服务器
			||
			\/
	负载均衡器(LVS,F5) + 多台应用服务器(集群)
	(负载均衡器将请求分配给不同的应用服务器:合理分配请求)
			||
			\/
	但添加多台应用服务器后,session无法共享了!!!
			||
			\/
	解决方法:session默认是通过文件存放的
	但可以自定义,将session存放到数据库,内存
			||
			\/
	服务器集群可以解决大访问量问题,以上的应用服务器的例子就是服务器集群
(服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。
            集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,
        从而使得任何一个机器坏了整个系统还是能正常运行)
	                ||
			\/
	服务器集群后所要用到的技术:
	负载均衡:就是将用户请求分摊到多个操作单元上进行执行
	服务器冗余技术:增加多余的设备,保证系统可靠运行,避免单点技术
			||
			\/
	冗余技术:
		1.Cisco HSRP热备份路由(线路冗余)
		2.Windows集群技术(服务器冗余)
		3.Linux HA 集群技术(服务器冗余)
		4.IBM AIX集群(服务器冗余)
			||
			\/
	应用服务器的难点解决后,Web的瓶颈在哪?
	当缓存过期后,缓存时间过期:会导致缓存雪崩!
	数据库因为负载过高成为网站的评价
			||
			\/
		数据库读写分离:
		通过配置两台数据库主从关系,
		可以将一台数据库服务的数据更新同步到另一台服务器
		主数据库负责写操作,从数据库负责查
			||
			\/
		一主多从:主服务器一台,从服务器多台
		写操作:主服务器
		读操作:从服务器
		数据的同步:主服务器以二进制方式记录到bin-bg文件
				   从库复制主库的bin-log文件
			||
			\/
		MySQL分库分表分区:
			分库:DBA搞的
			分表:
				1.水平分表:eg:把user表分成表user1,表user2,表user3
					优点:查询速度变快
					缺点:增加代码层面维护的难度
						  分表前:
							select id,name from user;
						  分表后:
							select id,name from user union select id,name from user1
				
				2.垂直分表:一张表不可以有过多的字段
						eg:把用户表拆分成用户详情表,
						优点:查询速度快

			分区:但只限制int类型
				分区就是把一张表的数据分成N多个文件,这些文件可以在一个磁盘上,也可以在不同的磁盘上
				
				一张表进行分区后,一张表还是一张表,避免了水平分表的弊端


			||
			\/

	使用反向代理和CDN加速网站响应:
			
			原因:用户规模越来越大,
				 由于中国复杂的网络环境,不同地区的用户访
				 问网站时,速度差别也极大,为了提供更好的
				 用户体验,留住用户,网站需要加速网站访问
                 速度,主要手段有使用CDN和反向代理
			||
			\/
	CDN的全称是Content Delivery Network,内容分发网络
		通过在网络各处(网络节点)放置服务器,将静态资源缓存在离用户最近的地方,使用户以最快速度获取数据

		CDN能够缓存的一般是静态资源,如图片、文件CSS、Script脚本、静态网页等
			||
			\/
		CDN和反向代理的基本原理都是缓存,
		区别在于CDN布署在网络提供商的机房;而反
		向代理则部署在网站的中心机房(靠近服务器
		),当用户请求
		到达中心机房后,首先访问的服务器是反向代
		理服务器,如果反向代理中缓存着用户请求的
		资源,就将其直接返回组用户

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