您的位置:首页 > 运维架构 > 网站架构

《大型网站技术架构》读书笔记--网站的高性能架构

2018-03-25 00:34 253 查看
企业级应用项目一般准备上线到生产环境前都需要经过严格的第三方性能测试,那么性能测试有哪些指标?如何设计一个高性能架构?以下我结合书中的描述及自己的项目经历,根据这两个问题将分两个部分讲解,第一部分是网站性能测试指标,第二部分是性能优化方法。

网站性能测试指标

最大并发用户数。最大并发用户数能直接体现系统的并发处理能力,根据实际使用的用户数所决定。

业务响应时间。 业务响应时间是在最大系统并发用户数的情况下测试的指标,常见的包括四类场景:系统登录、打开单据、查询报表、新增单据,一般会要求在3秒以内。

业务吞吐量。指单位时间内系统处理的请求数量,体现系统的整体处理能力,同样也是在最大并发数下测试的指标,一般用每秒钟请求访问次数来衡量。

系统资源性能。常见的指标是CPU利用率和内存占有率,是系统监控的重要参数,一般会要求CPU利用率小于40%,内存占有率小于80%。

性能优化方法

1.前端性能优化

一般前端的性能优化关注点在于加快页面加载速度,常见方法如下:

减少http请求。可以通过靠合并css、js和图片来解决。

使用浏览器缓存。这里推荐使用requireJs框架,框架用一个amd配置文件定义各前端组件的路径,系统启动后,用浏览器第一次访问页面后浏览器缓存了全部插件,当页面按需引用对应插件时,无需再从服务器端获取资源。

启用压缩。对于一些前端插件、js代码量较大的文件进行压缩。

JS放在底部。这个由浏览器的渲染机制决定,当浏览器从服务端下载完js后将立即执行js,所以为避免页面出现加载延迟的情况,将js放置到body标签底部。

CDN加速。通过新增一个CDN服务器来缓存各种静态资源,如图片、文件、脚本、静态网页等。当这些静态文件的访问频率很高时,将其缓存到CDN能极大改善网页的打开速度。

反向代理。通过新增一个反向代理服务器,缓存用户访问的静态内容,当其他用户访问时,便可直接从代理服务器返回,无须向应用服务器发送请求。

2.服务端性能优化

服务端是一个应用系统最核心、最复杂的地方,常见的优化手段如下:

缓存。网络性能优化第一定律:优先使用缓存优化性能。缓存一方面可以加快访问速度,另一方面,如果缓存的数据是经过计算得到的,则缓存还起到减少计算时间的作用。

缓存的基本原理。缓存的存储介质一般是内存、硬盘。缓存的本质是一个内存hash表,数据缓存以一对key-value的形式存储在内存hash表中。缓存主要用来存放读写比很高、很少变化的数据。本人曾试过应用系统经高并发登录后,登录变得越来越慢,后来排查到原因是因为登录后首页执行了较多的查询导致了服务器负载压力逐步增大,对于首页的菜单、图表统计汇总的数据,由于会被频繁地读取,较少得会被修改,所以这里就适合使用缓存。

合理使用缓存。对于频繁被修改的数据就不适合使用缓存,同时要注意缓存数据的更新,可以在数据更新时立即更新缓存,避免缓存的脏读。

异步操作。任何可以晚点做的事情都应该晚点再做。以新增一张单据为例,当新增按钮触发后,服务端需要保存表单数据,保存后又需要启动业务流程,同时又要发送通知邮件。如果等到全部的步骤都走完才返回成功到前端,将会耗时较多,而实际上业务上只需要知道单据保存成功,流程启动可稍后再查看。此时可利用异步处理,将启动流程、发送邮件操作放到线程(消息队列)中处理,这样的好处是,在高并发的情况下,能快速返回结果到前端,减少了响应延迟的情景,也提高了系统吞吐量,若通过消息队列也可以有效控制过高的并发量,当消息队列长度超过最大数量,则直接抛弃用户请求返回错误。

使用集群。在高并发的场景下,构建一个应用服务器集群,通过新增一个负载均衡服务器可以避免单一服务器因负载压力过大而响应缓慢的问题。

代码优化。合理优化业务代码,可以很好地改善网站性能。具体的最佳实践这里不展开讨论,以后单独分篇详细描述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: