使博客访问速度更快的技巧

  很多网友会发现,大家同样是使用 Yo2 的博客服务,怎么自己的博客打开速度比人家慢?嗯,虽然都是跑同样的服务器,同样的线路,但博客的设置各不相同,这样就会出现差距了。我作为 Yo2 的开发员,我给大家介绍一下如何设置自己的博客可以取得更快的访问速度 :)

  1. 不要频繁进入管理后台更改设置
    • 很多网友喜欢经常到管理后台更改一下设置,看到文章有点瑕疵就重新编辑发布等等,这些操作都会触发 Yo2 CDN 系统更新博客缓存,如果一个博客的缓存被更新,那么就需要重新生成这些博客页面了,打开一个缓存页面的速度比重新生成一个页面快很多。所以大家要改改这些习惯
  2. 打开博客的缓存加速功能
    • 在管理后台-设置-输出,可以打开博客的缓存加速功能,大家可以根据所使用的模板进行选择,那些页面组成部分可以让系统缓存(比如我的博客只有页首因为有当前页面标识的功能,而侧栏和页尾的内容都可以是固定不变的,那么我就打开了侧栏和页尾的缓存加速)。开启了页面组成部分的缓存加速,可以让在重新生成页面时,可以直接使用已缓存的页面组成部分,减少了部分的数据操作,相对生产页面所消耗的时间就得到减少了
  3. 尽量减少第三方网站提供的 JavaScript 、图片调用
    • 有些网友喜欢在自己的侧栏加入很多第三方网站提供的服务,比如播放器、Rss、图片、访问统计等等,甚至有人会加入多个统计代码。博客确实很多东西了,但随之而来的速度被拖慢了,如果调用了一些国外的服务,对博客的访问速度影响更大。我之前有加入过 google 的访问统计,但这个有比较长时间的页面显示延迟,为了获取更快的速度,我把它删了。之前我还是用了 FeedSky 的 JavaScript 方式显示订阅按钮,后来直接写成 Html 格式,都可以加快页面的显示速度。我建议大家尽可能把第三方的调用控制在2个以内
  4. 减少首页(列表页面)的文章数量
    • 文章中可能包含了一些图片,在单个文章显示时的速度还挺快,但首页(文章列表)中包含的文章数量多的话,也就代表该页要显示的图片是列表上的文章所包含总和。还有部分网友是使用其他相册提供的图片服务,如果这些相册的访问速度慢,同样对自己的博客有影响。我建议把首页(文章列表)一页显示的文章数量控制在 5 个左右,确实需要一下显示多个文章的话,可以选择摘要输出(不显示图片)
  5. 使用 CNAME 绑定域名(收费用户)
    • Yo2 在各个网络都部署有独立服务器节点,只有使用 CNAME 方式进行域名解析,才能使用 Yo2 的 CDN 服务进行访问加速。对于使用了 A记录方式直接解析到我们其中一台服务器,那么所有网友访问你的博客也只限于在一台服务器上,并且这台服务器的线路不一定是最快的。如果你要使用 domain.com 这的域名进行绑定,而域名服务器又无法给 domain.com 提供 CNAME 方式的解析,我建议你更换绑定的域名为 www.domain.com 或 blog.domain.com ,又或者更换域名的解析服务器,改为使用 DnsPod 这样的域名解析服务

完成 ! 希望这些技巧能让你更好的使用 Yo2 博客服务 :)

国内 CDN 服务介绍

CDN是一个经策略性部署的整体系统,能够帮助用户解决分布式存储、负载均衡、网络请求的重定向和内容管理等问题。  其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容, 解决 Internet 网络拥塞状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均而产生的用户访问网站 响应速度慢的根本原因。

引用:http://www.chinacache.com/viewtechnique.asp?id=15

