未来往事
bo-blog 简约 简单 主题 模板 风格 - FitySimple3.0 发布

主题风格:FitySimple 由 未来往事 于2013/01/01设计制作,测试使用两个多月后于2013/03/02发布,最后更新时间:2013/11/10 - 3.0版本。 感谢您对 未来往事博客 的关注!
PS:如果可能就尽可能的不要再用bo-blog程序了,这个博客程序2008年最后一次更新之后就再没更新过,出现问题修改起来也比较纠结,未来往事推荐你选择其他开源博客程序,如:emlog、wordpress等

最后更新:2013年11月10日
--------------------------------------------------------------------
1、页面DIV结构重新布局
2、精简、合并了CSS样式表(部分区块使用了CSS3属性选择器,建议使用IE9++版本浏览器)
3、放弃对IE6进行友好支持,仅做相对兼容,不影响使用(鄙视IE6 grin

最后更新:2013年05月15日
--------------------------------------------------------------------
1、部分用户反馈的字体及尺寸调整;
2、CSS样式优化及去除了一些页面冗余代码;
3、去除页面自适应宽度、自定义宽度、显示/隐藏区块等功能JS代码,提升加载速度;
4、增加RSS订阅、QQ邮箱订阅、微博等;
5、增加返回顶部、转到底部按钮;
6、主要调整了对IE6的兼容;

发布日期:2013年01月01日
--------------------------------------------------------------------
模板名称:FitySimple 3.0
风格作者:Contributed by ‘未来往事
模板适用:Bo-Blog V2.1.X(据网友M我说能支持2.0.3及以上版本。如果需要,你可以试试)
适用分辨率:1024*768++
适合浏览器:IE6++ / Firefox2++ / Chrome / Opera /Safari
演示地址:http://fity.cn
其他说明:请保留底部的版权,谢谢!

预览图片:
点击在新窗口中浏览此图片
+阅读全文
      公司一台服务器网站程序长时间运行后,速度变慢,重新启动网站后速度明显变快,估计是网站程序占用的内存和CPU资源没能及时释放,才需要每隔一段时间重启网站释放资源。但手工重启总不能算解决问题的方法,怎样才能实现自动管理呢?IIS6.0的应用程序池自动回收功能可以解决这一问题。

      应用程序池是将一个或多个应用程序链接到一个或多个工作进程集合的配置。因为应用程序池中的应用程序与其他应用程序被工作进程边界分隔,所以某个应用程序池中的应用程序不会受到其他应用程序池中应用程序所产生的问题的影响。

      为Web程序配置应用程序池需要以下步骤:
      1)创建应用程序池,右键单击“应用程序池”,“新建/应用程序池”,命名为KefuAppPool;
      2)为Web程序指定应用程序池,在网站虚拟目录属性“应用程序设置”里面的“应用程序池(N)”里选择KefuAppPool;
      3)应用程序池自动回收方式的设置。回收方式有如下几种:
      a.根据运行时间
       系统默认是1740分钟,也就是29个小时,这个不是很好控制,建议不用。
      b.请求数目
       这个要看具体的情况了。如果只有10个请求,可是有5个都在请求那个比较占资源的页面(可能是统计年度报表之类),这个时候就会出现进程当掉的情况,如果请求有1000个可是一个也没运行比较占资源的页面,这个时候进程肯定是很正常的,所以根据请求的数目来决定也不一定符合实际需要。

      c.计划的时间
       这个其实很好,不过具体什么时间回收好呢?通常我们都是设置在凌晨两三点钟,这个时候回收是有必要的,不过针对出现随时可能出现是高内存占用并不是很适用。

      d.内存(虚拟内存或已使用的内存)
       这个针对出现内存问题引起的进程当掉实在太合适了,不过设置多大的值比较好是一个很重要的问题,值不能太小了,否则如果访问量都很大超过这个值的时候也会自动回收,这个就很没必要了。一定要多多观察进程的实际占用情况再做决定。

       下面重点谈谈对工作进程回收应用程序池的理解。
       默认情况下,WWW服务建立“重叠回收”,即继续运行要终止的工作进程,直到启动新的工作进程后为止。 在重叠回收方案中,要回收的进程继续处理请求,同时 WWW 服务创建一个替代工作进程。在停止旧工作进程之前启动新的工作进程,然后将请求定向到新的进程。此设计可以防止服务中断,因为旧进程关闭前仍然保持与 HTTP.sys 的通信以处理请求。因为可重叠关闭或启动的关闭超时值是可以配置的,所以在工作进程仍在处理请求的同时可以终止该进程(如果它在时间限制内没有处理完请求的话)。
       注意:当 WWW 服务回收某个工作进程时,它并不断开现有的 TCP/IP 连接。HTTP 协议堆栈 (HTTP.sys) 建立并维护 TCP/IP 连接。


       IIS中的每个应用程序池由一个“工作进程”进行管理,也就是"W3wp.exe" 进程。如果有多个应用程序池中的程序运行,我们就能看到多个w3wp.exe。这点可以在任务管理器中看到,如下图所示,任务管理器中有两个w3wp.exe进程,恰好对应两个有应用程序在运行的应用程序池。
点击在新窗口中浏览此图片
       在命令提示符下运行iisapp -a,可以
+阅读全文

MySQL 5.5编译参数说明 参考指南 不指定

Rinald 本站原创 MySQL 2013/02/21 16:06
MySQL编译安装常用参数:
DCMAKE_INSTALL_PREFIX                mysql的安装路径
DMYSQL_DATADIR                          数据库存放目录
DMYSQL_USER                                mysql的所有者,运行用户
DMYSQL_TCP_PORT                        tcp协议使用的端口(默认为3306)
DMYSQL_UNIX_ADDR                       连接数据库socket路径
DDEFAULT_CHARSET                       默认字符
DDEFALUT_CHARSETS                     支持所有字符集(默认为all)
DDEFAULT_COLLATION                    默认字符集(默认为Italian,不支持中文)
DWITH_EXTRA_CHARSETS=all                   校验字符
DWITH_MYISAM_STORAGE_ENGINE=1       安装MYISAM存储引擎
DWITH_INNOBASE_STORAGE_ENGINE=1    安装 innodb 存储引擎
DWITH_MEMORY_STORAGE_ENGINE=1      安装 memory 存储引擎
DWITH_ARCHIVE_STORAGE_ENGINE=1      安装Archive引擎
DWITH_BLACKHOLE_STORAGE_ENGINE=1  安装BLACKHOLE引擎
DWITH_FEDERATED_STORAGE_ENGINE=1  安装FEDERATED引擎
DWITH_PARTITION_STORAGE_ENGINE=1   安装分区存储引擎
DWITH_READLINE=1                       使用绑定的readline
DENABLED_LOCAL_INFILE=1             允许从本地导入数据
DWITH_DEBUG                                是否开启debug模式
DWITH_SSL=yes                              支持SSL


