delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

17 Nov 2009

portsnap镜像的另一种实现方法

FreeBSD 5.5和6.1开始内建了 portsnap,portsnap是一种新的 ports 套件同步机制。

与传统的 cvsup 更新方式相比, portsnap 有一些优越性:

  • 对于经常进行更新的情况,portsnap很快:portsnap包含索引和具体的ports两部分,在更新的时候它首先会更新索引,而具体的更新则是下载两次索引描述的文件之间的差异,因此可以大大节省带宽。
  • portsnap有数字签名:cvsup并不包含任何加密或数字签名的机制,而portsnap的公钥则是通过光盘发给每一台机器的,相对来说安全性要好的多。
  • portsnap使用HTTP协议:通常,企业防火墙并不会拦截HTTP。

早先,架设portsnap镜像的方法比较复杂。由于portsnap的设计,架设portsnap镜像所产生的流量,在通常情况下大约会是仅做portsnap操作的3000倍左右。

之前听lwhsu提到了台湾那边的镜像所采用的方法,值得借鉴:

由于portsnap使用的是HTTP协议,而数据集相对较小,因此,实际上可以把这些内容全部作为反向代理放进内存。


Archived: 2 Comments

snnn | November 22, 2009 10:12 PM

可否详细介绍一下portsnap呢?做应用软件的时候经常要为它提供更新服务,我觉得portsnap至少就是个很好的例子告诉我为什么要这么做不那么做。 虽然已经用了很久了,但是我对它的具体实现方式一直不了解。比如当FileA改变的时候,它下载的是新的文件,还是两个文件之间的二进制差异?这个差异是以什么样的格式描述的?

hshh | November 26, 2009 1:21 AM

早就尝试过这样的方法, 瓶颈在于国内外之间的链路, 因此意义不大. 反向代理第一次下载的时候一样慢的难以忍受.