`
CshBBrain
  • 浏览: 650135 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
B7d9bf34-126e-301f-819e-81f2615b5a2a
开源WebSocket服务...
浏览量:144909
Group-logo
HTML5移动开发
浏览量:137858
社区版块
存档分类
最新评论

小文件优化之道-文件成组

 
阅读更多

 

转自: http://www.php-oa.com/2011/05/25/linux%e5%b0%8f%e6%96%87%e4%bb%b6%e4%bc%98%e5%8c%96%e4%b9%8b%e9%81%93-%e6%96%87%e4%bb%b6%e6%88%90%e7%bb%84.html

昨天在群中,又有很多人在问,我的服务器跑不上量,我的服务器只能跑十几M 流量,为什么别人能跑上 G 的流量.为什么?
服务器基本很少是为了跑量的,只有到了最后,追求成本的时候这时,每台服务器能跑多少流量就成为关键了.但我不得不提一定就是,提升服务器的性能的前提是稳定.稳定是运维第一要素.
另外,服务器处理能力我们可以分开来看:

  • 动态内容: 动态网页知道吧,这个不用详细解释了吧.
  • 静态内容: 服务静态文件,象图片服务器,css js 的服务器,象文件服务器,象 cache CDN 的代理服务器,大多都是静态的.

我们在谈论服务器为什么跑不起量时,就得分开来考虑这二种大的分类了.
动态文件 因为动态文件大多时候追求的是处理数量,不是流量了.另外动态文件的性能,90% 是动态文件执行,写法本身的影响.象 PHP 和 Perl 象 JSP 这些程序本身加上不同的应用.是否连接数据库,是否写得太烂.这些内容大多和程序员本身就有关系,另外就是网站架构和程序架构的问题了.我们就不上升到架构问题了.所以这提到的跑量主要是指服务静态文件时最影响性能的有哪些.

静态文件 我们在处理静态文件时,最需要关注的就是 WEB 服务的模型.也就是这台服务器是处理的请求有什么样的特点.简单来看看,可以关注以下几点:
WEB 服务的模型

  1. 连接 : 连接主要关注是同时有多少连接在服务器上,每秒能处理掉多少,连接是否使用 keepalive
  2. 命中率: 命中率可能大家不明白,就是程序是否能缓存这个数据.如 squid 服务,命中率关注二点,程序本身,系统本身
  3. 响应大小: 响应大小就在静态服务中基本就是指文件大小,可能是服务的模型中最重要一点,下面会重点讲这个.
  4. 建连的时间: 建连的时间在小文件时比较关注,一个网页比如有 100 个元素这样建连时间就很重要了,主要的影响有 DNS ,服务器本身的处理,链路
  5. 硬盘的性能: 这个是服务模型中另一个比较重要的点,这个和响应的大小是关系在一起的.
  6. 处理每个对象的其它开销: 这个算是其它.有时服务器会主动压缩之类,还有 acl 的影响之类.这个大多时候是比较次要的.

比如我现在讲二个相反的模型
(1. 小文件大请求模型

  • 大量连接
  • 命中率普通
  • 响应文件非常小
  • 建连时间中
  • 硬盘 4 个普通 SATA
  • 其它开销小

(2. 大文件少量请求的模型

  • 连接不多
  • 命令率小
  • 响应文件比较大
  • 建连时间慢
  • 硬盘 4 个普通 SATA
  • 其它开销小

象这个是上面的静态文件中最常见的二种 WEB 服务的模型,第一种是图片的服务,第二种是视频和下载的服务
从上面我们可以看出什么不?第一种流量小,第二种流量高,主要是由于响应大小决定,其它的影响都会小些.好我们来分析为什么
我们知道普通读离散文件时硬盘的有效 IOPS 的 50 .有时 50 还达不到.如果文件是小图片,一个就几百个字节 到 几K.比如这个网页
我们看到唐凤的图是3.05 KB.我们来计算一下,在离散文件,不是顺序读写时 4 个硬盘的时候,硬盘的能力是多少.

1
2
3
3.05k * 4HDD * 50IOPS = 610k
#换算成网络流量
610k * 8 ~= 4.9M.

知道了吗?在这种 WEB 服务模型时,只能服务 4.9 M 的流量.所以第二影响的变成了命令率,这时操作系统能 Cache 多少,和服务本身能 Cache
多少就成了关键.

视频和下载服务的第二种 WEB 模型我想不分析,大家也知道,普通硬盘顺序读写能达到 80M – 100M/s 这时流量很容易跑到网卡的极限.

这时,我们提到重点了,怎么提高小文件的性能,这个问题是个很老的问题,在 Linux 中想了非常多的法子,比如 Russel 在 1997 年就提出四种基本的I/O性能优化策略.

  • 避免 I/O 这是最有效的方法,避免磁盘访问就避免了I/O操作的延迟和开销.缓存是避免访问存储设备的基本机制.
  • 顺序化 顺序访问可以使磁盘数据通道的有效利用率最大化.在有多个I/O负载的情况下,做不到完全的顺序访问,也可以通过增加I/O 大小来尽量减少寻道次数.寻道操作越少,在数据定位上花费的时间就越少,磁盘能达到的吞吐量就越大.
  • 异步化 异步 I/O 把所需数据提前加载到内存,以便向应用程序隐藏 I/O 延迟.它可以使 CPU 和磁盘同时工作,从而提高计算机系统的利用率.
  • 并行化 把多个磁盘组织成一个以RAID为代表的阵列形式,并展开并行I/O,是提升存储系统吞吐量的一个基本方法.进一步的方法是以集群的方式组织多个存储服务器进行并发数据服务.通过提升阵列或集群的规模,并进行并发I/O,存储系统原则上可以满足任何 I/O 带宽的需求.

这个大多是操作系统中做了,操作系统会给读写进行合并和排序二种操作,然后给连续的 I/O 的请求放到一起,但这个是很后端来做这个.就象 LVS 和 NGINX 均衡一样.LVS 工作在 4 层,所以不能做应用级的优.我这就是要提出一种方案,能做应用层的 I/O 优化.
这个怎么做啦,就是给用户要的请求,放到一起合并成组成一个大文件.我们知道读大文件效率很高,这样他一次读一个大文件后,在给大文件中的内容提取出来成一个个小的对象来回应客户端的响应.

 这样,比如上面那种大量小图的网页,我给一个网页中所有的小的图片存成一个文件,然后有用户请求这个网页时就会接着请求这个网页中所有的图片元素.这样我只要读一次文件,就能给所有的图都读出来.
原来很多离散的 I/O 变成了一次顺序的 I/O.我们在这变读小文件为读大文件. 
这相当于在应用层做了合并和排序这二样事情.
这种优化最重要的一点是怎么确认那些文件要成组成一个块.这样来保证这个块的命中率.简单来讲可以有几个方法:
网站结构: 这个是最好确认的,给同一个网页的小元素成组到一个块.
请求顺序: 同一个用户的一次请求大多是连续的,另一个用户同一个链接打开的时候也会是一样的情况,也可以成组合并成一个文件块,但不如上面的方法
网站来源: 象刚才那个网页,基本上所有的这个网页中图片元素的 referer 基本是同一个,对同一个 referer 也可以组成一个文件块.当然还有很多其它的方法.

 

这种技术的另一个重点是,WEB 服务器的特别要求
1. 能分解成组合并后的块为单独的元素
2. 能一次读入这个块到内存中,不读多次

实现这种技术也有很多方法,比如有现成的服务器就是用的这个 Squid 的 COSS 的存储
我们可以给 COSS 看成会根据请求顺序来给文件成组合并成一个块并存起来,也能很好的分解成单个元素的一个不错的实现,当然要是能根据网站结构,比如图片网站每页来存成一个块就更加强大了.

如图,打开 http://hexten.net/cpan-faces/

如图,只要有人请求http://hexten.net/cpan-faces/,就会给整个这个网页图象这个块打开,然后其它的从  img0.img 到 img100.img 都在内存中取,不在读取硬盘.

分享到:
评论

相关推荐

    【超强组合】VMD-海洋捕食者算法MPA-Transformer-BiLSTM光伏预测【含Matlab源码8550期】.zip

    CSDN海神之光上传的全部代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:Main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2023b;若运行有误...

    文件存储服务FastDFS-mfs

    Group ID代表文件所在的存储组,File ID则是组内文件的唯一标识。这种设计使得文件的定位更加高效,同时可以方便地添加新的存储组来扩展存储容量。 在文件上传过程中,客户端首先连接跟踪服务器,跟踪服务器会根据...

    Node.js-使用Ghostscript命令优化PDF文件大小

    在IT行业中,优化资源文件大小是一项重要的任务,尤其是在网络传输和存储方面。PDF文件作为常见的文档格式,其大小直接影响到用户的下载速度和存储空间。在Node.js环境下,我们可以利用Ghostscript这一强大的PDF处理...

    S7-200SMART常用库文件.zip

    该压缩包“S7-200SMART常用库文件.zip”显然包含了与S7-200SMART相关的常用库文件,这些库文件对于开发和优化PLC程序至关重要。 一、S7-200SMART PLC介绍 S7-200SMART是西门子新一代的小型PLC产品,它具有高速处理...

    文件下载-.dll文件-xlswriter.dll文件 文件下载-.dll文件-xlswriter.dll.zip

    这可能是为了方便用户下载和传输,因为压缩后的文件通常比原始文件小,而且更易于管理。 下载.dll文件时需要注意以下几点: 1. 安全性:确保从可信赖的源下载.dll文件,以避免恶意软件或病毒。 2. 兼容性:确认.dll...

    sql server 表数据转移,文件组,文件组数据文件建立

    对于数据量特别大的情况,可以考虑进一步优化文件组的使用方式,比如将索引单独放置在一个文件组中,这样可以更好地利用磁盘空间,并进一步提高查询性能。 #### 六、注意事项 - 在进行数据转移时,确保有足够的磁盘...

    SQL Server 文件组使用心得

    文件组的主要作用是管理数据库内的数据文件,通过将不同的数据文件组织到不同的文件组中,可以实现更高效的数据管理和优化。 #### 二、文件组与物理文件的关系 文件组与物理文件之间的关联主要体现在以下几个方面...

    文件系统-文件系统

    它不仅帮助理解操作系统底层的工作原理,也为将来开发和优化更先进的文件系统打下基础。在实践中,学生可以模拟磁盘I/O操作,实现文件的分配和回收,以及对文件系统的挂载和卸载,进一步加深对操作系统核心机制的...

    文件转数组

    在IT领域,将文件转换为数组是一种常见的操作,特别是在处理二进制文件(如BIN文件)时。这种技术有助于在程序中存储和处理大量数据,尤其是当数据需要以特定格式或结构存在时。以下是关于“文件转数组”这一主题的...

    工程文件打包-源码-编译脚本-库文件源码-readme文件.zip

    本篇文章将围绕“工程文件打包-源码-编译脚本-库文件源码-readme文件.zip”这一主题,详细解析libcurl库的源码、编译过程以及如何利用readme文件进行操作指导。 首先,我们关注的是“curl-7.79.1.tar.gz”文件,这...

    dbf-jdbc-wisecoders,JAVA 读写DBF文件工具包

    6. **性能优化**:为了提高处理大量DBF文件的效率,该工具包可能采用了流式处理或缓冲技术,降低了内存消耗,并提高了读写速度。 7. **错误处理和异常处理**:工具包应提供良好的错误报告机制,当出现如文件损坏、...

    【超强组合】VMD-蝗虫算法GOA-Transformer-GRU光伏预测【含Matlab源码 8613期】.zip

    CSDN海神之光上传的全部代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:Main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2023b;若运行有误...

    LM 优化算法 Levenberg - Marquardt

    LM优化算法,全称为Levenberg-Marquardt算法,是一种在非线性最小二乘问题中广泛应用的迭代优化技术。该算法结合了梯度下降法(Gradient Descent)和高斯-牛顿法(Gauss-Newton)的优点,旨在解决非线性函数的最小化...

    西门子S7-200SMART PLC库文件.rar

    8. **优化与效率**:库文件经过了优化,能够提高程序的运行效率,减少CPU负载,同时保持程序的稳定性和可靠性。 使用这些库文件,工程师可以更快速、更准确地编写PLC程序,缩短项目开发时间,提高系统的可靠性和...

    linux下查看文件大小

    了解如何查看文件大小对于优化系统性能和防止磁盘空间耗尽至关重要。在Linux中,有两个主要的命令用于此目的:`df`和`du`。 `df`(disk free)命令用于查看整个文件系统的磁盘空间使用情况。它提供了关于文件系统总...

    分布式文件系统FastDFS架构剖析及配置优化

    ### 分布式文件系统FastDFS架构剖析及配置优化 #### FastDFS概述 FastDFS是一款开源的轻量级分布式文件系统,由纯C语言编写而成,适用于Linux、FreeBSD等UNIX系统环境。它并非一个通用的文件系统,而是设计用于...

    C# 如何 切分组合大尺寸文件 使用WinRAR压缩文件 将文件转换成网页等等...,有8个类似的示例啊 (源码)

    - 文件组合:相反,使用`FileStream`和`File.WriteAllBytes`方法可以将这些小文件重新组合成原始的大文件。 2. **WinRAR API集成**: - 要使用WinRAR进行压缩和解压缩,首先需要获取WinRAR的COM接口。这可以通过...

    【超强组合】基于matlab白鲸算法BWO-BP-Adaboost数据分类预测【含Matlab源码 8129期】.zip

    CSDN海神之光上传的全部代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:Main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2023b;若运行有误...

    【超强组合】VMD-花朵授粉算法FPA-Transformer-LSTM光伏预测【含Matlab源码 8670期】.zip

    CSDN海神之光上传的全部代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:Main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2023b;若运行有误...

    SQL SERVER索引文件迁移到文件组

    ### SQL Server索引文件迁移到文件组的知识点详解 #### 一、背景介绍 在SQL Server数据库管理系统中,为了提高数据库性能和管理效率,经常需要对数据库进行优化。其中一种重要的优化手段就是合理地管理数据库文件...

Global site tag (gtag.js) - Google Analytics