内容分发网络(Content Delivery Network)

在抱怨自己家里网速很慢的时候,你有没有想过,为什么即使在这样蜗牛的网速下,有的门户网站还能以不错的速度呈现在你的浏览器中?通过这段时间在公司的实习,了解了不少东西 :) 事实上,不止是只有你希望自己的网速更快,更稳定——那些商家们也希望你能顺利访问到他们的网站。但他们所采取的方式却不一样。因为他们不可能改变你家里的带宽,于是他们希望缩短与你的距离,将自己备份到离你最近的地方供你访问。这时候——CDN技术出现了。

什么是CDN?

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

通过用户就近性和服务器负载的判断, CDN 确保内容以一种极为高效的方式为用户的请求提供服务。总的来讲,内容服务基于缓存服务器,也称作代理缓存 (Surrogate) ,它位于网络的边缘,距用户仅有 “ 一跳 ”(Single Hop) 之遥。

同时,代理缓存是内容提供商源服务器的一个透明镜像。这样的架构使得 CDN 服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验。采用 CDN 技术,能处理整个网站页面的 70% ~ 95 %的内容访问量,减轻服务器的压力,提升了网站的性能和可扩展性。

而CDN又有别于一般的镜像,因为它比镜像更智能,或者可以做这样一个比喻:CDN=更智能的镜像+缓存+流量导流。因而,CDN可以明显提高Internet网络中信息流动的效率。

总的来说,CDN是一个经策略性部署的整体系统,能够帮助用户解决分布式存储、负载均衡、网络请求的重定向和内容管理等问题;CDN代表了一种基于质量与秩序的网络服务模式。

CDN工作原理

内容分发网络(CDN)采用智能路由和流量管理技术,及时发现能够给访问者提供最快响应 的加速节点,并将访问者的请求导向到该加速节点,由该加速节点提供内容服务。利用内容分发与复制机制,CDN客户不需要改动原来的网站结构,只需修改少量 的DNS配置,就可以加速网络的响应速度。

当用户访问了使用CDN服务的网站 时,DNS域名服务器通过CNAME方式将最终域名请求重定向到CDN系统中的智能DNS负载均衡系统。智能DNS负载均衡系统通过一组预先定义好的策略 (如内容类型、地理区域、网络负载状况等),将当时能够最快响应用户的节点地址提供给用户,使用户可以得到快速的服务。

同时,它还与分布在不同地点的所有CDN节点保持通信,搜集各节点的健康状态,确保不将用户的请求分配到任何一个已经不可用的节点上。而网宿CDN还具有在网络拥塞和失效情况下,能拥有自适应调整路由的能力。

使用了CDN服务后,用户的访问流程如下:

  1. 用户向浏览器提供要访问网站的域名,域名解析的请求被发往网站的DNS域名解析服务器;
  2. 由于网站的DNS域名解析服务器对此域名的解析设置了CNAME,请求被指向CDN网络中的智能DNS负载均衡系统;
  3. 智能DNS负载均衡系统对域名进行智能解析,将响应速度最快的节点IP返回给用户;
  4. 浏览器在得到速度最快节点的IP地址以后,向CDN节点发出访问请求;
  5. 由于是第一次访问,CDN节点将回到源站取用户请求的数据并发给用户;
  6. 当有其他用户再次访问同样内容时,CDN将直接将数据返回给客户,完成请求/服务过程。

通过以上的分析我们可以看出,CDN服务对网站访问提供加速的同时,可以实现对普通访问用户透明,即加入缓存以后用户客户端无需进行任何设置,直接输入被加速网站原有的域名即可访问。

CDN能带来什么

  • 通过提高网站响应速度,改善用户体验,增强用户满意度和粘合度;
  • 轻松应对突发流量,随时展开网络推广;
  • 有效抵御洪水式网络攻击,使网站永不宕机;
  • 减少源站点负载,节省网站分布式架构的支出成本和运维成本。

国内CDN服务商

网宿科技股份有限公司(股票代码:300017)前身是上海网宿科技发展有限公司,最早成立于2000年1月,是国内领先的互联网业务平台服务提供商,主要向客户提供内容分发与加速、服务器托管、服务器租用等互联网业务平台解决方案,是国内最早开展IDC和CDN业务的厂商之一。

利用 robots.txt 跟搜索引擎说不!

这是一则翻译,原文:About /robots.txt

网页机器人(也被称为网络蛛蛛),是一种自动化信息采集程序。像 Google 这样的搜索引擎使用它们自动地去索引网页;而垃圾邮件发送者则使用它去收集邮件地址;甚至还有你想像不到的用途……

对于友好的网页机器人,我们可以与其“对话”,让它们更好地从我们的网站上采集有用的信息,或者是告诉它们哪些信息根本没用。这时,就出现了一种被称之为“拒绝蜘蛛”的协议(The Robots Exclusion Protocol)

有了这套协议,机器人在访问你的网站之前,会先访问目录下的 /robots.txt 文件,并按协议所规定的规则采集信息。例如

User-agent: *
Disallow: /

其中 User-agent: * 表示对所有的机器人有效;Disallow: / 表示机器人不应该从这个网站采集任何信息。