Mysql 编译参数详解(取自官方)
命令      说明     默认值     版本支持
BUILD_CONFIG  采用官方发行版一致的编译参数
CMAKE_BUILD_TYPE  指定产品编译说明信息  RelWithDebInf
CMAKE_INSTALL_PREFIX  指定MySQL安装路径  /usr/local/mysql
CPACK_MONOLITHIC_INSTALL  是否建立单个安装包文件 OFF   5.5.7
DEFAULT_CHARSET   MYSQL 默认字符集  latin1   5.5.7
DEFAULT_COLLATION  MYSQL 默认排序字符集  latin1_swedish_ci 5.5.7
ENABLE_DEBUG_SYNC  是否启用同步调试功能  ON   5.5.7
ENABLE_DOWNLOADS  是否下载可选文件  OFF   5.5.7
ENABLE_DTRACE  是否包含 DTrace 支持     5.5.7
ENABLE_GCOV  是否包含 Gcov 支持     5.5.14
ENABLED_LOCAL_INFILE  是否启用本地 LOAD DATA INFILE OFF   5.5.7
ENABLED_PROFILING  是否启用代码查询分析  ON   5.5.7
INSTALL_BINDIR  MySQL 主执行文件目录  PREFIX/bin  5.5.7
INSTALL_DOCDIR  文档安装路径   PREFIX/docs  5.5.7
INSTALL_DOCREADMEDIR  自述文件目录   PREFIX   5.5.7
INSTALL_INCLUDEDIR  头文件目录   PREFIX/include  5.5.7
INSTALL_INFODIR  关于信息文件目录  PREFIX/docs  5.5.7
INSTALL_LAYOUT  选择预定义的安装  STANDALONE  5.5.7
INSTALL_LIBDIR  库文件目录   PREFIX/lib  5.5.7
INSTALL_MANDIR  手册页面目录   PREFIX/man  5.5.7
INSTALL_MYSQLSHAREDIR  共享数据目录   PREFIX/share  5.5.7
INSTALL_MYSQLTESTDIR  mysql-test 目录   PREFIX/mysql-test 5.5.7
INSTALL_PLUGINDIR  插件目录   PREFIX/lib/plugin 5.5.7
INSTALL_SBINDIR  服务器超级用户执行文件目录 PREFIX/bin  5.5.7
INSTALL_SCRIPTDIR  脚本目录   PREFIX/scripts  5.5.7
INSTALL_SHAREDIR  aclocal/mysql.m4 安装目录 PREFIX/share  5.5.7
INSTALL_SQLBENCHDIR  sql-bench 性能测试工具目录 PREFIX   5.5.7
INSTALL_SUPPORTFILESDIR  扩展支持文件目录  PREFIX/support-files 5.5.7
MYSQL_DATADIR  数据库存放目录      5.5.7
MYSQL_MAINTAINER_MODE  是否启用MySQL的维护环境  OFF   5.5.7
MYSQL_TCP_PORT  TCP/IP 端口号   3306   5.5.7
MYSQL_UNIX_ADDR  Unix Socket 套接字文件  /tmp/mysql.sock  5.5.7
SYSCONFDIR  选项配置文件目录     5.5.7
WITH_COMMENT  编译环境发表评论     5.5.7
WITH_DEBUG  是否包括调试支持  OFF   5.5.7
WITH_EMBEDDED_SERVER  是否要建立嵌入式服务器  OFF   5.5.7
WITH_xxx_STORAGE_ENGINE  静态编译xxx 存储引擎到服务器    5.5.7
WITH_EXTRA_CHARSETS  额外的字符集,包括  all   5.5.7
WITH_LIBWRAP  是否包括支持libwrap(TCP包装) OFF   5.5.7
WITH_READLINE  使用捆绑的readline  OFF   5.5.7
WITH_SSL  是否支持SSL  no   5.5.7
WITH_ZLIB  是否支持Zlib  system   5.5.7
WITHOUT_xxx_

参考信息:http://dev.mysql.com/doc/refman/5.5/en/index.html
MySQL慢日志分析工具mysqlsla安装及使用详细说明

最后更新时间:2013-01-29
  • 2013-01-18 首次整理成文档
  • 2013-01-29 发布到博客并整理添加了实例及工具对比表


一、MySQL慢日志分析意义
在运营 PHP+MySQL 网站的过程中,可能会遇到网站突然变慢的问题,一般情况下和 MySQL 慢有关系,可以通过开启慢查询来记录超过指定时间的SQL语句,MySQL慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,找到影响效率的SQL语句,然后采取相应的措施进行代码或缓存等优化,从而提高整个系统的性能。

关于MySQL慢查询记录日志启用可以参考这篇文章:《MySQL开启慢查询日志记录 - MySQL优化》

二、常见的5种MySQL日志文件分析工具:
引用
# mysqldumpslow slow_query_9.log    (推荐)

[root@monitor opt]# mysqlsla -lt  slow slow_query_9.log  (强烈推荐)

[root@monitor opt]# php parser.php -slow slow_query_9.log (php强烈推荐)

[root@monitor opt]# ./mysql_explain_slow_log --user=root --password=123456 < slow_query_9.log  (不推荐)

[root@monitor opt]# python mysql_filter_slow_log.py --no-duplicates slow_query_9.log (推荐)

以上命令是在CentOS系统下测试

5种MySQL日志文件分析工具对比:
点击在新窗口中浏览此图片
本文主要介绍mysqlsla日志分析工具,这里不再多赘述其他。

三、mysqlsla分析工具安装
mysqlsla工具是hackmysql.com推出的一款日志分析工具(该网站还维护了 mysqlreport, mysqlidxchk 等比较实用的mysql工具)。整体来说,功能非常强大。数据报表,非常有利于分析慢查询的原因,包括执行频率,数据量,查询消耗等。
1、下载 mysqlsla
附官方网站:http://hackmysql.com/mysqlsla
[root@monitor opt]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz

2、解压并进入安装目录
[root@monitor opt]# tar -zxvf mysqlsla-2.03.tar.gz
[root@monitor opt]# cd mysqlsla-2.03
[root@monitor mysqlsla-2.03]# less INSTALL    //浏览下安装说明

3、执行perl脚本检查包依赖关系
[root@monitor mysqlsla-2.03]# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for mysqlsla

补充:安装mysqlsla需要perl-DBI和per-DBD-Mysql两模块的支持,centos下安装mysql自动安装了这2个模块。

4、安装mysqlsla
[root@monitor mysqlsla-2.03]#make && make install


常见错误:
1)类似错误:Can't locate ExtUtils/MakeMaker.pm OR Time/HiRes.pm in @INC
     可参考这篇文章:《Can't locate ExtUtils/MakeMaker.pm OR Time/HiRes.pm in @INC解决方法》
