ZeroNet 将会成为下一个失败品

ZeroNet 最近很流行,特别是在中文用户群中。ZeroNet 是一种分布式的互联网,它不像传统互联网那像需要一个一个物理的服务器来架设网站,而是每一个用户都可以作为服务器,储存一些数据并且分发给其他用户。具体的介绍不多说了,一搜一大堆,就来说说为什么它一定会失败。

我大概在 2001 左右第一次接触到网络,从那时候开始,就不断有新闻提到分布式计算,或者用现在流行的词来说,“去中心化”的系统。而随着时间的推移,这些系统没有一个成功的。

印象中最早的一个是寻找外星生命的项目 SETI@home,这个项目目前还活着,并且是已知的所有分布式计算项目中最活跃的一个。据今年一月份的统计,SETI@home 有超过 500 万名活跃用户。这个数字看上去很多了,但是呢,微信的每日活跃用户也超过了一亿。也就是说,每 100 名微信用户才有一个参与的,你的好友中可能都没有一个人听说过这个项目。

当然,分布式项目中也有参与人数多的,比如比特币,2013 年火暴的时候妇孺皆知。但是呢,今年一月份比特币核心开发者宣称比特币失败。而最近一次的炒作中,90% 以上的交易量发生在中国的比特币市场,足以证明一个“分布式”项目的失败。

ZeroNet 是最近一个分布式的尝试,但它也逃脱不了失败的命运。

原因很简单,没有商业公司支持。之前提到过,没有商业公司支持的项目,不可能胜过一个有商业背景的项目。而一个商业项目,没有必要完全去中心化。

或许你会不同意,看,BitTorrent 项目就活得很好,大家都在用 BT 下载,而它本身也是由一家同名的公司支持的。对,BT 一个非常流行的技术,但是,你听说过迅雷离线下载么?虽然现在下载依然依赖 BT 种子,但一般我的做法是把种子下载下来,传到迅雷上去,然后再通过迅雷离线下载下来。迅雷的服务器提供了比 BT 节点快得多的速度,完全没有必要使用纯粹的 P2P 下载。我相信大多数网友(至少是中国网友)都是这样做的。对 P2P 特性的依赖已不复存在。

不要提 Tor,Tor 并不是分布式项目。尽管 Tor 有自己的暗网(Darknet),暗网中的每一个网站和互联网的网站是一样的,都是依赖于一台(或几台)中心服务器,没有分布式的特性。

回过来说说 ZeroNet。ZeroNet 的愿景是发展出一套和互联网平行,完全分布式的网站系统。这个系统中每个网站都分散在各个网友的电脑中,只要有网友在线,网站就永不下线。

然而,这个系统有一个致命的问题:成本。目前 ZeroNet 的存储策略是这样的,当你访问一个网站的时候,就是把这个网站的所有内容下载下来,然后把这些内容重新分享给新用户。从冗余的角度来说,一个网站有多少用户,就存在多少份数据冗余。当然等到 ZeroNet 发展壮大了,必然不会每人都存一份。我们就假设冗余量是 1000,这个数字其实很保守了,考虑到用户的平均在线时间、地域分布等,要保证良好的访问速度,实际的数字肯定会比这个高。然后我们来看一下互联网的总量是多少。有消息说,Google 一家的数据量是 5EB,就是 50 亿 GB。而互联网网民总数目前是 30 亿左右。以 1000 冗余量存下 Google 所有的数据,需要平均每个人 50 / 30 * 1000 约为 1000 GB 也就是 1 TB 的硬盘。现在一个 1TB 的硬盘售价大约是 50 美元(民用硬盘的价格,商用的更贵),30 亿人人手一个,总价值约为 1500 亿美元。就算一块硬盘的平均寿命是五年,那么一年的平均费用就是 300 亿美元。

作为一家商业公司,Google 花 300 亿来运行它的数据中心,自然是一点问题都没有;然而对于一个非赢利项目,它能用什么方式说服全世界的网民帮他支付这个帐单,我很好奇。实际上,中心式存储的成本反而低,Google 一年花在数据中心上的钱大约是 120 亿美元

