孙子曰:“纷纷纭纭,斗乱而不可乱;浑浑沌沌,形圆而不可败。”
每年的双十一和双十二恐怕是网商们最忙碌的两天了,不光是淘宝天猫,这两个日子俨然已经成了全体电商的狂欢节。在狂欢的背后,考验的是网站背后的技术团队。
消费者可不会管技术团队面临多大的压力,消费者只想要完美的购物体验。有研究显示网站加载速度降低一秒,转化率就会降低7%。如果等待时间过长,恐怕消费者们就直接到你的竞争对手那去了。
网站速度快也意味着在搜索引擎中的排名会比较靠前,这就意味着能够获得更多点击。因此网站的速度快性能好不光是为了应对双十一,而应该把这一点当作工作的一个长期目标。下面我们就来介绍一些提升网站性能的方法。
找准自己的位置
性能的提升是没有极限的,所以找准自己的位置才能设定性能提升的目标。我们可以测试下面几个指标来衡量自己网站的相对性能:
· 竞争对手的主页响应时间
· 竞争对手的搜索响应时间
· 竞争对手的物品页面响应时间
· 竞争对手网站将物品加入购入车所花的时间
在竞争对手的网站进行测试花不了多少时间,不过注意测试时要把缓存清除掉。有了数据之后有下面几方面的工作要做:
· 比较整个购买流程所花的时间
· 找出与竞争对手相比自己网站在各个阶段的优势与劣势
· 比较功能上的区别
· 根据自己与竞争对手的比较来制定相应的应对计划
注:builtwith可以帮助大家了解竞争对手的网站使用的是什么技术,类似的工具还有Wappalyzer。
通过反向代理来提升网站容量
反向代理指的是从客户端接收请求然后将获取的资源返回到客户端的一种服务器,因为相当于服务器端的代理,所以叫反向代理。
很多网站采用的都是Apache服务器和数据库服务器的两阶架构,不过有一个问题就是这些服务器不能很好地处理大流量的请求。如果连接的用户太多只可能发生三件事:
1. Apache服务器内存用完了-用户感觉慢
2. Apache服务器连接用完了-用户感觉慢
3. Apache服务器CPU用完了-用户感觉慢
反向代理服务器可以用来解决上面所说的这些问题,因为使用反向代理可以减少很多连接等待的时间,让Apache服务器可以专心进行逻辑运算。
NGINX和NGINX Plus是反向代理中的佼佼者。它的事件驱动架构可以处理大量请求并将低速请求转化为NGINX与应用服务器间的高速请求。
使用NGINX作为反向代理有下面这几个优点:
· 可以加快Apache服务器的反应速度
· 可以作为静态文件的缓存服务器减轻Apache服务器的压力
· 可以作为负载均衡服务器
缓存和微缓存
网站中的图片、JS、CSS等代码都是静态文件,因此缓存可以极大地提升网站的速度。除了这些静态文件,有些动态生成的文件也可以进行缓存,这种缓存被称为微缓存。
静态文件的缓存有这个三个层次:
本地缓存-本地缓存可以进行设置,当不同页面使用了相同文件时就可以减少文件的请求数。此外用户所在的局域网和ISP也会进行缓存。
CDN - CDN的使用可以让用户从离自己最近的节点上获取资源以便加快响应速度。不过HTTP/2可能会让CDN变得无用,具体细节请看NGINX HTTP/2白皮书。
缓存服务器-我们还可以在应用服务器之前加一个缓存服务器,NGINX就有这个功能。
缓存的优势不光在于加快了静态文件的读取,更重要的是减轻了应用服务器的压力。
下面的代码教大家如何在NGINX和NGINX Plus中设置proxy_cache_path和proxy_cache,想要了解更多关于NGINX缓存的使用, 请参阅NGINX缓存使用说明。
# Define a content cache location on disk
proxy_cache_path /tmp/cache keys_zone=mycache:10m inactive=60m;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
# reference the cache in a location that uses proxy_pass
proxy_cache mycache;
}
}
与缓存不同,微缓存存的不是静态文件而是生成的页面而且缓存的时间通常比较短,可能只缓存一秒钟。虽然把动态对象转化为静态对象并进行缓存的时间很短,但有时也可以很有用。比如某个热门的页面同时有几百个用户在请求,如果能够把这一页面进行微缓存,那么无疑应用服务器的压力将大大减小。
比如Magento是一个很好的PHP电子商务框架,然而它自身并不能很好地处理高并发的情况。如果能够使用NGINX来实现微缓存的功能,那么核心的Magento应用完全不用做任何修改就可以提升站点的速度和性能。
负载均衡
如果你的网站架构比较简单,那么提升性能最简单暴力的方式就是多加几台服务器然后把负载分散到多个应用服务器上面。不过对于负载均衡,有下面几点我们在这里需要着重强调一下:
调度机制-一个使用负载均衡的网站或者应用需要寻找适合自己的负载均衡调度机制。刚开始使用的话可以试一试轮询调度,不过要在进一步的话需要考虑哪些服务器处于空置状态、是否需要保持一个session由同一服务器负责以及监测等问题。
资源配置的灵活性-成功的调度机制必须让开发运维人员可以随意引导流量到特定服务器并且能够随时添加服务器。只有这样才能在访问飙升或者业务增长时从容应对。
其他特性-如果能够灵活运用NGINX的其他特性如SSL和HTTP/2也能帮助你的网站提升性能或者减小部署反向代理所带来的困难。
限制每个用户的连接数
通常一个网页的图片和代码等资源的数目不会少于100, 如果一个用户在浏览器中打开的太多连接可能也会给服务器带来压力。可能有人会问用户怎么可能发起这么多连接,他自己电脑也受不了啊?是的,正常人类用户可 能不会做出这样的事,但有很多合法或非法的非人类用户会创建大量的连接到你的网站,所以限制每个用户的连接数是有必要的。
一个可能的非人类用户是搜索引擎的爬虫程序,它会拖慢正常用户访问的速度。使用反向代理的话我们可以限制这类用户的访问或者限制它下载的速度。同时这些手段也可以用来防范DDoS攻击。
小结
双十一双十二除了赚钱也可以作为检阅自己系统的机会,不过性能的提升是一个长期的过程,并不是一朝一夕就可以完成的。