2)类似错误:Can't locate DBI.pm in @INC (@INC contains: /usr/lib/perl
     可参考这篇文章:《Can't locate DBI.pm in @INC (@INC contains: /usr/lib/perl错误解决方法》

四、mysqlsla分析工具使用说明
语法:
Slow log: mysqlsla -lt slow slow.log
General log: mysqlsla -lt general general.log
Binary log: mysqlbinlog bin.log | mysqlsla -lt binary -

这里以slow log为例:
[root@monitor mysqlsla-2.03]# mysqlsla -lt slow /opt/slow.log | more
mysqlsla -lt slow /opt/slow.log  | more                
Use of uninitialized value $line in pattern match (m//) at /usr/local/bin/mysqlsla line 675, <LOG> line 211.
Use of uninitialized value $line in pattern match (m//) at /usr/local/bin/mysqlsla line 692, <LOG> line 211.
Report for slow logs: /opt/slow.log
35 queries total, 15 unique
Sorted by 't_sum'
Grand Totals: Time 229 s, Lock 0 s, Rows sent 443.57k, Rows Examined 10.11M


______________________________________________________________________ 001 ___
Count         : 7  (20.00%)
Time          : 42.930986 s total, 6.132998 s avg, 4.046063 s to 10.72709 s max  (18.76%)
Lock Time (s) : 354 otal, 51 vg, 38 o 65 ax  (15.26%)
Rows sent     : 54 avg, 54 to 54 max  (0.09%)
Rows examined : 1.58k avg, 222 to 4.57k max  (0.11%)
Database      : dz_nanchang
Users         :
       dz_nanchang@ 192.168.1.10 : 42.86% (3) of query, 11.43% (4) of all users
       dz_nanchang@ 192.168.1.15 : 42.86% (3) of query, 8.57% (3) of all users
       dz_nanchang@ 192.168.1.20 : 14.29% (1) of query, 2.86% (1) of all users

Query abstract:
SET timestamp=N; SELECT t.* FROM pre_forum_thread t WHERE t.fid='S' AND (t.displayorder IN (N2)) ORDER BY displayorder DESC, lastpost DESC LIMIT N;

Query sample:
SET timestamp=1354213966;
SELECT t.* FROM pre_forum_thread t
                        WHERE  t.fid='139'  AND (t.displayorder IN (0, 1))
                        ORDER BY displayorder DESC, lastpost DESC
                        LIMIT 54;
……………………
……………………


统计结果选项说明:
+阅读全文

vsftpd cmds_allowed 实现权限控制 不指定

Rinald 本站原创 Linux 2013/01/14 23:43
在实际的系统运维工作中,我们经常会面临或提及服务器数据安全问题,例如FTP连接时用户对文件可以进行覆盖操作 不具有删除权限等等。本文通过vsftpd cmds_allowed 参数配置对vsftpd服务实现精细权限控制做了详细的说明。

vsftpd cmds_allowed
cmds_allowed=ABOR,CWD,LIST,MDTM,MKD,NLST,
PASS,PASV,PORT,PWD,QUIT,RETR,RMD,RNFR,
RNTO,SITE,SIZE,STOR,TYPE,USER,ACCT,
APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST

注意:一定不能使用换行和空格,不然就没效果..

# ABOR - abort a file transfer
# CWD - change working directory
# DELE - delete a remote file
# LIST - list remote files
# MDTM - return the modification time of a file
# MKD - make a remote directory
# NLST - name list of remote directory
# PASS - send password
# PASV - enter passive mode
# PORT - open a data port
# PWD - print working directory
# QUIT - terminate the connection
# RETR - retrieve a remote file
# RMD - remove a remote directory
# RNFR - rename from
# RNTO - rename to
# SITE - site-specific commands
# SIZE - return the size of a file
# STOR - store a file on the remote host
# TYPE - set transfer type
# USER - send username
#

# less common commands:
# ACCT* - send account information
# APPE - append to a remote file
# CDUP - CWD to the parent of the current directory
# HELP - return help on using the server
# MODE - set transfer mode
# NOOP - do nothing
# REIN* - reinitialize the connection
# STAT - return server status
# STOU - store a file uniquely
# STRU - set file transfer structure
# SYST - return system type

VSFTPD的非常有用的权限控制语句,也许在使用FTP的过程中,可能是有一些权限控制的不如意,通过下面例子大家或许能找到适合自己需求的权限分配
我们首先来看看下面的几个例子:
1、只能上传。不能下载、删除、重命名。
cmds_allowed=FEAT,REST,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST
2、只能下载。不能上传、删除、重命名。write_enable=NO
3、只能上传、删除、重命名。不能下载。download_enable=NO
4、只能下载、删除、重命名。不能上传。
cmds_allowed=FEAT,REST,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,RNFR,RNTO,RETR,DELE,SIZE,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST

以上的2、3两点好控制,可是1和4就不是那么好控制了!

我给出了1和4的方法,当然,大家也可以说说自己是如何实现1和4的控制的,我们相互交流!
下面我就把具体的一些参数来和大家说说!

CWD - change working directory 更改目录
LIST - list remote files 列目录
MKD - make a remote directory 新建文件夹
NLST - name list of remote directory
PWD - print working directory 显示当前工作目录
RETR - retrieve a remote file 下载文件
STOR - store a file on the remote host 上传文件

DELE - delete a remote file 删除文件
RMD - remove a remote directory 删除目录
RNFR - rename from 重命名
RNTO - rename to 重命名

以上是常用的一些参数,大家对照学习一下!下面是列也的全部参数,供大家参考!

# ABOR - abort a file transfer 取消文件传输
# CWD - change working directory 更改目录
# DELE - delete a remote file 删除文件
# LIST - list remote files 列目录
# MDTM - return the modification time of a file 返回文件的更新时间
# MKD - make a remote directory 新建文件夹
# NLST - name list of remote directory
# PASS - send password
# PASV - enter passive mode
# PORT - open a data port 打开一个传输端口
# PWD - print working directory 显示当前工作目录
# QUIT - terminate the connection 退出
# RETR - retrieve a remote file 下载文件
# RMD - remove a remote directory
# RNFR - rename from
# RNTO - rename to
# SITE - site-specific commands
# SIZE - return the size of a file 返回文件大小
# STOR - store a file on the remote host 上传文件
# TYPE - set transfer type
# USER - send username

# less common commands:

# ACCT* - send account information
# APPE - append to a remote file
# CDUP - CWD to the parent of the current directory
# HELP - return help on using the server
# MODE - set transfer mode
# NOOP - do nothing
# REIN* - reinitialize the connection
# STAT - return server status
# STOU - store a file uniquely
# STRU - set file transfer structure
# SYST - return system type


例如:vsftp 用户只能上传不能删除
编辑vsftpd.conf配置文件添加
# vi /etc/vsftpd/vsftpd.conf
cmds_allowed=ABOR,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RETR,RNFR,RNTO,SIZE,STOR,TYPE,USER,REST,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST,FEAT(一些FTP的命令,就是除了DELE等命令)
# service vsftpd restart

再见2012。你好,2013 不指定

Rinald 本站原创 随笔/分享 2013/01/03 23:15
祝看到这篇博文的朋友们2013年身体健康,事随心愿,工作顺利,生活愉快!

——写在前面的         

  每年这个季节、这段时间,我想大家和我一样我们每个人几乎都会对上一年度的工作 生活 学习做一个简短的总结和对下一年做个简单的展望及计划。

  在写这篇总结之前,简单的翻了下2012年的博文,2月工作生活学习繁忙的状态开始,4月岗位的变动更换了工作环境及岗位,为了做个纪念,5月底未来往事博客域名正式由运行一年之久的esho域名更换为fity.cn,fity也没大家猜测那样多内涵多文艺 smoke  这个域名源于对Felicity的简写而出,6月鉴于工作单一、也学不到自己想要或需要的,告别了第一份工作随之踏入第二份工作,依然和虚拟化、云计算、存储有关系吧;9月初发现身体状态不是很好,心情低落,工作也不再有什么动力和激情而言,畅想下当前的生活、工作,毕竟生活工作学习除积累以外,或许都是一次次的经历,这里或许也是让我经历了认知,温故了职场,或许这里也不适合我,反之我也并不适合这里。不过还是值得说说我最最受不了的就是部门就那么四五个人,背着A把A从上到下说一通,背着B把B从上到下说一遍,背着C把C从上到下说一遍,博主不是那样喜欢敷衍的人、也不想再听重播,于是这个收获的季节——清晰的记得9.12听完一首音乐毅然点下Stop按钮不再循环的决定。10月中旬离职。这家公司或许唯一的收获的便是自己能认真对待生活的细节及从小事着手。
  离职后第一想法就是什么也不管先休息一段时间,哈哈,休息一段时间后无论是精神还是身体都感觉轻松了好多。进入11月匆匆茫茫投简历,11.5开始了新的工作。

2012,如果给个总结,或许是不安、茫然、彷徨、奔波、孤独、成熟的一年。。。正因为不安,所以青春;因为茫然,所以青春;因为彷徨,所以青春;因为孤独,所以青春。

2012,心中有甜有苦,脸上有喜有忧,细细感受,身边的人有聚有散,在乎的人有近有远,做的事有成有败,想的事有实有空,所有的日子都不曾虚度,所有的得失都已过去,留下的仅存记忆及经历。

2012,对我来说很重要,对很多事物有了新的认识,学着用立体的思维去分析,去看待一些事情。

2012,已然成为历史的366天。这一年里,有收获的喜悦,也曾经历挫折。

2012,这一年,我们一起调戏了杜浦、麻烦了元芳、共同鉴证了玛雅人的末日预言,跨过了世界末日,来到历史的新纪元!

2012,感谢那些陪我一路走来的朋友,感谢!

再见,2012。你好,2013,明年的今天我又会是怎样呢?是不是有很大进步和成功呢?俱往矣,还看我的2013!grin

2013,允许自己慢慢来,重新出发。认真的过好每一天,认真的对待生命。坚持读书看书、锻炼身体。或耐心把一些基本的事做好,开始慢慢来;学习接纳生活中的痛苦,并记录下每一份微幸福。

2013,我也想有以下的几件事想做,在这里做个记录,等明年的今日我来看看我完成了多少,哈哈:
+阅读全文
Web网站性能压力 测试工具WebBench使用详解

Webbench是知名的网站压力方面的测试工具,它是由Lionbridge公司开发。
官方主页:http://home.tiscali.cz/~cz210552/webbench.html

在运维工作中,网站压力及性能测试是一项很重要的工作。比如在一个网站上线之前,能承受多大访问量、在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验。但是,在压力及性能测试中存在一个共性,那就是压力及性能测试的结果与实际负载结果不会完全相同,就算压力及性能测试工作做的再好,也不能保证100%和线上性能指标相同。面对这些问题,我们只能尽量去想方设法去模拟。所以,压力及性能测试非常有必要,有了这些数据,我们就能对自己做维护的平台做到心中有数。

Web Bench最多可以模拟3万个并发连接去测试网站的负载能力。Web Bench能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。Web Bech的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。Web Bench不但能具有静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进行测试的能力。还有就是他支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试。

适用于linux操作系统
1、WebBench安装:
wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make
make install
补充:安装过程中如提示缺少组件请安装,缺少目录,请手动创建。
常见错误:
cc -Wall -ggdb -W -O   -c -o webbench.o webbench.c
webbench.c: In function ‘alarm_handler’:
webbench.c:77: warning: unused parameter ’signal’
cc -Wall -ggdb -W -O   -o webbench webbench.o
ctags *.c
/bin/sh: ctags: command not found
make: [tags] Error 127 (ignored)
centos有相应的组件,搜索一下ctags安装即可 # yum install ctags

2、WebBench使用:
webbench -c 1000 -t 60 http://a.fity.cn/info.php
webbench -c 并发数 -t 运行测试时间(秒)  URL


3、测试结果示例:
# webbench -c 600 -t 30 http://a.fity.cn/index.php #每秒并发数为600,持续执行60秒
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://a.fity.cn/index.php
600 clients, running 30 sec.

Speed=12082 pages/min, 152635 bytes/sec.
Requests: 6041 susceed, 0 failed.

-------------------------------------------------------------------------------------

# webbench -c 1000 -t 60 http://a.fity.cn/index.php #每秒并发数为1000,持续执行60秒
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://a.fity.cn/index.php
1000 clients, running 60 sec.

Speed=5553 pages/min, 70152 bytes/sec.
Requests: 5553 susceed, 0 failed.
注释:
Speed:(5553 pages/min)每分钟处理/响应的请求数,(70152 bytes/sec)每秒处理/传输的数据量
Requests:此次压力测试成功的请求数和失败数。


当并发2000时,已经显示有26个连接failed了,说明超负荷了。
# webbench -c 2000 -t 60 http://a.fity.cn/index.php
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://a.fity.cn/index.php
2000 clients, running 60 sec.

Speed=10479 pages/min, 132043 bytes/sec.
Requests: 10453 susceed, 26 failed.

补充:
1、压力及性能测试工作应该放到产品上线之前,而不是上线以后;
2、测试时并发应当由小逐渐加大,并使用TOP检查网站负载,或自行打开页面查看速度。比如并发100时观察一下网站负载是多少、打开页面是否流畅,并发200时又是多少、网站打开缓慢时并发是多少、网站打不开时并发又是多少;
3、更详细的进行某个页面测试,如电商网站可以着重测试购物车、推广页面等,因为这些页面占整个网站访问量比重较大。

备注:webbench 做压力及性能测试时,该软件自身也会消耗CPU和内存资源,为了测试准确,建议将 webbench 安装在其他的服务器上,已达到测试数据更加精确。
云计算的时代正在来临,运维的工作也将在今后几年中发生翻天覆地的变化。
如果你是一个能给自己做主的人,你必须看清形势顺势而为,在变革的时代埋头苦干仍然保证不了你的正常生活;如果你是一个弓骑兵,无论你怎么勤学苦练都打不过坦克手的;铁达尼号上的乘客无论多有钱,总是免不了泡进海水里的。

首先,我作为一个运维为何唱衰运维这个职业。
我们运维靠什么能力在公司里自立哪?
A.关心硬件和施工;
B.关注网络问题;
C.擅长系统和服务的调试维护;
D.相对与架构师/DBA的价格优势;
E.快速可靠的响应.

大家看看云计算能给企业带来的好处:
A.硬件完全免维护;
B.网络接近免维护;
C.系统、服务接近免维护;
D.无论是硬件还是人力成本都很廉价;
E.可靠性高于个人。

我们会发现,云计算的目标就是要做的比运维人员更好,好到“不用关心”的地步。从技术上来说,各大云计算运营商对通用的Web、RDBMS、存储 服务都是可以做到很好的。运维人员中一多半都是网站运维,这些运维受到云计算行业的碾压性冲击,必然会波及整个运维行业,以及因此衍生的培训、管理、硬件销售、IDC工作。

我原先一直不愿意承认这一点,我也认为运维工作很重要,但前端时间我看了一个故事,想和大家分享一下。

在191x年的时候,每个工厂都有一个副厂长负责管理电力,那个时候新建工厂要考虑是自己建水电站还是火电站,甚至连拉煤球的车都要自己准备;但后来各个工厂用的电力标准趋于一致,就没有企业自主发电而是从电网买电了,这个电力副总裁的职位就成为历史了。

我记得05年以前做运维,我们都要自己找很多种驱动、学习不同的主板配置方式、研究自有机房的空调系统,但如今运维的职位完全不用关心这些事情了,反倒是对负载均衡、高可用、大数据等问题越研究越深了。

云计算的目标是让IT服务像电力一样随时可用,这是一个积极正面的趋势,没有人能也没有人应该挡住他,运维职位可用消失,但你不应该因此而失业。
+阅读全文
本文为分享的安居客网站系统架构、web系统架构简报,简报加载速度依据你网速的快慢而受影响。
+阅读全文
Discuz UCenter通信原理与用户免激活同步登录
本文阐述了Discuz UCenter用户中心数据自动同步其他通信应用 免去用户激活 批量激活站点整合用户相关的原理与实现方法。

最后更新:2013/04/08
新版本可以论坛程序后台——ucenter中设置直接激活即可(但不能数据同步)。


本文档基于DiscuzX2.0环境所写。原则上兼容X1.5/X2.5版本的Discuz!X,毕竟这里本人未对其他版本进行测试,如用于X2.0之外的其他版本,请谨慎操作,以免造成不可能挽回的结果。

Ucenter通信原理:
1、用户登录bbs,通过logging.php文件中,使用函数uc_user_login验证,如果验证成功,将调用函数uc_user_synlogin(位于uc_client下的client.php文件中), 在这个函数中调用 uc_api_post('user', 'synlogin', array('uid'=>$uid));之后向UC_API.'/index.php'传递了数据;这里的UC_API就是在 config.inc.php中的定义的uc_server之URL地址

2、uc_server的index.php接受参数数据,获得model为user,action为synlogin,就调用control目录下的 user.php类中的onsynlogin方法,通过foreach循环,以javascript的方式通知uc应用列表中的应用同步登录;即通过 get方式传递给应用目录中api下的uc.php一些数据;

3、uc.php接收通知并处理get过来的数据,并在函数synlogin(位于uc.php中)通过函数_authcode加密数据(默认以UC_KEY作为密钥),用函数_setcookie设置cookie;

4、各个应用在适当的文件中用对应的密钥解码上面设置的cookie,得到用户id等数据;通过这个值来判断用户是否经过其它应用登录过;
点击在新窗口中浏览此图片

以discuz举例:
一、用户登录检查与用户登录验证logging.php
在bbs的logging.php中如下代码段

检查用户id变量$discuz_uid是否为空来判断,用户是否登录(包括从别的应用登录。)
如果用户从bbs登录,则在登录验证成功后通过如下代码:
$ucsynlogin = $allowsynlogin ? uc_user_synlogin($discuz_uid) : '';

通知其它应用----“用户已从bbs登录,请通知其它应用设置cookie”
(uc_server通过javascript调用方式向其它应用的api/uc.php传递数据)
可以在uc应用目录下新建一个名为test.php的文件,来模拟登录成功,请求uc_server通知其它应用。文件内容为:

PS:这段测试代码还可以测试同步登录不好使的情况,具体使用方法,你可以思考一下(本文后面也有介绍),有问题可以在此文结尾发表评论与我讨论。
运行后,查看源代码即可看到javascript;
这里要注意了:这些javascript的通知中是不包含用户登录的应用的。也就是说只"通知"用户未登录的应用,因为用户通过uc_server登录成功的当前应用,当然不需要uc_server再通知了。具体代码请参看:webroot\uc_server\control\user.php中的onsynlogin函数的这句:
if($app['synlogin'] && $app['appid'] != $this->app['appid'])
代码解释:
$app['synlogin']是uc应用是否允许同步登录
而且应用id不等于用户当前登录的应用id
$app数组就是uc_server\data\cache\apps.php中的数组$_CACHE['apps'];
$this->app就是用户登录的应用

二、接受其它应用的同步登录通知:
在discuz的api目录下的uc.php中的函数synlogin,在这里接受uc_server发送过来的“同步登录通知”,并设置discuz的cookie,在这个函数中你可以查看到cookie的加密密钥的“算法”;
如果你想看看uc_server发送过的的“通知”是什么数据,你可以这么做:
1、修改要接受通知的应用目录下的api\uc.php,在$action = $get['action'];代码下面添加如下代码:
echo "<pre>";var_dump($get);echo "</pre>";die("<hr>api\uc.php");

2、将上面建立的test.php文件放置在其它允许同步登录的应用目录下,并在浏览器中运行,然后点击页面中对应第一步的应用链接,即可看到uc_server“通知”给改应用的数据;

三、检查用户是否已登录(无论是那个应用下登录):
discuz的include目录中common.inc.php中有这样的代码:

这段代码就是解码在uc.php中用密钥($discuz_auth_key)加密的cookie值,以获得用户id($discuz_uid)
这里的解密函数位于bbs\include\global.func.php中,虽然未给函数传递cookie密钥,但函数中通过全局变量$GLOBALS['discuz_auth_key'])获得密钥。

Ucenter App通信详细过程如图:
+阅读全文
本文主要介绍:
strlen() mb_strlen() mb_substr() mb_strcut()的使用和区别以及在不使用mb_strlen函数的情况下,如何自定义函数替换mb_strlen函数,实现中英文混合组成的字符串的长度?如何编译安装php程序时支持mbstring函数库?

以上函数默认需要PHP函数库支持:mbstring

1、使用及区别:
PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是1~3倍的差异了。

采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用mb_strlen($str,’UTF-8′)。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到,设置有两种方式:
1. 在php.ini中设置mbstring.internal_encoding = UTF-8
2. 调用mb_internal_encoding(“GBK”)

除了mb_strlen,还有很多切割函数,其中mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。而且从函数切割对长度的作用也不同,mb_strcut的切割条件是小于strlen, mb_substr是等于strlen,看下面的例子

因为在utf8中一个中文字符是三个字节,所以“这是”这个字符串的长度是6,而mb_substr或mb_strlen处理是六个字符。
strlen或mb_strcut是按英文来的,英文字母在任何编码中都是一个字节。所以strlen在含有其他语言文字的时候,计算的其实可以理解为字节数目。而mb_strlen或mb_substr计算的是字符数目。

2、如何使用其他自定义函数取缔或替换mb_strlen..
今天在测试修正程序博客文章页面描述信息截取字符时遇到下图所示问题:
点击在新窗口中浏览此图片

firstheader.php文件中line 21 codes:
if(mb_strlen($newDescription,'UTF-8')>=mb_strlen($config['blogdesc'],'UTF-8')){

错误已经提示的很清楚是缺少函数库对函数mb_strlen的支持(未定义),但是由于所在的服务器虚拟主机空间PHP不支持mbstring函数库,所以只能靠自己想办法解决啦,这里莪是通过自定义了一个函数然后替换了之前的mb_strlen函数,如果你有更好的解决方法可以评论哈,code如下:

3、独立主机php如何支持mbstring函数库
需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php编译模块时加入mbstring的支持:
Windows或Linux系统环境下配置php支持mbstring函数库你可以参考这篇文章:http://fity.cn/post/179/
+阅读全文
现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:
一种是通过硬件来进行进行,常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;另外一种就是类似于LVS/HAProxy、Nginx的基于Linux的开源免费的负载均衡软件策略,这些都是通过软件级别来实现,所以费用非常低廉,所以我个也比较推荐大家采用第二种方案来实施自己网站的负载均衡需求。

近期朋友刘鑫(紫雨荷雪)的项目成功上线了,PV达到了亿级/日的访问量,最前端用的是HAProxy+Keepalived双机作的负载均衡器/反向代理,整个网站非常稳定;这让我更坚定了以前跟老男孩前辈聊的关于网站架构比较合理设计的架构方案:即Nginx/HAProxy+Keepalived作Web最前端的负载均衡器,后端的MySQL数据库架构采用一主多从,读写分离的方式,采用LVS+Keepalived的方式。

在这里我也有一点要跟大家申明下:很多朋友担心软件级别的负载均衡在高并发流量冲击下的稳定情况,事实是我们通过成功上线的许多网站发现,它们的稳定性也是非常好的,宕机的可能性微乎其微,所以我现在做的项目,基本上没考虑服务级别的高可用了。相信大家对这些软件级别的负载均衡软件都已经有了很深的的认识,下面我就它们的特点和适用场合分别说明下。

LVS:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability),感谢章文嵩博士为我们提供如此强大实用的开源软件。
LVS的特点是:
1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;
2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
3、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived;
4、无流量,保证了均衡器IO的性能不会收到大流量的影响;
5、应用范围比较广,可以对所有应用做负载均衡;
6、软件本身不支持正则处理,不能做动静分离,这个就比较遗憾了;其实现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
7、如果是网站应用比较庞大的话,实施LVS/DR+Keepalived起来就比较复杂了,特别后面有Windows Server应用的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。

Nginx的特点是:
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是许多朋友喜欢它的原因之一;
2、Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、也可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测;
6、Nginx仅能支持http和Email,这样就在适用范围上面小很多,这个它的弱势;
7、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web架构,大有和以前最流行的LAMP架构分庭抗争之势,在高流量的环境中也有很好的效果。
8、Nginx现在作为Web反向加速缓存越来越成熟了,很多朋友都已在生产环境下投入生产了,而且反映效果不错,速度比传统的Squid服务器更快,有兴趣的朋友可以考虑用其作为反向代理加速器。

HAProxy的特点是:
1、HAProxy是支持虚拟主机的,以前有朋友说这个不支持虚拟主机,我这里特此更正一下。
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。
6、HAProxy的算法现在也越来越多了,具体有如下8种:
①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
②static-rr,表示根据权重,建议关注;
③leastconn,表示最少连接者先处理,建议关注;
④source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
⑤ri,表示根据请求的URI;
⑥rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name;
⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
win7 通过nslookup或ping命令能正常解析域名,ping不通域名同时也上不了网,QQ也登录不了的,是完全不能上网的,网络协议中亦没有相关的可添加的可选网络(缺少一个或多个网络协议),如reliable multicast protocol。数据包发送和接受状态很不稳定。重新安装网卡驱动后问题依然如此,如果你当前也遇到了这样的问题,你可以尝试本文笔者所述的方法。
故障简要状态:
命令行输出状态码如下:
C:\Documents and Settings\Administrator>nslookup
Default servers (默认服务器):  dns1.gwbnah.net.cn
Address:  211.162.0.10

> www.qq.com
Server(服务器):  dns1.gwbnah.net.cn
Address:  211.162.0.10

Non-authoritative answer(非权威应答):
Name:    www.qq.com
Addresses:  2402:4e00::b
  2402:4e00::d
  59.64.114.103
  59.64.114.98

C:\Documents and Settings\Administrator>ping www.qq.com
正在 Ping www.qq.com [59.64.114.103] 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。
59.64.114.103 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失)