如果存不下这么多内容,ZeroNet 就发展不出那么大的规模,没有那么大的规模,如何吸引用户使用。想想现在的潮流,视频、直播、VR,哪一个不需要大容量的存储。没有这些日常所需的娱乐内容,ZeroNet 的发展方向只会像暗网一样,成为法外之地,大量不入流、违法、无聊的内容,久而久之,就没有用户了。

禁用 NUC 的快速启动

Intel NUC 有一个 BIOS 设置,叫快速启动(Fast Boot),我一开始不知道是什么东西,想想“快速”那就快速呗,于是就勾上了。之后就发现,再也进不了 BIOS 设置了。

于是我就知道了,这个“快速启动”,就是指开始的时候跳过 BIOS 选项界面,直接进入系统。而如果想再次进入 BIOS 呢,就要先把“快速启动”禁用掉,然后再开机按 F2。

关闭“快速启动”的步骤在 Intel 官网有写,大致是这样的:

  1. 先完全关闭机器,不能是休眠之类的;
  2. 开机的时候按住开机键不放,直到听到三声“哔”的声音,然后放掉开机键;
  3. 这时“快速启动”已关闭,可以按 F2 进入 BIOS。

我一共听了十次共 30 声“哔”…………

然后继续搜了一些其它资料,一位 Intel 员工在一个贴子里透露了一种暴力的方法:

  1. 先关机;
  2. 按下开机键,电源灯亮了之后,直接拔电源;
  3. 然后把电源插回去,开机,就可以按 F2 进 BIOS 了。

好吧,Intel 你赢了。

第六代 Intel NUC 安装体验

两年前购入了第一台 Intel NUC,一种迷你型的台式机,作为家庭娱乐用途。当初只考虑到看本地影片的需求,而没想到网络视频。这台机器可以勉强播放本地的 1080p 视频,但加上了网络传输之后就力不从心了,主要表现在它只能要么下载视频,要么播放视频,于是每看个几分钟就需要停下来等缓冲,体验很不好。

于是我又买了一台新的,NUC6i5SYK。这台机器带了最新一代的 Core i5-6260U CPU,性能肯定富裕了。

具体的配置如下。基本上算是一步到位,可以看很多很多年的视频了。

  • Intel® NUC6i5SYK
  • Kingston Technology HyperX Impact 8G * 2
  • Samsung 950 PRO 256G

硬件的安装很简单,就不详细说明了。底板拆下来之后就可以看到内存和硬盘的插槽,有防呆设计只有一种安装方式,不会搞错。如下图,上面是 M2 硬盘槽,底部是两条内存槽。

硬件组装完毕之后,开始装软件。和上次一样,继续装 Windows。可以在微软官网下载到 ISO 文件,解压到一个可以启动的 U 盘中就可以准备安装了。在安装之前,还需要准备另外一个 U 盘。

使用另一个 U 盘的原因,通俗一点来说,是这一届的开发人员不行 -_-。根据 BIOS 的版本不同,这个 NUC 有一定机率认不出 M2 接口上的设备,也就是硬盘。在安装系统之前升级到最新的 BIOS,需要把新的 BIOS 文件复制到 U 盘上,然后使用 U 盘启动。我一开始也以为这是一个简单的文件复制操作,但实际上并不然。开机按 F7 进入 BIOS 升级模式之后,NUC 会把 U 盘的引导信息覆盖掉,然后重启再进行 BIOS 升级,于是之前制作 Windows 启动工具就没有用了。

当然你可以先升级 BIOS,再用同一个 U 盘制作 Windows 启动盘。如果资源足够丰富,用两个 U 盘可以加快安装速度。

另外,Windows 10 还有一个小小的问题,它认不出这个 NUC 的无线网卡。如果打算装完系统直接使用无线网络的话,U 盘里还需要备一个网卡驱动程序。网卡驱动和 BIOS 文件都可以在 Intel 官网下载到,这里就不详述了。

