老板说网站慢,我们总结了三大阶段提升性能( 二 )


也就是说 20M 的带宽下载速度理论可达 2.5M/s,而对于家庭用户而言上传速度一般比下载速度小的多,大约是不到十分之一 。而对于网站服务器(企业用户)来说,则不然,一般上行速度等于下载速度 。这也是运营商根据实际需求分配的,毕竟用户的主要需求是下载数据,而不是上传数据 。
整个流程从传输方式看就是:用户发送请求数据(上传),网站服务器接受请求数据(下载),网站服务器返回响应数据(上传),用户接受响应数据(下载) 。对于用户来说,上传数据是很小的(Url 参数),而下载数据是较大的(响应数据);对于服务器来说,下载数据是很小的(url 参数),上传数据是较大(响应数据) 。
理解了这个,我们可以解释为什么有时用户反映为什么自己的带宽足够,但打开某些网站仍然很慢,就是因为尽管用户的下载速度很快,但网站服务器的上传速度很慢,这就像一个抽水管和一个出水管,不管抽水管再大,但出水管很小,同样抽到的水量是有限的 。
了解了这个原理我们来看怎么提高数据传输的速度,首先用户的上传、下载速度我们是无法决定的,我们能决定的是网站服务器的上传、下载速度,所以我们可以做的是适当的增加服务器带宽(带宽是很贵的,盲目的增加只会增加不必要成本) 。购买合适的带宽需要根据网站业务特性、规模以及结合运维人员的经验来选择 。
通常可以考虑的算法,即根据一次响应数据的大小,乘以 PV 数,除以对应的高峰时间段,从而大致估算出网站带宽的需求 。
下面我们继续进一步研究第二路径:

老板说网站慢,我们总结了三大阶段提升性能

文章插图
 
上图表示用户访问网站服务器时网络的大致情况,从图上可以看出假设网站服务器从电信网络接入,而用户 A 作为电信的宽带用户,则可以通过电信骨干网快速的访问到网站服务器 。用户 B, 用户 C 作为移动和联通用户需要通过运营商的互联互通经过较长路径才能访问到服务器 。
针对这种情况,我们可以采取以下方法来优化:
1、在各运营商发达的地区的 IDC(互联网数据中心,可以理解成机房)部署网站服务器,各运营商的用户即可通过各自的骨干网访问服务器 。
2、购买代理服务,也就是原来联通用户需要通过联通骨干网------> 联通互联互通路由器------> 电信骨干网------> 网站服务器的过程 。通过代理服务,代理服务器直连到电信骨干网,访问网站服务器 。
2、在主要地区城市购买 CDN 服务,缓存对应的数据,用户可先从最近的 CDN 运营商获取请求数据 。
第三路径
第三路径主要是网站服务器内部处理的过程,当中包括执行程序、访问文件、数据库等资源 。
这是对于我们来说最可以发挥的地方:
1、使用缓存,根据需要使用本地缓存或分布式缓存;
2、使用异步操作,这种方式不仅可以提高性能,也提高了系统的扩展性;
3、代码优化;
4、存储优化;
缓存
如果缓存数据较少,可以利用 OSCache 实现本地缓存:
老板说网站慢,我们总结了三大阶段提升性能

文章插图
 
当缓存数据过多时,利用 Memcached 实现分布式缓存:
老板说网站慢,我们总结了三大阶段提升性能

文章插图
 
Memcached 实现分布式缓存,缓存服务器之间是互不通信的,也就是我们可以方便的通过增加 Memcached 服务器对系统进行扩展 。
异步操作
老板说网站慢,我们总结了三大阶段提升性能

文章插图
 
使用同步请求的方式,在高并发的情况下,会对数据库造成很大的压力,也会让用户感觉响应时间过长 。异步请求方式,则可以快速的对用户做出响应,而具体的数据库操作请求,则通过消息队列服务器发送给数据库服务器,做具体的插入操作 。插入操作的结果则已其他方式通知客户端 。例如一般在订票系统当中,出票行为就是异步完成,最终的出票结果会以邮件或其他方式告知用户 。
代码优化
这里就不在详细描述,另一篇随笔《怎样编写高质量的 JAVA 代码》对代码质量和风格做过大致的介绍,有兴趣可以看一下 。
存储优化
大型网站中海量的数据读写对磁盘造成很大压力,系统最大的瓶颈还是在磁盘的读写 。可以考虑使用磁盘阵列、分布式储存来改善存储的性能 。


推荐阅读