目前国内主要的 CDN服务商有北京蓝汛网宿科技北京快网浙江联存CDN联盟等数家,服务商之间的技术实力还有一定差距,产品线比较长的有北京蓝汛和网宿等几家,全国分布节点数量多,可提供多种加速服务,但相对价格也比较昂贵。一般小型 CDN 服务商较有价格优势,但产品线比较短,不能提供一些比较高端的应用,基本是做静态文件加速服务。

  普通的静态文件加速服务技术门槛低,只需要配备智能DNS解析服务,使用 squid (内容缓存系统) 在各地区部署一定数量的服务器节点,即可投入服务。所以现在有越来越多的 IDC 服务商开始建立自己的 CDN 网络,但因为还在起步阶段,带宽总容量低,所部署的节点数量比较少,主要分布在各大城市,并且节点的网络质量参次不齐。

  更多的服务商加入到 CDN 行列,已经把带宽资费拉到普通多线带宽的水平。现在越来越多的网站开始使用 CDN 服务,给网站的静态内容(如:图片)进行加速,而动态内容依然使用自有多线服务器提供访问服务。而有部分大型网站则开始建立自己的 CDN 网络 (如:6.cn) 自主 CDN 网络的可控性高,可以根据自己的各项服务需求进行细节调整,但维护成本则相对购买第三方的 CDN 服务要高得多。

  我们需要根据自身网站的实际需求、技术能力和资金,综合分析应该怎样使用 CDN 服务进行访问加速。因为 CDN 服务商只能提供一定域名数量的加速服务,如果你的网站需要给大量的域名访问进行加速,则需要自行建立 CDN 网络了。(如果您需要进一步了解 CDN 服务,我是能够提供一些建议的 :)

———————————————————

  Yo2 是博客服务商,需要给大量的博客进行访问加速,所以选择自行建立 CDN 网络。并且在服务器节点的页面缓存技术方面,相对普通的 CDN 服务商有一定的优势,我们的缓存系统已支持动态页面的加速服务,除了少量要求即时动态处理的数据以外,其他的博客文章页面、模板、图片等内容均已使用缓存加速。

  虽然我们的 CDN 网络还是起步阶段,所部署的服务器节点有限,但我们选择的机房带宽要求都是很高的,同省区的访问速度 < 20Ms,跨省区访问的速度在30~50Ms之间。在 Yo2 的成长过程中,我们将进一步完善自己的 CDN 网络,以提供更快的博客访问速度 :)

HTTP 的后台任务

  众所周知 HTTP 协议是无保持连接的,HTTP 1.1 虽然实现了保持连接的能力,但依然无法在连接上实现交互功能。浏览器给服务器发送一个 GET 请求,然后等待服务器返回数据,完成一个数据交互处理。问题就是出在等待返回这点,当有一个不需要服务器返回数据,但需要服务器处理一定的操作时,就显得这个等待是没有必要的。

举个比较长见的例子:

一个使用 Javascript (或图片) 方式记录的统计程序,需要用户每次打开页面都在服务器端做记录操作,而我们不需要收取服务器端返回的任何结果,只要服务器能做计数的操作就可以了。

虽然是 Javascript 或图片的调用,但在页面在浏览器渲染并显示给用户的过程,依然会造成一定的延时。如果我们能把这个没用的等待剔除,就可以加快页面的加载速度。

  但这个应用非常特殊,正常来说根本没有这样的 web server 支持 _-!!,我在 google 查阅过一些资料,可以使用给浏览器发送 Header : Content-Length: 0 的方法来实现 ,经过测试在未经过 nginx 的情况下确实能够令到浏览器停止加载,但如果前端有 nginx 就没有任何效果了。

  如需要 100% 的效果,只能从 web server下手,在收到 GET 请求时就直接返回一个内容,但继续进入 PHP 处理接下来的数据操作。

  Yo2 的页面访问都是经由 yo2cache 处理的,so 我们很容易就实现了这项功能 :)

@139.com 邮箱实现服务器监测通知

  当你手上管理着好几台服务器,需要及时获取这些服务器网络断开或死机的消息通知,那么手机短信通知将是最好的途径。这点小事情不需要开通什么SMS短信端口的 :) 你只要注册一个 @139.com 邮箱即可,该邮箱带有手机短信通知功能(好像通过手机查看邮件内容是需要付费的 _-!! 但我只需知道 web 服务是否正常,就把服务器信息简单的写在标题即可)

使用 PHP 监测 web 服务 80 端口是否正常:

发送邮件的 class (smtp.txt),请自行修改文件名
[code]<?
include_once('smtp.php');
@ob_end_flush();
//请修改为自己的发信邮箱地址(用原来的@139.com邮箱无法发送成功 _-!!,错误不明)
$smtp = new smtp("smtp.163.com",25,true,"***@163.com" ,"***");

