终了2009

2009年又要过去了,一年又一年,日子总是追着走。

从工作、学习和生活三个方面去说,2009年做的事真是不多,有些得过且过的感觉了。年初我有许多的计划,可是到了年终,细细的数来却没能完成几样。生活上值得庆祝的事情,一来办了婚礼,二来呢做了准爸爸。工作上没有值得庆祝的事,只有值得反省的事。学习上的事情,是觉的学的太慢了,而且网撒的太大,有点收不住的感觉了。

2010年对自己的希望是:

  1. 做一个好爸爸。
  2. 多学一门外语。
  3. 把学习的重点放在计算机科学上,不要再搞民科了。要深一些!
  4. 广交好友,提升RP。
  5. 在人大的学习该有个了结了。
  6. 多了解一些微观经济学的东西。
  7. 克服拖沓症。

Automator Proxy Toggle Shell

人都是被逼出来的,为翻墙方便,用Automator写了一个Service,就执行一段shell,还设置了一个快捷键。

#!/bin/sh
STAT=`sudo networksetup -getwebproxy Ethernet | head -1 | cut -d: -f 2|sed 's/ //g'`
if [ "$STAT" == "No" ];then
networksetup -setwebproxystate Ethernet on;
/Users/guixing/bin/growlnotify -m "Proxy On";
else
networksetup -setwebproxystate Ethernet off;
/Users/guixing/bin/growlnotify -m "Proxy Off";
fi

growlnotify是Growl的一个命令行工具。

Google的公共DNS服务

Google提供了公共的DNS服务,三金和老黄马上就想到了对CDN厂商的冲击。我看了下Google的Performance Benefits,记一笔。

发生在解析服务器和其它DNS服务器的传输时间,有三个原因。

  • 无缓存。无缓存就要查其它的NS。
  • 无法服务。要查的NS如果过载,就可能发生请求被丢弃或重发。
  • 恶意的流量。DoS,重点是攻击,人为造成第二种情况甚至更严重。

无缓存的情况有一些数据,NS服务器拿到一个无缓存的请求,会导致至少1次的外部NS查询,一般情况会是2次以上。

根据Googlebot的情况来看,平均解析时间是130ms,然而还有4-6%的请求会直接超时,这通常是UDP丢包或服务器无法到达。把丢包,死NS,NS配置错误等因素都计算进来的话,实际的解析时间是300-400ms。

无缓存的情况较难避免,原因有三:

  • internet太大而且还在成长。新用户和新网站都在增长,并不是所有的网站都是那么的流行,所以大部分的请求都是无缓存的情况。
  • TTL太短,这个好象是个趋势,短TTL带来的就是更多的NS请求。
  • 缓存是相对隔离的,NS大多放在LB设备下,缓存是随机的。所以就增加了无缓存的情况。

Google采用了一些方法,如下:
fda0ec58d8eed89ac2ec5173e0b6d342
其中新的东东是这个预抓取!

记一笔keep-alive和cache-control

以前看的时候大多走马观花,补补课,记一笔吧。

  • 对于静态内容在HTTP Header中设置过期时间和最大时间,可以有效的使浏览器避免下载已经下载过的文件。
  • js,css,图片什么的都是静态内容,都应该考虑cache,但是html不是静态内容。
  • Expires和Cache-Control: max-age是资源终身鲜活的Cache控制。浏览器在过期之前不进行资源的鲜活检查。
  • Last-Modified 和ETag则是对资源的一种描述,属于启发式的Cache控制,浏览器在检查之后再决定使用Cache与否。
  • Expires 和Cache-Control: max-age,作用相同,设置其中一个即可,Last-Modified 和Etag也是冗余的设置,设置其中一个即可。
  • 设置Expires,Cache-Control支持率不及Expires。这个值通常设置1个月,不要超过1年。如果不知道过期时间,就设长一点,当发生变化的时候使用URL的指纹。
  • 要考虑到代理服务器的Cache情况,使用Cache-Control的public还是private。通常来说要set-cookie的地方就不要让代理Cache,所以设置为Private。
  • 代理Cache的情况还有压缩与否的问题,有两种方法,一种是把Cache-Control设置为Private,使代理服务器不Cache这些内容。另一种是设置Vary: Accept-Encoding的Header,这可以使代理Cache两种内容,压缩的与不压缩的。
  • 避免Firefox的URL哈希冲突,Firefox的URL哈希算法有8个字符的冲突边界。所以两个资源的URL差异应该在8个字符以上。
  • 设置正确的Vary Header,IE对于设置了Vary头的资源是不Cache的,有例外,Vary头的值是Accept-Encoding和User-Agent的时候可以被IE给Cache,所以要么不设Vary头,要么就对Vary头进行裁剪。

HTTP Keep-alive呢,重点看以下几个文档:

Keep-alive是指在同一个连接中发出和接收多次HTTP请求。优点是:

  • 使用较少的CPU和内存
  • 开启HTTP 管道
  • 减少网络拥堵
  • 在接下来的请求中,减少传输时间。
  • 错误可以被报告但是不关闭TCP连接。

在RFC 2617第47页里,一个用户客户端对任何服务器或代理不能维持2个以上的连接。代理可以维持2xN个连接。

IE6和7使用 2个长连接,IE8使用6个,都是在60秒之后超时。
Firefox的长连接都是在300秒超时,同时使用的连接可以自定义(按每主机或总计),Opera与Firefox类似。

卧底经济学的小记(1)

  • 还价能力来自于稀缺性。

    稀缺有两种,一种是自然稀缺,另一种是人为稀缺。人为的通过政策和法律限制”边际”资源,造成资源的稀缺,进而提高了还价的能力。

  • 如果1蒲式耳粮食值1美元,那么5蒲式耳粮食就是5美元的地租。如果1蒲式耳粮食值20万美元,那么5蒲式耳粮食就是100万美元的地租。

    现行的货币系统,因其本身做为一种商品,其价值的不稳定,对普通大众甚至是有一定的欺骗性。许多人认为货币是稳定不变的,至少认为变化不大,而实际上货币是有时间成本的,是在不断贬值的。当存款的利率低于当年的通货澎胀率,那么把钱存在银行实际上是在赔钱。实际这个例子是在说羊毛出在羊身上,地租的差异是因为地皮的差异,但是地租的高低则是议价的结果。而且地皮的差异并不是一承不变的,比如买房的时候周围还没有地铁,但是后来地铁新建之后就改变了地皮与地皮之间的差异。