但是要注意的是:

  • 不是所有的机器人都会去理会 /robots.txt ,尤其是那些臭名昭著的垃圾邮件机器人,以及入侵检测机器人。
  • /robots.txt 是一份和静态网页一样公开的文件,所有的人都能看开里面的内容。

所以,不要指望通过 /robots.txt 来隐藏信息。

如何创建 robots.txt

/robots.txt 是一份纯文本文件,你可以使用任何文本工具来编辑它。
通常它看起来像这样:

User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~joe/

在这个文件中包含三个目录。每个目录都必须独立的一行存在,不能写成

Disallow: /cgi-bin/ /tmp/

另外要注意的是,这个协议并不支持通配符以及正则表达式,User-agent 中的 * 只是一个特殊字符,表示任一个机器人。
下面的规则都是不合法的:

User-agent: *bot*
Disallow: /tmp/*
Disallow: *.gif

/robots.txt 的一些有效规则

拒绝所有机器人访问服务器上的任何文件

User-agent: *
Disallow: /

不作任何限制(等同于 /robots.txt 不存在)

User-agent: *
Disallow:

拒绝所有机器人访问服务器上的个别目录
通常是一些程序、缓存、垃圾文件

User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /junk/

拒绝某一个机器人访问服务器上的任何文件

User-agent: BadBot
Disallow: /

允许某一个机器人访问服务器上的任何文件
对于不同的机器人,需要有一个空行将它们分隔开

User-agent: Google
Disallow:

User-agent: *
Disallow: /

那么,如何让机器人只访问其中某个目录而拒绝其它任何目录?
这是一个很尴尬的情况,因为这份协议里面没有 Allow 这个关键词。
robotstxt.org 给出了一个答案,不过我暂时还没有理解

This is currently a bit awkward, as there is no “Allow” field. The easy way is to put all files to be disallowed into a separate directory, say “stuff”, and leave the one file in the level above this directory:

User-agent: *
Disallow: /~joe/stuff/

拒绝文件的访问

User-agent: *
Disallow: /~joe/junk.html
Disallow: /~joe/foo.html
Disallow: /~joe/bar.html

其它注意事项:
robots.txt必须放置在一个站点的根目录下,而且文件名必须全部小写。

用 Autohotkey 编写自动控制程序

AutoHotkey 是一款免费的、Windows平台下开放源代码的热键脚本语言。它能以简单的脚本语言(宏)来完成常见的鼠标、键盘甚至是文件管理等操作。

有了它,你可以

  • 通过发送键盘键击和鼠标点击自动化几乎所有的操作。您可以手工编写宏或者使用宏录制器。
  • 为键盘,游戏杆和鼠标创建热键。几乎任何按键、按钮或组合键都可以设置为热键。
  • 在您键入缩写时扩展缩写。例如,键入 “btw” 能自动地生成 “by the way”。
  • 创建自定义的数据输入表格、用户界面和菜单栏。详见图形用户界面。
  • 重新映射您键盘、游戏杆和鼠标上的按键和按钮。
  • 通过 WinLIRC 客户端脚本对手执遥控器的信号作出反应。
  • 运行现有的 AutoIt v2 脚本,并用新功能增强它们。
  • 将任何的脚本转换为 EXE 文件,使其在没有安装 AutoHotkey 的计算机上也能运行。

官方网站 http://www.autohotkey.com/

中文社区 http://ahk.5d6d.com/

Autohotkey 中文社区提供汉化的手册,里面包含了详细的指令介绍。利用手册,新手也能很容易入门。

安装后程序会自动关联扩展名为 .ahk 的文本文件,双击 .ahk 文件即可运行脚本。也可以将写好的脚本编译为 exe 应用程序独立运行,配合 Autohotkey 强大的键盘鼠标控制能力,可以被有心用于制作厉害的整人程序。

Autohotkey 学习笔记

按下空格键,执行某个程序(打开某个网站)

space:: Run notepad

space:: Run www.google.com

多条语句顺序执行,使用 return结束

space::
Run notepad
Run www.google.com
return

组合键:# ^ ! +

# 表示 Win 键,#n 即 Win+n
^ 表示 Ctrl 键, ^n 即 Ctrl+n
! 表示 Alt 键, !n 即 Alt+n
+ 表示 Shift 键,+n 即 Shift+n
^!+n,可以表示 Ctrl+Alt+Shift+n

注释

;以英文分号起始的句子为脚本中的注释,不被执行

标签:标签名+:,可用于程序跳转

lable1:
lable2:

变量及赋值

a = 1 ;将数字1赋值给a,a为1
b = a ;将字符”a”赋值给b,b为”a”,而不是数字1,对比下面一句
b = %a% ;将a的值1赋值给b,b为1,使用 = 赋值时,以 %% 区别变量
c := a ;同上,使用 := 赋值时,自动识别变量

数组

;定义数组:
Array0 = element1
Array1 = element2
Array2 = element3

;引用数组
N=1
a := Array%N% ;相当于c语言的 Array[N]

条件语句

if(a>b){
;条件为真
}else{
;条件为假
}

等待

Sleep 1000 ;等一秒

定时器

SetTimer,run,1000 ;每一秒从run标签执行一次
run:
;要执行的脚本
return

SetTimer,run,off ;停止执行run标签

模拟按键:Send

Send ^c ;发送Ctrl+c组合键
Send abc ;连续发送abc三个键
Send {enter} ;发送回车键

剪贴板

a := Clipboard ;获取剪贴板的内容
Clipboard := a ;将内容复制到剪贴板
Clipboard = “” ;清空剪贴板

做了这么多笔记,来综合运用一下吧!
大家猜看看下面程序有什么非常无聊的用处 :D

Array0 := “正在输入”
Array1 := “正在输入.”
Array2 := “正在输入..”
Num = 3

^f::
Count = 0
SetTimer, run, 1000
return

^d::
SetTimer, run, off
return

run:
Click
Sleep 100
str := Array%Count%
clipboard = %str%
Count += 1
if(Count >= Num)
Count = 0
Send ^v
Send {Enter}
return

其实,Autohotkey 可以帮助我们完成一些很烦琐的或者是重复性很强的操作。运用的好的话,它能胜任各种工作——我曾经用它完成一些很极端的工作:

制作连续数字图片(样式同一)

曾经有一次,一个朋友让我帮他完成128张数字图片的美化。如果是手工的话,你必须一张一张修改数字,然后按不同的文件名保存到指定目录,这样简单的事情做上128次,直接死掉算了。但是有了autohotkey,我只要录制一次鼠标/键盘操作,然后稍加修改,加上数字变量自动递增,它就帮我完成了剩下120多张图片的制作。

玩游戏按开火键按到手酸?

有了Autohotkey,你只要按下设定好的启动键,接下来的由它帮你“按”住那个键就行啦 :)

Wakoopa! 我的软件列表

有时间的话我想整理一个软件列表,放在博客上供大家交流。不过在此之前,介绍大家一个不错的小工具,它会帮你记录一些你常用的软件,以及使用的频率、时间等等。(感谢 Keepzero 推荐)

Wakoop 是一个社交网络,旨在帮助人们发现最好的软件、游戏和网页应用。只需要注册并安装一个轻量级的跟踪器在电脑上,它就会自动创建一个属于你的软件列表与朋友分享,也可以通过 widgets。Wakoopa 时时更新你关注的朋友在使用什么软件,你可以在页面上评论它们。游戏、播放器、即时通讯、办公软件——Wakoopa总能知道什么才是最流行的!

马上开始使用: http://wakoopa.com/

Wakoopa is a social network that helps people discover the best software, games and web apps on the market. Sign-up, install a small tracker on your desktop and automatically create your online software profile that you can share with friends and the world, also through widgets. Wakoopa keeps you updated about what your contacts are using, and sends you smart recommendations. Games, audio & video players, instant messengers or office tools: Wakoopa knows what’s hot.

注意:平时经常玩一些 Hgame 的同学要注意了,使用 Wakoopa 可能导致你的爸爸、妈妈知道你做了哪些坏事。该怎么做你懂的。幸运的是,Wakoopa 提供了 Pause Tracking (暂停跟踪)的功能。

继续阅读

木匣子’s favicon

想来想去,要用什么来做网页的图标呢?最后灵机一闪,决定用木头的横截面
——于是 favicon 诞生!

不知道Naruto里的面具男会不会有意见,hah

什么是Favicon?

Faviconfavorites icon的缩写,亦被称为website icon(网页图标)、page icon(页面图标)或urlicon(URL图标)。Favicon是与某个网站网页相关联的图标。网站设计者可以多种方式建立这种图标,而目前也有很多网页浏览器支持此功能。浏览器可以将favicon显示于浏览器的地址栏中,也可置于书签列表的网站名前,还可以放在标签式浏览界面中的页标题前。 via 维基百科

绿色环保低碳的头像

在琛姐的启发与指导下,制作了这样一个头像。其主体由木頭两个字拼接而成,形成“樹”状,颇有一番风味。

不愧是艺术系的琛姐啊!Ahaha…

笔记:字体经水平缩放后,笔划偏细,使用加粗偏粗时,可使用图层样式进行描边。
突然觉得这与我圣诞节给GF制作的那个Flash贺卡也有几分相似,hah。

我活了多久计算器

比起单调的 n 周岁生日,你有没有想过庆祝一下自己活了 7777天/8888天 之类的特殊时刻呢?

我就喜欢这样做。为此,我特地制作了这样的一个 Flash 小程序:

This movie requires Flash Player 9

我的出生日期 一栏填上自己的生日,点击 计算 按钮,它就会告诉你从你的生日起已经过了多久 :)

*填写格式可以以下面任意一种方式,以我的生日  1990年8月13日 为例:

  • 1990/08/13
  • 90/8/13
  • 8/13/1990
  • 8/13/90
  • Aug 13 1990

如果你记得具体的出生时间的话,甚至可以加在后面,e.g.

  • 90/8/13 1:00:00

程序计算的 并不精确,因为其将所有的月以30天计算,年以365天计算。

继续阅读