function testServer($ip){
// 如果服务器在1小时内出现过错误则跳过检测
if(file_exists("/tmp/check-$ip") && (time() - filemtime("/tmp/check-$ip")) < 3600)return false;
global $smtp;
$h = '';
echo "CHECK: $ip";
if($fs = @fsockopen($ip,80, $errno, $errstr, 10)){
@fwrite($fs, "GET / HTTP/1.0rnHost: oneoo.comrnrn");
$h .= @fgets($fs, 256);
@fclose($fs);}
if(strpos($h,'200') === false){
@touch("/tmp/check-$ip");
echo " Failn";
//请修改为自己的邮箱地址
$smtp -> sendmail( '***@139.com', "wesnet@163.com", "Yo!", "服务器 $ip 出现异常", $h, "TXT" );
return false;
}else @unlink("/tmp/check-$ip");
echo " OKn";
return true;
}

testServer('***.***.***.***');
testServer('***.***.***.***');//检测多个服务器

echo "Finish TEST!n";

?>

  把该程序放在相对最稳定的服务器上,并设置 crontab 定时执行该程序 (如果还担心这台服务器不稳定,可以在其他服务器上也搞个监测程序 :)

  程序虽然是非常简单,但作用不小哦。我就是用这个方法来监测 Yo2 的服务器,服务器一出现无法访问,就能在 10 分钟内短信通知我了。

  如果服务器没有 PHP 环境,也可以使用 perl 来写个 :D

使用 PRTG 软件监控服务器、网络状态

  PRTG 是一个 For Windows 的服务器远程监控工具,它可支持多种监控协议,比较常用的是 SNMP 协议,大部分路由器等网络设备都支持该协议。服务器只需要安装一个 snmpd 监控即可。

综合监控界面

以下介绍如何使用 PRTG 工具来监控服务器的资源、网络状态 :

第一、必须在服务器上安装 snmpd 工具

Linux: yum -y install snmpd && yum -y install net-snmp

第二、配置 snmpd 工具以提供 CPU、RAM、Disk和网络状态的监控

请编辑 /etc/snmp/snmpd.conf

加入配置内容:

access notConfigGroup “” any noauth exact mib2 none none
view mib2   included  .iso.org.dod.internet.mgmt.mib-2 fc

如需要监控 CPU 和disk等状态,请加入以下配置内容:

com2sec adminUser  default       admin
group   adminGroup v1           adminUser
view adminview included  .1.3.6
access adminGroup “” any noauth exact adminview none none

load 12 14 14
disk / 10000

红色部分是设置只允许 admin 用户才能获取 CPU 和disk等状态数据,如果服务器的状态数据敏感,可使用 v2 协议,并加上密码 :)

蓝色部分是设置监控某分区,当然也可以设置多个,以监控多个分区

第三、配置 PRTG 客户端监控服务器状态

 PRTG 添加监控项目

添加网络监控:

添加网络监控1 添加网络监控2 添加网络监控3 添加网络监控4 添加网络监控5 添加网络监控6

添加CPU、磁盘等的监控:

跟添加网络监控的步骤有些区别,在第三步选择协议的时候不选择Standard Traffic Sensor 而选择 Custom SNMP Sensor。

在输入服务器信息时,如果 snmpd 配置文件中设置 CPU、磁盘等监控信息不为 public 默认访问可读取时,SNMP Community String 需要输入你在配置文件中设置的用户名

第五步需要输入正确的 OID (附表),并设置数据类型为 Gauge ;如是磁盘、内存等数据可设置 Scale 为 1024

添加CPU、磁盘等的监控1 添加CPU、磁盘等的监控2 添加CPU、磁盘等的监控3

设置综合监控界面

设置综合监控界面

还可以针对某项监控数据加上报警设置,如高亮显示,甚至可以自动执行某程序和发送 email 通知。

OID 对照表:

1.3.6.1.4.1.2021.10.1.3.1  //CPU 每分钟的 Load
1.3.6.1.4.1.2021.4.6.0  //已使用内存空间大小

1.3.6.1.2.1.6.9.0 //系统的 TCP 端口连接数

1.3.6.1.4.1.2021.9.1.6.1 //第一个监测 Disk 的总空间大小
1.3.6.1.4.1.2021.9.1.8.1 //第一个监测 Disk 的已使用空间大小
1.3.6.1.4.1.2021.9.1.9.1 //第一个监测 Disk 的使用比率

更详细的 OID 可使用 snmptranslate -Tp 1.3.6.1.4.1.2021 命令获取