原因分析:
引起该原因的因素可能是由于软件冲突、病毒原因造成的参数错误问题。本文笔者遇到的错误排查后是由于机器上的Winsock协议配置有问题导致的网络连接问题。

故障处理:
winsock是Windows网络编程接口,winsock工作在应用层,它提供与底层传输协议无关的高层数据传输编程接口 netsh winsock reset 是把它恢复到默认状态。netsh winsock reset命令,作用是重置 Winsock 目录。如果一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就需要用netsh winsock reset命令来重置Winsock目录借以恢复网络。这个命令可以重新初始化网络环境,以解决由于软件冲突、病毒原因造成的参数错误问题。当执行完winsock的命令重启计算机后,需要重新config your IP Address或重新renew your IP Address。

你可以从百度百科中获得更多关于winsock的相关知识:http://baike.baidu.com/view/4043887.htm

笔者最后补充一句:输入netsh winsock reset命令一般不会有什么问题,除非你的一些软件使用特别的网络协议。
概述
Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因数的影响,响应速度慢还是经常抱怨和困扰。解决方案就是在网络传输上利用缓存技术使得Web服务数据流能就近访问,是优化网络数据传输非常有效的技术,从而获得高速的体验和品质保证。

网络缓存技术,其目的就是减少网络中冗余数据的重复传输,使之最小化,将广域传输转为本地或就近访问。互联网上传递的内容,大部分为重复的Web/FTP数据,Cache服务器及应用Caching技术的网络设备,可大大优化数据链路性能,消除数据峰值访问造成的结点设备阻塞。Cache服务器具有缓存功能,所以大部分网页对象(Web page object),如html, htm, PHP等页面文件,gif,tif, png, bmp等图片文件,以及其他格式的文件,在有效期(TTL)内,对于重复的访问,不必从原始网站重新传送文件实体,只需通过简单的认证(Freshness Validation)- 传送几十字节的Header,即可将本地的副本直接传送给访问者。由于缓存服务器通常部署在靠近用户端,所以能获得近似局域网的响应速度,并有效减少广域带宽的消耗。据统计,Internet上超过80%的用户重复访问20%的信息资源,给缓存技术的应用提供了先决的条件。缓存服务器的体系结构与Web服务器不同,缓存服务器能比Web服务器获得更高的性能,缓存服务器不仅能提高响应速度,节约带宽,对于加速Web服务器,有效减轻源服务器的负荷是非常有效的。