把上面提到的东西都准备好之后,安装 Windows 还是很方便的,而且 SSD 速度非常快,大概 10 分钟就可以看到桌面了。

具体的评测过段时间再发。

通过 Varnish 使 WordPress 静态化

WordPress 常常被人诟病说加载速度慢,主要原因是每一次打开页面都会查询数据库,即使每次查询的结果都是一样的。WordPress 原生不支持缓存,但可以通过插件支持,比如 Super Cache。我用过一段时间 Super Cache,它本身是一个很好的插件,但协作性不强。它只能加载 WordPress 原生的内容,而我需要的是缓存经过 PageSpeed 优化过的内容,从而达到完全静态化的效果。

曾经有一段时间 KeyCDN 的表现不理想,而 Google CDN 还没有开放,我就自己搭了几台缓存服务器,来缓解源站的压力。这几台缓存服务器是通过 Varnish 实现的。当然用 Nginx 也可以,但是 Nginx 的缓存失效(Purge)功能是收费的,而且部分平台上还是自己编译。于是我选了 Varnish。

Varnish 可以做到的事情

  • 根据 URL(或其它参数)的不同来选择不同的缓存策略;
  • 修改 HTTP 请求和响应的头部内容;
  • 设定缓存时间,时间到了自动失效;
  • 可以通过一个特殊的 HTTP 请求来让一个(或一些)缓存立即失效;

好,接下来就开始配置服务器了。

安装 Varnish

以 Debian 为例,最新的 Varnish 版本是 4.0:

配置 Varnish

先创建一个新的配置文件,比如 /etc/varnish/leonax.vcl,内容如下。其中比较重要的就是三部分:vcl_recv、vcl_hash、vcl_backend_response,可以根据自己的实际情况来调整。必要的注释已经附在相应的代码旁边了。

然后来检查一下配置文件写得对不对。如果配置正确,这段命令会输出一大段处理过的代码;如果有问题,则会输出具体的错误信息。

接着,在 /etc/varnish/default.vcl 文件中,可以找到如下一段内容:

需要把 -f 的值修改为刚才创建的配置文件地址。

重启 Varnish

配置 WordPress

WordPress 的页面需要刷新的情况,无非有三种:新文章、新评论和配置修改。配置的更改一般频繁,我的做法是重新配置之后,手动重启一遍 Varnish,这样最干净。而新评论的情况,刚才在 Varnish 的配置文件中已经处理了。于是我们现在来处理一下新文章的情况。

以下代码需要写在 WordPress 中,比如 functions.php:

收工

做完以上这些,你的站点就可以达到像本站一些的加载速度啦。

Google 对新品牌的迷恋

品牌效应,有时候比产品的质量本身更重要。品牌常常给人带来一些心理暗示,比如 iPhone 总是高大上的,而安卓就是烂大街的地摊货,尽管 iPhone 也有低端产品,安卓也有旗舰。当一个牌子做坍了之后,更换一个新品牌可能会有意想不到的改观。比如微软在 2009 年的时候把 Live 品牌强行换成了 Bing,虽然换汤不换药,但市场占有率从最初的不到 10% 到现在稳稳站上 20%,Bing 的品牌效应功不可没。

有成功的案例,自然也有失败的案例,比如 Google 在社交领域的数次尝试,Orkut、Google Buzz、Google Friend Connect、Google Wave 和最终的 Google Plus,没有一个成功的。而 Google 在聊天工具方面,也有着同样的困境。

最初的一款产品叫 Google Talk,简称 GTalk。一开始的想法很宏大,兼容 XMPP 协议,可以和其它的聊天工具互通。做了几年之后发现没什么起色,于是扔掉了 XMPP 协议,并且改名为 Hangouts,开始自己和自己玩。

Hangouts 做得很大,它兼并了 Google Voice 可以像普通手机一样打电话,在 Android 手机上还成为了默认的短信应用,更不用说在 Google+ 和 Gmail 中的集成了。几乎任何地方任何时候,想用 Hangouts 的时候就可以用到。

