文档章节

中大型网站静态资源优化及存储

豆腐块
 豆腐块
发布于 2015/11/17 22:13
字数 1593
阅读 981
收藏 35

静态资源优化:

合并

减少http请求有这样几个优点:

(1) 减少DNS请求所耗费的时间

(2) 减少服务器压力(CPU,IO)

(3) 减少http请求头(当我们对服务器发起一个请求的时候,我们会携带着这个域名下的cookie和一些其他的信息在http头部里,然后服务器响应请求的时候也会带回一些cookie之类的头部信息.这些信息有的时候会很大,在这种请求和响应的时候会影响带宽性能)


合并请求:

lvmama首页

<link rel="stylesheethref="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)

© 著作权归作者所有

共有 人打赏支持
豆腐块
粉丝 1
博文 1
码字总数 1593
作品 0
杨浦
程序员
私信 提问
大型网站技术架构(3):WEB 前端性能优化

上次说到了性能优化策略,根据网站的分层架构,可以大致的分为 web 前端性能优化,应用服务器性能优化,存储服务器性能优化三大类 这次来说一下 web 前端性能优化,一般来说,web 前端就是应...

不最醉不龟归
2016/12/13
5
0
大型网站性能优化途径

性能优化途径 Web前端性能优化 1.浏览器访问优化 减少http请求 合并css,合并js,合并图片 使用浏览器缓存 启用压缩 CSS放在页面最上面,JS放在页面最下面(浏览器会在下载完CSS之后才对整个...

桃子红了呐
2015/12/28
0
0
分布式学习(8) ---- 分布式网站优化简易总结

web前端性能优化 浏览器访问优化: 1.减少HTTP请求数:合并CSS、合并JS、合并图片 2.使用浏览器缓存:设置HTTP头中的Cache-Control和Expires属性,缓存CSS、Js、图标到浏览器。 3.启动压缩:...

KKys
2017/02/20
0
0
大型站点高并发架构技术

大型站点高并发架构技术 高并发: 高并发主要是由于网站PV访问量大,单台服务器涌承载大量访问所带来的压力,所以会采用多台服务器进行分流,采用服务器集群技术,对于每个访问会被发送到哪台...

浮躁的码农
2018/01/15
0
0
「架构技术专题」9种高性能高可用高并发的技术架构(5)

每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、...

java进阶架构师
2018/07/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nacos之springboot

本地操作系统:ubuntu18,我使用docker的方式启动nacos服务 docker image方式启动nacos 在docker hub上可以搜到nacos-server List-1.1 拉去最新的版本 mjduan@mjduan-ubuntu:/opt/software$ ...

克虏伯
34分钟前
3
0
指针数组和数组指针的区别

这两个名字不同当然所代表的意思也就不同。我刚开始看到这就吓到了,主要是中文太博大精深了,整这样的简称太专业了,把人都绕晕了。从英文解释或中文全称看就比较容易理解。 指针数组:arr...

天王盖地虎626
今天
3
0
Qt那些事0.0.18

今天要记一下Qt中的Resource。自我感觉理解的不错,但是还会难免有谬误,在日后有可能会更新,也有可能不会。 小声的念叨一句,女人心,海底针。 今天就直接跳过了关于QML在qrc文件中的介绍,...

Ev4n
今天
2
0
深入解析js的作用域、预解析机制

虽然,ES6在我们工作中应用得越来越广泛,但是还是很多项目保留着ES5的写法,所以,今天,带着大家重新巩固下ES5下的作用域及预解析机制。 概念: 作用域:域,指的是一个空间、范围、区域,...

前端攻城老湿
今天
2
0
Spring Cloud Feign - 声明式 REST Client

1、Feign是什么 声明式REST client,来自NetFlix。 允许你编写无实现代码调用REST services 替换RestTemplate(甚至更简单) Spring Cloud 为使用Feign提供了包装器 2、怎样使用Feign 对比:...

Benz001
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部