高速缓存服务器(Cache Server)是软硬件高度集成的专业功能服务器,主要做高速缓存加速服务,一般部署在网络边缘。根据加速对象不同,分为客户端加速和服务器加速,客户端加速Cache部署在网络出口处,把常访问的内容缓存在本地,提高响应速度和节约带宽;服务器加速,Cache部署在服务器前端,作为Web服务器的前置机,提高Web服务器的性能,加速访问速度。如果多台Cache加速服务器且分布在不同地域,需要通过有效地机制管理Cache网络,引导用户就近访问,全局负载均衡流量,这就是CDN内容传输网络的基本思想。

什么是CDN内容分发网络?
CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络”边缘”,使用户可以就近取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,解决用户访问网站的响应速度慢的根本原因。

狭义地讲,内容分发布网络(CDN)是一种新型的网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层;而从广义的角度,CDN代表了一种基于质量与秩序的网络服务模式。简单地说,内容发布网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,距用户仅有”一跳”(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。据统计,采用CDN技术,能处理整个网站页面的70%~95%的内容访问量,减轻服务器的压力,提升了网站的性能和可扩展性。

与目前现有的内容发布模式相比较,CDN强调了网络在内容发布中的重要性。通过引入主动的内容管理层的和全局负载均衡,CDN从根本上区别于传统的内容发布模式。在传统的内容发布模式中,内容的发布由ICP的应用服务器完成,而网络只表现为一个透明的数据传输通道,这种透明性表现在网络的质量保证仅仅停留在数据包的层面,而不能根据内容对象的不同区分服务质量。此外,由于IP网的”尽力而为”的特性使得其质量保证是依靠在用户和应用服务器之间端到端地提供充分的、远大于实际所需的带宽通量来实现的。在这样的内容发布模式下,不仅大量宝贵的骨干带宽被占用,同时ICP的应用服务器的负载也变得非常重,而且不可预计。当发生一些热点事件和出现浪涌流量时,会产生局部热点效应,从而使应用服务器过载退出服务。这种基于中心的应用服务器的内容发布模式的另外一个缺陷在于个性化服务的缺失和对宽带服务价值链的扭曲,内容提供商承担了他们不该干也干不好的内容发布服务。

纵观整个宽带服务的价值链,内容提供商和用户位于整个价值链的两端,中间依靠网络服务提供商将其串接起来。随着互联网工业的成熟和商业模式的变革,在这条价值链上的角色越来越多也越来越细分。比如内容/应用的运营商、托管服务提供商、骨干网络服务提供商、接入服务提供商等等。在这一条价值链上的每一个角色都要分工合作、各司其职才能为客户提供良好的服务,从而带来多赢的局面。从内容与网络的结合模式上看,内容的发布已经走过了ICP的内容(应用)服务器和IDC这两个阶段。IDC的热潮也催生了托管服务提供商这一角色。但是,IDC并不能解决内容的有效发布问题。内容位于网络的中心并不能解决骨干带宽的占用和建立IP网络上的流量秩序。因此将内容推到网络的边缘,为用户提供就近性的边缘服务,从而保证服务的质量和整个网络上的访问秩序就成了一种显而易见的选择。而这就是内容发布网(CDN)服务模式。CDN的建立解决了困扰内容运营商的内容”集中与分散”的两难选择。无疑对于构建良好的互联网价值链是有价值的,也是不可或缺的。

CDN新应用和客户
目前的CDN服务主要应用于证券、金融保险、ISP、ICP、网上交易、门户网站、媒体站点、大中型公司、网络教学等领域。另外在行业专网、互联网中都可以用到,甚至可以对局域网进行网络优化。利用CDN,这些网站无需投资昂贵的各类服务器、设立分站点,特别是流媒体信息的广泛应用、远程教学课件等消耗带宽资源多的媒体信息,应用CDN网络,把内容复制到网络的最边缘,使内容请求点和交付点之间的距离缩至最小,从而促进Web站点性能的提高,具有重要的意义。CDN网络的建设主要有企业建设的CDN网络,为企业服务;IDC的CDN网络,主要服务于IDC和增值服务;网络运营上主建的CDN网络,主要提供内容推送服务;CDN网络服务商,专门建设的CDN用于做服务,用户通过与CDN机构进行合作,CDN负责信息传递工作,保证信息正常传输,维护传送网络,而网站只需要内容维护,不再需要考虑流量问题。

CDN能够为网络的快速、安全、稳定、可扩展等方面提供保障。

IDC建立CDN网络,IDC运营商一般需要有分部各地的多个IDC中心,服务对象是托管在IDC中心的客户,利用现有的网络资源,投资较少,容易建设。例如某IDC全国有10个机房,加入IDC的CDN网络,托管在一个节点的Web服务器,相当于有了10个镜像服务器,就近供客户访问。宽带城域网,域内网络速度很快,出城带宽一般就会瓶颈,为了体现城域网的高速体验,解决方案就是将Internet网上内容高速缓存到本地,将Cache部署在城域网各POP点上,这样形成高效有序的网络,用户仅一跳就能访问大部分的内容,这也是一种加速所有网站CDN的应用。

CDN的工作原理
在描述CDN的实现原理,让我们先看传统的未加缓存服务的访问过程,以便了解CDN缓存访问方式与未加缓存访问方式的差别:

点击在新窗口中浏览此图片

由上图可见,用户访问未使用CDN缓存网站的过程为:
1、用户向浏览器提供要访问的域名;
2、浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址;
3、浏览器使用所得到的IP地址,域名的服务主机发出数据访问请求;
4、浏览器根据域名主机返回的数据显示网页的内容。
通过以上四个步骤,浏览器完成从用户处接收用户要访问的域名到从域名服务主机处获取数据的整个过程。CDN网络是在用户和服务器之间增加Cache层,如何将用户的请求引导到Cache上获得源服务器的数据,主要是通过接管DNS实现,下面让我们看看访问使用CDN缓存后的网站的过程:

点击在新窗口中浏览此图片

通过上图,我们可以了解到,使用了CDN缓存后的网站的访问过程变为:

1)、用户向浏览器提供要访问的域名;