不知哪根筋抽住了,Google 后来又推出一个短信应用叫作“Messenger”,这是一个 Android 手机独享的应用,也可以发短信,打电话,群聊 -_- 在手机上和 Hangouts 除了图标不同之外几乎一模一样。不用说 Android 的用户了,就连公司员工,看到这个消息的时候也是一脸懵逼。

事情还没有结束,上周的 Google I/O 大会上,通信部门的老板(对,我们还成立了一个专门的通信部门)激动地宣布,我们又做了两款应用,Allo 和 Duo,一款用来发短信,一款用来打电话……好吧,Google 自家的聊天应用快占到一屏了。

如一开始所说,不同的品牌可以带来不同的客户群。比如 QQ 和微信,在 QQ 越来越臃肿,自己都不堪重负地出了 QQ 精简版的时候,腾讯果断抛出了微信。最初也有很多人不理解,但事后被证明微信是一个成功的典范。究其原因,微信最初主打的精简,速度快(当然现在也不精简了,大概可以改名为巨信),并且当时还有大量的 MSN 用户不屑与非主流为伍,不肯入 QQ 的门,微信正是看准了这部分用户群,站稳了立足之地。

但是 Hangouts 不一样,虽然它也是一个大而全的应用,但终究没有跳出聊天工具的范畴,你不能用 Hangouts 购物,也不能用它来看朋友的时间线。如果这些基本功能都要细分,那我们的手机上至少得有几百个应用,才能满足日常所需。

现在好了,Google 有了四个聊天应用(算上新出的 Space 的话有五个),正好占满了手机屏幕最下面的快速启动栏,视觉效果很震撼,真要用的时候还得想半天,到底开哪一个。

当然对于墙内的用户来说,这些都不是个事,这些应用根本不存在。就连 Hangouts 现在都没在中国区上架,更别说其它的应用了。眼不见为净,你们爱怎么玩就怎么玩吧,我们继续用微信。

启用 CloudFlare 作为主 DNS 服务器

之前写过一系列文章介绍自己搭建 DNS 服务器的方法,我自己也这么用了一段时间。效果很好,DNS 解析一直都没出什么问题。但是这个自建的 DNS 服务器却成了最容易受攻击的一环。

博客的 HTTP 服务器躲在了 Google 的负载均衡服务后面,几乎不会被攻击。而 DNS 服务器却没有这一层保护。不知道为何,对于 53 端口的负载平均我一直都没有成功配置出来。于是就一直在使用裸机作为 DNS 服务器。所幸的是,一直以来也没有受到过攻击。

实际上我一直在等 Google 的 Cloud DNS 提供自定义域名的功能,但是这个新功能死活不开放给公众使用。我也没什么办法,纠结了一会之后,就转投 CloudFlare 了。

虽然 CloudFlare 是一个 CDN 提供商,但它也可以配置成只做 DNS 解析,而不用于 CDN 的方式。CloudFlare 提供的 DNS 服务器使用了 AnyCast 技术,看上去没有被墙,可以正常解析。并且它家也提供了 DNSSEC 机制,可以从一定程度上降低 DNS 劫持的风险。

从今天起新的 DNS 设置已完全生效,本博客可以全面抵挡任何类型的攻击。要练手的同学可以试一下。

Google Cloud CDN

Google 终于推出了自己的 CDN 服务了。去年 12 月份发布了 Alpha 版本,只接受申请试用;而这个月正式升级为 Beta,大伙都可以用了。于是我就又做了一回小白鼠。

之前一直在用 KeyCDN,但是 KeyCDN 的一个弱点是它依然使用 CNAME 来转发流量,而 CNAME 很容易被屏蔽。而 Google 的 CDN 用的是 AnyCast,只需要解析一次 DNS 即可访问,这可比 CNAME 要强壮多了。

除此之外,CDN 的抓取走的是 Google 的内部网络。这个网络有多快呢?据 Google 博客介绍,单机的网速可以达到 10Gb/s 以上。这样的 CDN 性能要远好于任何外部的 CDN。

于是我毫不犹豫地切换了过来。有兴趣的朋友可以对本站测个速。