标签:
静态资源优化:
合并
减少http请求有这样几个优点:
(1) 减少DNS请求所耗费的时间
(2) 减少服务器压力(CPU,IO)
(3) 减少http请求头(当我们对服务器发起一个请求的时候,我们会携带着这个域名下的cookie和一些其他的信息在http头部里,然后服务器响应请求的时候也会带回一些cookie之类的头部信息.这些信息有的时候会很大,在这种请求和响应的时候会影响带宽性能)
合并请求:
lvmama首页
<link rel="stylesheet" href="http://s1.lvjs.com.cn/min/index.php?f=/styles/v6/header.css,/styles/v6/index.css" >
gewara首页
<link rel="stylesheet" type="text/css" href="http://static5.gewara.com/css/gewara.css?n=ui_layout,index_new&v=2014070214"/>
压缩
gzip压缩传输能更加有效节约带宽流量。他先把文本压缩为.gz然后传输给浏览器,最后由浏览器负责解压缩呈现给用户。
初期,动态,静态资源在同一个服务器上,保持原有的目录结构
为什么将静态图片,js,css存放到单独的域名?
使用单独域名,浏览器不会把主域名下的 cookie 传给该域,减少了网络开销,一定程度提高了页面加载速度。
打开lvmama首页(动态请求):
首页静态资源请求:
从两张图中我们得出结论:
http://www.lvmama.com 下有cookie
http://s1.lvjs.com.cn 无cookie
采用动静分离
动静分离,就是将 Web 应用程序中静态和动态的内容分别放在不同的 Web 服务器上,有针对性的处理动态和静态内容,从而达到性能的提升。
分离后:
一个图片请求:http://s1.lvjs.com.cn/pics/super/2014/06/S72XK.jpg
对应linux存储目录可能是这样:
var/www/super/2014/06/S72XK.jpg
var/www/super/2014/06/S73XK.jpg
var/www/super/2014/06/S71XK.jpg
var/www/super/2014/06/.........
var/www/super/2014/..../......
var/www/super/........./..../......
var/www/.........../........./..../......
啥问题?
数据内容以几何级数增长,尤其是那些小文件,几K到几百K不等,数量巨多,传统的文件系统处理起来很是吃力,这样的问题:
(1)磁盘IO过高
海量文件检索效率低,由于现有的存储系统无法有效管理海量小文件,并且在单个目录下存放文件的数量有一定的限制,一旦文件数到达了一定规模之后,文件的检索速度就急剧下降。
当前用户只能通过多级目录来组织存放大量的小文件,随着目录深度的增加,文件的检索开销进一步增大,检索效率随之下降(大量的磁盘寻址)。
(2)备份困难
(3)单点问题,容量和读写无法水平扩展,还存在故障的可能
现有的存储系统一旦出现连续的磁盘故障或者服务器失效的情况,将会立即中断应用的读写过程,严重的甚至造成数据丢失。
小文件的备份速度极慢,而备份大量小文件将会耗费大量的时间和系统资源。
用户在存储大量小文件时不得不采用了费时费力的方式,将文件复制多份到多套的存储系统中以提高安全性。
怎么办?
分布式文件系统(Distributed File System)
指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。
(1)扩展能力: 是一个分布式文件系统最重要的特点。
(2)高可用性: 在分布式文件系统中,高可用性包含两层,一是整个文件系统的可用性,二是数据的完整和一致性。
(3)协议和接口: 分布式文件系统提供给应用的接口。
(4)弹性存储: 可以根据业务需要灵活地增加或缩减数据存储以及增删存储池中的资源,而不需要中断系统运行。弹性存储的最大挑战是减小或增加资源时的数据震荡问题。
(5)压缩、加密、去重、缓存和存储配额: 这些功能的提供往往考验一个分布式文件系统是否具有可扩展性,一个分布式文件系统如果能方便的进行功能的添加而不影响总体的性能,那么这个文件系统就是良 好的设计。存储配额就是可以为应用所能使用的存储空间进行配额限制,比如每一应用只能使用最大配额范围内的存储空间。
目前方案
GridFS
GridFS是MongoDB之上的分布式文件系统,其利用了MongoDB的分布式存储机制并通过MongoDB来存储文件数据和文件元数据,兼具文档型数据库和文件系统的优势。
MongoDB是一个基于分布式文件存储的数据库开源项目。由C++语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
*面向集合存储,易存储对象类型的数据。
*模式自由。(schema-free)
*支持动态查询。
*支持完全索引,包含内部对象。
*支持查询。
*支持复制和故障恢复。
*使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性
*支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
*文件存储格式为BSON(一种JSON的扩展)
*可通过网络访问
最后选型:
Load balancing-->Nginx
Cache-->Squid
GlassFish-->Java Web Image Server Application(Spring MVC,Spring data for MongoDB)
Storage-->GridFS (a mechanism for storing large binary files in MongoDB)
关于 Image Server Application
需求:
等比例缩略图:
http://img5.gewara.com/cw120h160/images/movie/201405/s2800beec_14638bfd918__7ec5.jpg
cw120h160这里
支持大图缩略功能.
参考:
网站性能优化组定义的34条准则--Yahoo!
Best Practices for Speeding Up Your Web Site (https://developer.yahoo.com/performance/rules.html)
Java Web 高性能开发(http://www.ibm.com/developerworks/cn/java/j-lo-javawebhiperf2/)
MongoDB GridFS最佳应用概述 (http://blog.csdn.net/chszs/article/details/20123327)
标签:
原文地址:http://my.oschina.net/bobotc/blog/531764