2)、浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析函数库一般得到的是该域名对应的CNAME记录,为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问。

3)、此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;

4)、缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;

5)、缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程;

6)、客户端得到由缓存服务器返回的数据以后显示出来并完成整个浏览的数据请求过程。

通过以上的分析我们可以得到,为了实现既要对普通用户透明(即加入缓存以后用户客户端无需进行任何设置,直接使用被加速网站原有的域名即可访问),又要在为指定的网站提供加速服务的同时降低对ICP的影响,只要修改整个访问过程中的域名解析部分,以实现透明的加速服务,下面是CDN网络实现的具体操作过程。

1)、作为ICP,只需要把域名解释权交给CDN运营商,其他方面不需要进行任何的修改;操作时,ICP修改自己域名的解析记录,一般用cname方式指向CDN网络Cache服务器的地址。

2)、作为CDN运营商,首先需要为ICP的域名提供公开的解析,为了实现sortlist,一般是把ICP的域名解释结果指向一个CNAME记录;

3)、当需要进行sorlist时,CDN运营商可以利用DNS对CNAME指向的域名解析过程进行特殊处理,使DNS服务器在接收到客户端请求时可以根据客户端的IP地址,返回相同域名的不同IP地址;

4)、由于从cname获得的IP地址,并且带有hostname信息,请求到达Cache之后,Cache必须知道源服务器的IP地址,所以在CDN运营商内部维护一个内部DNS服务器,用于解释用户所访问的域名的真实IP地址;

