码迷,mamicode.com
首页 > Web开发 > 详细

大型网站核心架构要素 之二(细解网站的高性能架构)

时间:2016-05-05 22:31:35      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:

一、不同视角下的网站高性能指标,以及其优化
1、开发人员的视角
开发人员关注的主要是应用程序本身及其相关子系统的性能,包括响应延迟、系统吞吐量、并发处理能力、系统稳定性等技术指标。优化网站性能的主要手段包括 使用缓存加速数据读取,使用集群提高吞吐能力,使用异步消息加快请求响应及实现削峰,使用代码优化手段改善网站性能。
2、运维人员视角
运维人员更关注基础设施性能和资源利用率,如网络运营商的宽带能力、服务器硬件的配置、数据中心网络架构、服务器和网络带宽的资源利用率等。主要优化手段有建设优化骨干网、使用高性价比定制服务器、利用虚拟化技术优化资源利用等
二、性能测试指标
1、响应时间 
 打开一个网站  几秒
在数据库中查询一条记录(有索引)  十几毫秒
机械磁盘一次寻址定位  4毫秒
从机械磁盘顺序读取1MB数据 2毫秒
从SSD磁盘顺序读取1MB数据  0.3毫秒
从远程分布式缓存Redis读取一个数据  0.5毫秒
从内存中读取1MB数据 十几微秒
JAVA程序本地方法调用 几微秒
网络传输2KB数据 1微秒
2、并发数
名词解释,指的是系统能够同时处理请求的数目,这个数字也反映了系统的负载特性。对于网站而言,并发数即网站并发用户数,指同时提交请求的用户数目。
网站系统用户数》》网站在线用户数》》网站并发数
3、吞吐量
指单位时间内系统处理的请求数量,体现系统的整体处理能力。对于网站,可以用 “请求数/秒” 或者是“页面数/秒”来衡量,也可以用 “访问人数/天” 。TPS (每秒事务数)是吞吐量的一个常用量化指标,此外还有HPS(每秒HTTP请求数)、QPS(每秒查询数)
4、性能计数器
它是描述服务器或操作系统性能的一些数据指标。包括System Load、对象与线程数、内存使用、CPU使用、磁盘与网络IO等指标。这些指标也是系统监控的重要参数,对这些值设置报警阀值,当监控系统发现性能计数器超过阀值时,就向运维和开发人员报警
三、性能优化
1、前端性能优化
a、减少HTTP请求数目,图片合并,JS合并,CSS合并 aJax合并
b、使用浏览器缓存 主要是缓存一些静态资源 CSS JS Logo 图标 等 可以通过设置HTTP中Cache-Control和Expires的属性,可设定浏览器缓存,几天 甚至几个月
在某些时候,静态文件资源变化需要及时应用到客户端浏览器,这种情况可以通过改变文件名实现。
c、启用压缩
一些文本文件压缩率高达 80% 启用压缩可以有效减少HTTP传输的数据量,不仅降低带宽还减少传输时间。(副作用是 压缩对服务器的CPU造成压力)
d、Css放在页面最上面、JS 放在页面最下面
浏览器会在下载完所有CSS后对页面进行渲染,而JS正好相反,浏览器在加载JS的同时 会立即执行JS,有可能会堵塞整个页面,造成页面显示缓慢因此JS 最好放最下面,CSS放页面上面
e、减少cookie传输
一方面,Cookie包含在每次请求和响应中,太大的Cookie会严重影响数据传输。另一方面 对于某些静态资源的访问 如CSS,SCRIPT等,发送Cookie没有意义,可以考虑静态资源使用独立域名访问,避免请求静态资源时发送Cookie
2、CDN加速
CDN 的本质仍然是一个缓存,而且将数据缓存在离用户最近的地方,使用户以最快速度获得数据,即所谓网络访问第一跳
由于CDN不熟在网络运营商的机房,这些运营商有事终端网络的服网络服务提供商,因此用户请求路由的第一跳就到达了CDN服务器,当CDN中存在浏览器请求的资源时,直接从CDN返回给浏览器,最短路径返回响应,加快用户访问速度,减少数据中心负载压力。这个技能可以极大的改善网页打开速度
3、反向代理
传统代理服务器位于浏览器的一侧,代理浏览器将HTTP请求发送到互联网上,而反向代理服务器位于网站机房一侧,代理网站Web服务器接收HTTP请求,然后将请求转发给后端的WEB服务器,相当于一个网络安全屏障。此外,还可以将热点缓存内容保存于Web服务器上,减轻后端压力。同时,反向代理还可以实现负载均衡,改善整个网站高并发能力
四、应用服务器性能优化
1、分布式缓存
网站性能优化第一定律:优先考虑使用缓存优化性能
缓存的基本原理,缓存是指将数据存储在相对较高访问速度的存储介质中,以供系统处理。一方面缓存访问速度快,可以减少数据访问的时间,另一方面如果缓存的数据是经过计算处理得到的,那么被缓存的数据无需重复计算即可直接使用。
缓存的本质是一个内存Hash表,在网站应用中,数据缓存以一对Key,Value的形式存储在内存Hash表中,Hash表数据读写的时间复杂度为O(1)。
缓存主要用来存放那些读写比很高、很少变化的数据,如商品的类目信息,热门词的搜索列表信息,热门商品信息等。
2、合理使用缓存
不合理使用缓存非但不能提高系统的性能还会成为系统的累赘,甚至风险。实践中缓存滥用的情景屡见不鲜,这样不好哦
a、频繁修改的数据,如果缓存中保存的数据,就会在数据写入缓存后,应用还来不及读取缓存,数据就已经失效的情形,徒增系统负担。一般来说,数据的读写比在2:1以上,即写入一次缓存,在数据更新前至少读取两次,缓存才有意义。
b、没有热点的访问,缓存使用内存作为存储,内存资源宝贵而有限,不可能将所有数据都缓存起来,只能将最新访问的数据缓存起来,而将历史数据清理出缓存。如果应用系统访问数据没有热点,不遵循二八定律,即大部分数据访问并没有集中在小部分数据上,那么缓存就没有意义,因为大部分数据还没有被再次访问就已经被挤出缓存了
c、数据不一致与脏读,一般会对缓存数据设置失效时间,一旦超过失效时间,就要从数据库中重新加载,因此应用要容忍一定时间的数据不一致,如卖家已经编辑了商品属性,但是需要过一段时间才能被买家看到
d、缓存可用性,缓存是为提高数据读取性能的,缓存数据丢失或者缓存不可用不会影响到应用程序的处理--它可以从数据库直接获取数据。但是当缓存无法正常工作时,所有压力都要集中到数据库中,如果数据库无法承受突如其来的压力,整个系统就崩了。通过 主从缓存,一台崩了,另一台启动,可以解决问题。但是这种设计有违缓存的初衷,缓存不应该被当做一个可靠的数据源来使用,通过分布式缓存,将数据分散在多台服务器中,即使一台缓存服务器崩了,也只是缺失了部分数据,重启后,再从数据库恢复即可
e、缓存预热,缓存中存放的是热点数据,热点数据又是缓存系统利用LRU(最近醉酒未用算法) 对不断访问的数据筛选淘汰出来,
f、缓存穿透,如果因为不恰当的业务、或者恶意攻击持续高并发地请求某个不存在的数据,由于缓存没有保存该数据,所有请求都会落到数据库上,会对数据库造成很大压力,甚至崩溃。一个简单的策略是将不存在的数据也缓存起来,设置为null
g、分布式缓存架构,分布式缓存不熟在多个服务器组成的急群众,以集群方式提供缓存服务,其架构方式有两种,一种是以Memcache为代表的不互相通信的分布式缓存,通过一定的hash算法,来分配某个缓存应该存放的地点,服务器之间不进行通信,这样的缓存集群可以很容易实现扩容。
h、多利用异步操作。使用消息队里将调用异步化,可改善网站的扩展性。比如记日志,做一些计算等操作,放后台做,先将数据返回给用户,这个还是要看业务需求,有一定限制,不是什么业务都可以这么做的
i、使用集群,memcache redis
j、代码优化,资源复用,线程池(redis/mysql连接池)
k、存储性能优化,即:硬件性能提升,很多,比如 硬盘,机械硬盘->固态硬盘 有些服务器需要更好的CPU
总结:网站性能优化技术是在网站性能遇到问题的解决方案。而网站性能问题很多事在用户高并发访问时产生的,所以网站性能优化的主要工作时改善高并发用户访问情况下的网站响应速度。

 

大型网站核心架构要素 之二(细解网站的高性能架构)

标签:

原文地址:http://www.cnblogs.com/wangmy/p/5463319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!