5)、在维护内部DNS服务器时,还需要维护一台授权服务器,控制哪些域名可以进行缓存,而哪些又不进行缓存,以免发生开放代理的情况。

CDN的技术手段
实现CDN的主要技术手段是高速缓存、镜像服务器。可工作于DNS解析或HTTP重定向两种方式,通过Cache服务器,或异地的镜像站点完成内容的传送与同步更新。DNS方式用户位置判断准确率大于85%,HTTP方式准确率为99%以上;一般情况下,各Cache服务器群的用户访问流入数据量与Cache服务器到原始网站取内容的数据量之比在2:1到3:1之间,即分担50%到70%的到原始网站重复访问数据量(主要是图片,流媒体文件等内容);对于镜像,除数据同步的流量,其余均在本地完成,不访问原始服务器。

镜像站点(Mirror Site)服务器是我们经常可以看到的,它让内容直截了当地进行分布,适用于静态和准动态的数据同步。但是购买和维护新服务器的费用较高,另外还必须在各个地区设置镜像服务器,配备专业技术人员进行管理与维护。大型网站在随时更新各地服务器的同时,对带宽的需求也会显著增加,因此一般的互联网公司不会建立太多的镜像服务器。

高速缓存手段的成本较低,适用于静态内容。Internet的统计表明,超过80%的用户经常访问的是20%的网站的内容,在这个规律下,缓存服务器可以处理大部分客户的静态请求,而原始的WWW服务器只需处理约20%左右的非缓存请求和动态请求,于是大大加快了客户请求的响应时间,并降低了原始WWW服务器的负载。根据美国IDC公司的调查,作为CDN的一项重要指标 —— 缓存的市场正在以每年近100%的速度增长,全球的营业额在2004年将达到45亿美元。网络流媒体的发展还将剌激这个市场的需求。

CDN的网络架构
CDN网络架构主要由两大部分,分为中心和边缘两部分,中心指CDN网管中心和DNS重定向解析中心,负责全局负载均衡,设备系统安装在管理中心机房,边缘主要指异地节点,CDN分发的载体,主要由Cache和负载均衡器等组成。

当用户访问加入CDN服务的网站时,域名解析请求将最终交给全局负载均衡DNS进行处理。全局负载均衡DNS通过一组预先定义好的策略,将当时最接近用户的节点地址提供给用户,使用户能够得到快速的服务。同时,它还与分布在世界各地的所有CDNC节点保持通信,搜集各节点的通信状态,确保不将用户的请求分配到不可用的CDN节点上,实际上是通过DNS做全局负载均衡。

对于普通的Internet用户来讲,每个CDN节点就相当于一个放置在它周围的WEB。通过全局负载均衡DNS的控制,用户的请求被透明地指向离他最近的节点,节点中CDN服务器会像网站的原始服务器一样,响应用户的请求。由于它离用户更近,因而响应时间必然更快。

每个CDN节点由两部分组成:负载均衡设备和高速缓存服务器

负载均衡设备负责每个节点中各个Cache的负载均衡,保证节点的工作效率;同时,负载均衡设备还负责收集节点与周围环境的信息,保持与全局负载DNS的通信,实现整个系统的负载均衡。

高速缓存服务器(Cache)负责存储客户网站的大量信息,就像一个靠近用户的网站服务器一样响应本地用户的访问请求。

CDN的管理系统是整个系统能够正常运转的保证。它不仅能对系统中的各个子系统和设备进行实时监控,对各种故障产生相应的告警,还可以实时监测到系统中总的流量和各节点的流量,并保存在系统的数据库中,使网管人员能够方便地进行进一步分析。通过完善的网管系统,用户可以对系统配置进行修改。

理论上,最简单的CDN网络有一个负责全局负载均衡的DNS和各节点一台Cache,即可运行。DNS支持根据用户源IP地址解析不同的IP,实现就近访问。为了保证高可用性等,需要监视各节点的流量、健康状况等。一个节点的单台Cache承载数量不够时,才需要多台Cache,多台Cache同时工作,才需要负载均衡器,使Cache群协同工作。


第5页 / 共6页 第一页 « 上一页 1 2 3 4 5 6 下一页 » 最后页 [ 显示模式: 摘要 | 列表 ]