说说参观的微软数据中心

上个月有机会参观了位于华盛顿州东部的微软数据中心。最直观的感受就是,先进的现代数据中心,已经不是一直停留在我脑海中那个“机房”的样子了;外貌改观的背后,是管理效率的巨大提升。

单是数据中心选址所考量的因素,就已经让我这个外行人不明觉厉。
前一段时间天津滨海新区发生爆炸,有新闻报道天津滨海爆炸致国家超算天津中心受损 “天河一号”关机。看到这样的新闻,让人不禁质疑超算中心这样重要的基础设施选址怎么如此草率。云计算时代的数据中心对国计民生的影响远超过超级计算机,无法想象未来的某一天,一个数据中心被突然炸掉会带来什么后果。从安全到角度来说,数据中心最好人烟稀少远离闹市,这样不太容易被意外所波及。可是又不能太远,否则距离带来的网络延迟会影响其应用。我参观的这个数据中心就位于这样恰到好处的位置:华盛顿州中东部,距离西北地区人口稠密的西雅图波特兰地区三四个小时车程,当地人口稀少周围一片荒漠。除了恰到好处的位置,当地还位于哥伦比亚河附近,阳光充足,常年干旱少雨,一派荒漠景象;哥伦比亚河从荒漠中穿过,水量充沛,造就了沿河的沙漠绿洲,也提供来充足的廉价电力。Google map的这张照片很好的反应了当地自然状况。
对数据中心来说,固定资产投资之外最大的成本就是电力支出,廉价的电力显然很有吸引力。据说数据中心的电价是1-2美分一度,实在是太便宜了,我们家的电价可是要1毛多的。除此以外,当地政府还提供税收方面的优惠政策。
如果你觉得考虑到上述种种因素来选址就算煞费苦心,那就错了。通常的数据中心都会考虑这些(我国政府领导拍脑袋订下来的除外)。要成为一个现代化的数据中心,还要走得更远。

大家都知道降低电力成本是核心,那么问题来了:除了找电价便宜的地方,我们还能做什么来降低电力成本呢?数据中心的电力消耗主要分成两部分,一部分是主机消耗的,比如主板,CPU,内存,硬盘的耗电;另一部分是制冷的耗电,比如风扇,空调。衡量数据中心效率有一个指标叫能效比,就是数据中心总耗电与主机耗电的比值。比如这个数据中心的耗能比是1.07,就意味着每用1.07度电,有1度都被主机消耗了,只有0.07度用于制冷。
在复旦读书的时候,有一年室友找了份兼职去逸夫楼的高性能计算中心值班,我陪着一起去了几次。当时印象特别深刻,机房里一排排机柜整齐摆放在,值班室也在大厅里,用玻璃墙和机柜隔开。机房里的空调永远是恒温25度,特别舒服,可惜有特别大多轰鸣声,无数的风扇在转。空调和风扇一起保证着机房的正常运行。
虽然人类已经想了各种办法来提高空调和风扇的制冷效率,但是想想就知道这样的数据中心效率不会太高。要保证室内的恒温,制冷的目标不是主机而是整个室内空间,这其实是巨大的浪费。另外,为什么一定要让压缩机拼命运行来保证恒温呢,与其把热空气温度降下来,不如直接把热空气排走换来冷空气。抽气扇可比压缩机的效率高得多。这个数据中心正是实践了这样的想法:首先不修建实体建筑的“机房”,所有的主机就存放走一个个集装箱一样的空间里边,集装箱直接暴露在外界。这不但节省了没必要的建筑成本,也不必煞费苦心为一个巨大的建筑物保持恒温。然后,在每个“集装箱”内部,没有空调也没有风扇,集装箱把干燥的空气从一侧吸进来,混合冷水来增加空气到湿度,然后把混合后的空气向整排的主机吹去;空气穿过主机带走热量,再被另一侧的抽气扇抽出来排到集装箱外面。冷空气混合了水汽之后比热容增加,吸热能力很好;而被主机加热的空气不需要再花大力气制冷,直接排出去就是了。

这是数据中心的卫星图,实际样子请自行脑补。
Screen Shot 2015-09-13 at 12.02.26 AM
为了满足这样的设计要求,数据中心选在了气候干燥年均日照时间很长的荒漠地带。由于气候干燥,抽气扇吸进来的空气湿度极低,特别适合混合冷水产生湿冷空气。如果是在潮湿闷热的热带地区肯定是不行的,吸进来的空气已经湿度极大温度很高了,指望它继续吸热带走主机产生的热量是不太容易了。

除了能源效率现代化的数据中心还需要极高的运营效率。
这里管理着几十万台主机,即使每台主机的可靠性都在99%以上,平均下来每天出现百十台的故障机还是很平常的事儿。如果每台故障机都要立即修复的话,那雇佣上百人每天在各个机架上爬上爬下拆机器装机器恐怕也忙不过来。所以数据中心通常都有专门设计的软件系统来应对硬件故障。当某台主机发生故障时,可以很快的把应用程序迁移到另外的主机上继续运行,这样维修人员就不必立即去修复每一台故障机。另一方面,维修人员会监测各个机架,挑选故障机数量最多的机架做修复。一次修一批比东修一台西修一台要划算的多。这样的设计在简化了安保的设计。由于主机全部都在一个个狭小的集装箱内,而非与进进出出的工作人员共处同一建筑物内,因此就免除了一道道安全门扫描仪的设置,只要用密码锁把集装箱门锁好再装上监控摄像头就好了,不用担心去数据中心送外卖的顺便溜进机房偷数据啦。其实即使真的溜进机房偷走了一块硬盘也没什么大不了的,现在的软件系统都是分布式的文件系统,一块单独的硬盘上只是存储了某些文件的某些部分而已,如果不知道这些部分是如何组合在一起的,根本就没有用。
由于采用了这些设计,整个数据中心只有二三十个人负责日常运行,降低了人力成本。

每次看到工程师对不断追求完美,对事物做近乎极致的例子,敬仰之情就有如滔滔江水。
其实我参观的这个数据中心最多也只是代表了当代的先进技术而已,离黑科技还差得远。据说IT巨头们已经开始考虑更疯狂多想法,比如把数据中心建在海里用海水制冷,或者修在两极地区等等。期待这些黑科技为整个行业带来更大的变革。

看到这样的数据中心,我想应该没有理由去质疑云计算的未来。几十万台机器,只用二三十个人管理,能源利用效率极高,而电费又只有一两美分;如果把这几十万台机器交给每个大大小小大企业自己去维护,又需要花多少成本和人力?两者孰优孰劣不言自明。只是凡事都不会一蹴而就,新事物到来的时候总会有各种质疑的声音。

在Apache+Django下启用客户端证书认证

这两天在折腾这个问题,google中英文的介绍都只提到一部分,所以决定写一篇blog讲一下整个配置过程,全当做笔记。

SSL连接(HTTPS)是普遍使用的安全的HTTP连接方式,它通过证书认证的方式来保证访问安全。通常的方式是:在服务器端设置一张证书,证书由具有公信力的数字证书认证机构(CA)办法给网站对应的域名;用户访问网站的时候浏览器首先会检查证书,既检查证书的合法性(签发机构可靠),也检查证书的对象和网站域名是否匹配(比如证书发给www.foo.com但是用的证书是发给www.bar.com的,那证书很可能是偷来的^^)。如果检查出错,浏览器会询问用户是否继续访问,即使继续访问也会在浏览器地址栏显示一个警告。举个例子,12306购票网站的证书就是它们自己生成的,不是CA颁发的,所以访问12306就会看到
Screen Shot 2015-07-15 at 5.24.03 PM

除了认证访问站点的合法性,这张证书还会用来对传输的数据进行加密,这样攻击者就没法通过网络抓包的方式轻易得到用户的账户密码等敏感信息。--虽然12306到证书是自己签的,仍然可以用来加密传输数据。

除了上述服务器端证书认证以外,有时候还会有额外的一步称为客户端证书认证。如果某个站点或某些URL并不希望所有的人访问,可以在建立连接的时候要求客户端也提供证书,只有证书在白名单之列的客户才可以建立连接。这种认证方法在前端并不常用,因为网站给每个注册用户发一张证书很困难,用户保存这张证书也很麻烦。但是在后端比较常用,比如网站的web服务器和后台其他服务器之间进行数据通信的时候。

现在就假设在Apache上运行了一个Django的虚拟站点,这个站点提供一些Rest API,我们只希望拥有证书的客户端能够调用这些Rest API,不对外开放。
设置过程分为以下几步:

1. 生成证书
对于服务器端证书,通常需要从CA去申请,申请的证书和域名是绑定的。如果服务器只是内部使用,并不暴露在Internet下供大家访问,也可以自己生成。客户端证书可以自己生成,并只颁发给信任的客户端使用。因此这里略去向CA申请的过程,只讲怎么自己生成:

a.生成一个host key

b.用这个host key创建一个证书申请

c.由前两步得到的key和证书申请产生一张证书

二三步也可以合成一个命令

用同样的方法可以生成另一张客户端证书。如果情况再稍微复杂一点,你有多个客户并且需要一一区分它们,那需要给每个客户单独生成一张证书。这时通常的做法是:先生成一张自己的CA证书(就是自己做自己的权威机构),然后再用这张CA证书分别生成多张不同的客户端证书。关于这一点,我看到一篇很好的reference,可以参考。

2. 在Apache上配置使用SSL
先贴出一个完整的虚拟站点配置文件

a.服务器端SSL
打开服务器端SSL主要由这几行配置指定:

b.客户端SSL
客户端SSL认证主要由这几行配置指定:

其中SSLVerifyDepth的含义是在证书链中检查的深度。证书是层层签发的,最顶层是CA,因为这里使用的证书都是直接由CA签发,因此是1就可以了。

c.设置Apache把证书信息传给Django应用程序
通常除了在Apache上设置,我们很可能还需要在Django应用程序里根据证书信息做更细致多处理。例如根据证书签名判断访问来自哪个客户,每个客户可能会有不同的权限,看到不同的东西。有两种方案:一个是通过SSLOptions +StdEnvVars的设置把证书信息放进环境变量,再在Apache调用wsgi.py的时候传递过去。这个方案在网上看到有人提到,但是我不知道怎么在wsgi.py中修改request object;如果通过全局变量或者环境变量的方法传递信息,那只能处理单个证书的情形,因为全局变量只能hold一份信息;另一个方案是通过RequestHeader的设置把证书信息加到HTTP request header中去。这个方案经过尝试很好用,示例如下:
在view收到post请求的时候,通过检查存放在request.META中的header信息就可以知道证书是颁发给谁的,之后就可以针对不同的人做不同的响应。

3. 浏览器访问
当Apache,Django设置好之后,就可以通过浏览器进行访问了。首先需要在客户端的电脑上安装客户端证书,然后在访问的时候浏览器会弹出窗口,这时选择对应的证书就可以打开网站了。例如,在Chrome中,选择settings-show advanced settings就可以看到
Screen Shot 2015-07-15 at 6.43.55 PM
然后在访问的时候选择刚才安装的证书
Screen Shot 2015-07-15 at 6.44.57 PM

安装证书的时候需要提供同时包含公钥和私钥的文件,pfx或者p12格式。之前我们提到生成证书的过程生成的是独立的公钥和私钥文件。可以通过以下命令做转换

4.Python访问需要客户端证书认证的Rest API
Python跟http相关的模块比较混乱, urllib2, httplib2, requests, pycurl都可以用来访问RestAPI,但是使用起来的复杂程度各不相同。有兴趣可以参考这篇blog,它对这几个模块访问RestAPI的方式做了详细的比较。总之,结论是requests用起来很方面。
requests天然提供对客户端证书认证的支持,直接这发送请求到时候带上证书的路径作为参数就可以:

上面的cert参数可以是一个指向pem格式证书的字符串,也可以是一个tuple,分别包含cert和key的路径。
requests的一个缺点是它只支持pem格式的证书(不包含密码),但是通常我们得到的都是倒出时包含密码的证书,比如pfx。把pem放在机器里看起来不是很安全。Github上这个open issue也有讨论。
可以通过以下命令把pfx转成pem格式:

这就是end-to-end全过程,大功告成。

海外用户观看视频的正确姿势

刚才看到友人前几天写的一篇博文:海外用户观看美剧的正确姿势,突然就想哈哈大笑。原来大家都在想一样的事情。

先借一张图来说一下这个思路:在东亚找一台云主机下载,然后上传到GoogleDrive,当然也可以是OneDrive或者AzureStorage, whatever。然后在家里通过GoogleDrive/OneDrive同步,或者链接到AzureStorage访问。
downloadx800_jpg_pagespeed_ce_OUNfE-4oh7

友人在瑞士,据说当地法律并不限制个人用户下载盗版内容,所以这个解决方案没什么问题;可是放到其他大多数资本主义国家可能就不太行了。因为上述操作实际上仍然涉嫌通过云存储上传/下载盗版内容。当然上传的行为发生在东亚某地,所以可能没有法律限制,但是下载行为却真实发生在腐朽的资本主义境内。

而我最近考虑的另一个类似思路是:在东亚某主机上把下载的内容文件分割成很多碎片,每个碎片都是一段没实际意义的比特流,然后再把各个碎片分布上传到不同的网络存储上。这样不存在从任何地方上传或者下载盗版内容的操作,因为上传和下载的都只是一段比特流而已。只有自己知道具体的算法来分割和组合这些碎片。只有这个算法本身是属于盗版的,不过获得这个算法的过程发生于东亚的某台云主机上。
其实跟p2p软件的思路很像:p2p软件的每段比特流下载都不是完整意义的盗版。可是p2p在传播比特流的同时传播了组合比特流的算法,所以是非法的。
有版权方面的专家提供点专业意见么

ThinkPad X1的可怕体验

从06年买第一台笔记本开始,就逐渐成为了笔记本的重度用户,家里一直都没有台式机了。在移动终端日渐发达的今天,如果在家大多数时候仍然习惯选择使用笔记本。

我本来也不是数码产品的重度粉丝,没什么好说的。无奈前两周从公司领了一台X1 Carbon Gen2回来,在度过了不适应到两周之后就突然挂掉了,要换主板至今还在等零件——顿时对ThinkPad失望到极点。

X1之前先是用了很久的X220 Tablet,除了觉得Tablet这个特性基本无用之外,还是非常喜欢的。传统的ThinkPad键盘,传统的小红点和鼠标左右键都特别顺手;质量也没的说,特别皮实耐用。然后自家买了一台X230来用,性能质量也都没有问题,可惜键盘换成了巧克力式的,手感略差。这台230是机械硬盘,用起来一度觉得很崩溃,直到有一天换了SSD之后才发现它也可以如此流畅。

然后就是X1了,拿到手的第一天就很崩溃:

  • 小红点手感变差。看上去很劣质的样子,似乎随便摇几下就会掉下来。机械式的左右键取消了,变成一块儿更大面积的触控板——我原来就是直接把触控板禁用的。
  • 大小写切换键CapsLock不见了,那个位置被两个个头很小的Home/End取代。想要输入大写字母有两个方法:按Shift+字母组合——我知道有人很习惯这个,可是我一点也不喜欢;或者快速双击Shift键,这时候Shift键上会有一个小LED灯亮起,表示切换到大写——凭什么要我双击。
  • 跟随而来的另一个不便就是Home/End被挪到了CapsLock到位置,我写code的时候经常用的两个键就这样突然从右手位变到了左手位,还缩小了很多。于是错误的情况经常发生。
  • 最上面一排功能键F1-F12连物理键都没有了,变成了一排触控点,而且可以切换,一会儿是控制音量亮度,一会儿是打开麦克风,一会儿又变回了F1-F12——尼玛我debug的时候一不小心屏幕就暗得看不见了,这是什么体验。
  • 数字1左边的~键被挪到了右下角,那个位置成了Esc。。。其实不是什么大事儿,可是我天天要输好多遍的password里边偏偏有个~,在一天输错了数次密码之后,我只好选择改密码。

说来说去发现其实就是在吐槽键盘。对大多数笔记本来说,性能都不是大事儿:差异无非是键盘体验,重量,续航,屏幕。Intel推出超极本之后重量不是大事儿,而windows笔记本的续航都不怎么样;至于屏幕嘛,那就继续吐槽一下这个高分屏体验吧。
确切的说这不是X1的错,所有的windows笔记本上高分屏体验都很烂。我一直不太在意屏幕,1366×900也照样用得不亦乐乎,直到拿到X1看到所有的图标都变得咪咪小,才恍然大悟原来这就是高分屏啊。像小白一样去百度知道学习如何放大显示。尽管放大之后系统本身和微软的主流程序都可以基本正常使用了,但是仍然有那么些想死的时候:

  • 比如远程到另一台电脑之后,远程桌面上的图标忽然变得咪咪小,不能放大。
  • 比如截屏之后粘到outlook的邮件里,我擦怎么突然图片变得巨大而模糊来——我猜可能是outlook放大显示的问题,可是我真的不知道别人收到邮件以后会看到什么样的图片。
  • 比如打开某些非微软多程序的时候,要么死活不能放大,要么放大完丑得不想再看到它。这其实也不完全是微软的错,为了兼容各种原来的应用,高分屏没办法做到完美体验。可是我是用户,我干嘛要理解微软的苦衷呢。用了Retina的MacBook Pro,才知道什么是完美的屏幕,舒服的让人不能自拔。
  • 最后不得不提一下品质。其实我是不太相信品质这个词的,大家的笔记本都是一样的流水线下来的东西,能有多大差别的,我当年买过低端的明基本,戴尔本,东芝本,都用得好好的没出过任何状况。可惜这台X1从一开始就觉得不太好,系统稍微忙一点风扇就开始疯了一样的响;有时候已经sleep了还会莫名其妙的风扇狂转;用了两周之后就彻底崩溃进不了系统了,IT也没告诉我具体原因,只说要换主板了。这次我终于相信品质是有差别的,或许X1 Gen2的设计,尤其是散热方面是有缺陷的。

    既然提到了MacBook Pro,就顺便比较一下:重量虽然比Air重很多,但是男士用起来完全没有问题,仍然觉得很便携;续航没有10小时也有7,8小时,没有具体计算过但是很少为没电发愁,可以专心使用一整天是件很开心的事儿;屏幕如上所述;键盘手感略差,不如巧克力式的ThinkPad键盘,感觉主要是键程短,更不如X220之前点传统ThinkPad键盘。至于苹果的系统,比windows难用很多;好在现在的应用大都是基于web的,不太关os的事情。

    吐槽完毕。总而言之,怀念当年ThinkPad带来的美好体验,终于被Lenovo折腾得差不多了。所谓对创新就是三天两头把键盘的样式布局变一变,而且越变越差,把这些最经典多东西统统变没了。如果不是工作原因,我已经基本不需要使用windows了,Mac本上有非常好的体验。如果说windows笔记本还有什么希望的话,我觉得已经不在ThinkPad而在surface了。在商店里数次把玩surface都感觉不错,完美对移动办公选择。希望surface 4会进一步改进,到时候入手一台继续比较。至于ThinkPad,就把这些年来的美好体验当作对经典的记忆吧。

新玩具

好久不见。
发个最近搞的新玩具出来:树莓派Raspberry Pi. 一个ARM架构的小主机,只有名片盒大小。我买的这一款是model B,900Mhz A7架构的cpu, 1G的内存,有4个USB接口,hdmi接口。。。售价35美元。最近刚刚出了model B+型,配置更好价格不变https://www.raspberrypi.org/products/raspberry-pi-2-model-b/

树莓派最初是设计来作为廉价电脑给小朋友们学习用的,后来逐渐在geek中流行;最近很火的IoT概念更是让树莓派出现在各种奇奇怪怪有意思的场景中。它可以很容易的跑linux,有专门为它定制的Raspbian发行版--听名字就猜得到是基于debian的。

于是,最容易想到的应用就是拿它做一个高清播放主机,播放在线视频或者做bt下载播放机都不在话下。只有名片盒大小放在客厅很合适。除此以外还有更多好玩的应用,比如见到过有人拿kindle作为ssh的客户端,远程到树莓派的主机上,这样就可以实现在户外一边野营一遍写code了,配上太阳能电池或者移动电源在荒郊野外用上几天不成问题。还有更多的人用它来控制其他设备,做IoT。比起单片机来说它功能强大很多,可以做更多的事情;而且基于linux系统,可以轻松的用python,java这样的高级语言来代替汇编或是c,开发速度快很多。还有人拿很多很多个树莓派来搭集群,虽然性能肯定一般,但是能花几百美元就体验一下搭集群的感觉看来也不错哦。

我也没有想好可以用它来干嘛,就扔在那里跑个linux的小服务器需要的时候ssh连一下也挺好的。

WP_20150131_003

WP_20150413_001

来看看12306泄露的用户数据

昨天来自乌云网的一条关于12306用户数据泄露的消息被到处转载,迅速传播。据说大量用户登录导致12306第一次并非因为抢票而瘫痪。跟很多人一样,我因为懒惰和记忆力差,所以喜欢在各各网站用同样的密码。这样做最大的危险是,一旦某一个网站因为安全漏洞泄露了密码,那么拿到密码的人可以用同样的密码去猜你在其它网站的密码,一猜一个准。所以像昨天这样的事件发生以后,登录12306改密码其实是无济于事的,你得把所有跟12306用了同样密码的地方全改掉—-要一下子想起所有注册过的网站,好难啊。

所幸后来又有消息说,昨天只泄露了很小一部分的密码,不到14W。12306网站声明称,密码并不是从12306内部数据库泄露出来的。从泄露密码的数量来推测,我是比较相信这一说法的,如果是12306数据库泄露出来,那么就远不止这个数目了。我们就姑且相信12306真的没有用明文存密码吧……如果泄露不是来自于12306,那最可能的途径就是大家抢票用的各种抢票软件了。用过的人都知道,抢票的时候要把各种信息都输入在抢票软件里边的。抢票软件花样繁多,来路繁多,万一用了恶意的或者愚蠢的抢票软件,那密码被偷去是易如反掌的事情了。

我每年抢票的时候也都用了一些猎豹,360之类的抢票软件。所以赶快去搞了一份泄露的用户数据来看看自己有没有中招–所幸没有。庆幸之余,也正好看看这份包含13w+用户数据的文件,分享一些有意思的东西。

首先说明一下,根据我看到的这份数据,我怀疑数据的来源是有一定倾向性的。换句话说,这份数据可能代表了某一类人群,放大到所有互联网用户上可能并不准确。

1. 密码的长度
大家都知道密码越长越安全,因为如果黑客用计算机破解密码的话,越长的密码需要花越多的时间。当然越长的密码也越容易忘记—-所以很多人像我一样,都喜欢偷懒不用太长的密码。
从这13w+个数据中可以看出,绝大多数人的密码在6到10个字符之间,用8个字符的是最多的。所以为了增加你密码的安全性,建议使用11个或12个字符的密码,这样你已经比绝大多数人的密码都复杂了,而且也不用花太多精力,只需要多记忆一两个字符。
PWD_Length

2. 密码的复杂程度
通常来说,混合了数字,字母和特殊字符的密码比较安全。大多数人喜欢用字母和数字作为组合,用特殊字符的人就很少了。这份数据里边只有1%的人在密码里使用了特殊字符,其他的都只包含数字和字母。
所以如果你想自己的密码比大多数人更安全一些,另一个选项就是使用特殊字符,随便在密码中间嵌入一个特殊字符就安全很多了。
PS:刚刚经人提醒,12306网站上居然只允许用字母,数字,下划线做密码,真是狗日的啊
SimplePWD

退一步来说,我们把大写字母也当做一种特殊字符,来看看多少人的密码里仅仅使用了数字和小写字母—-98%。如果你的字母里用了大写字母,恭喜你,你已经属于仅有的2%了。
SimplePWD2

除此之外,这些密码里边常见的模式还有:
姓名缩写和生日的各种组合
手机号码的某些位
qq+几位数字(这种一看就知道也是qq密码,我就不去试了)
123456abc
键盘上的一些位置比如123zxc

看完了密码,我们再来看看用户的情况。

3. 注册邮箱
关于注册邮箱使用的分布我觉得特别有意思:用qq和163邮箱注册的用户占了这13w+人的绝大多数。而我以为非常流行的Gamil, Hotmail和Yahoo邮箱分别都只有一千多。我个人作为gmail和Hotmail用户,在这里边属于绝对的少数派了。关于这一点我有两种猜测:

  1. qq和163邮箱用户确实占了中国互联网用户的绝大多数。首先qq用户群是无与伦比的主流,而每个qq用户只要知道自己的qq号(废话)就自然记住了邮箱,比起要去单独注册一个邮箱容易的多;而网易邮箱只少在当年Gmail出来之前也是非常有人气的。看来用Gmai和Hotmail的所谓互联网从业人员们,已经离主流太远,太不接地气了
  2. 还有一种可能是,密码被泄露的这些人大多时候qq和163用户。比如qq和163的用户更可能用到某公司的抢票软件?

EmailServer

4. 年龄分布
从用户的年龄来看,绝大多数是80后,90年代初和70年代末的人群次之。这个应该比较好理解,需要抢火车票的更多是正在社会上挣扎的80后们。年纪再大点的人已经有老有小,生活相对稳定,不再需要太多漂泊;而90后尤其是95后基本上还在家和学校。
Age

另一个有意思的是,还看到一些早到1920年,晚到2014年的身份证号。对1920年这样的身份证号,我猜测可能是某些人用家里老人的号码注册了买票,2014年的身份证号就不明白了,难道不是16岁才有身份证号吗?

5. 性别分布
泄露数据的用户93%是男性,女性只占7%。我不太相信中国抢购车票的男女比例是93:7 —- 如果这样的话说明有很多男性在帮女的抢车票:) 更可能的原因是男性用户占到了抢票软件使用者的绝大多数,因此中招的也更多。作为抢票软件的作者们,你们应该反思一下为什么自己做的软件那么复杂,女性用户都不能使用了:)
Gender

6. 星座分布
除此之外,还想看另外一些好玩的数据,比如他们的地域分布,星座分布。地域分布根据身份证号逐个确定省市有点麻烦懒得弄了;这里姑且看一个简单版的星座分布(只看月份,不看二十三四号切)。
我相信这接近于中国年轻人在各星座上数量的比例,而不太相信某个星座在抢火车票这件事情上会有某种特别的行为。
constellation

该不该有推荐系统

现在网上的很多应用都有个性化的服务,比如在豆瓣你可以听私人电台,在亚马逊购物你会收到一堆邮件推荐你可能会感兴趣的商品,或者你在google搜索一个关键词,得到的结果和另一个人搜出来是不完全一样的。

各家的系统实现可能千差万别,但是最基本的出发点大致相同:通过各种方式猜测用户喜欢的,然后投其所好。所谓物以类聚,人以群分,要知道用户所好,基本上会通过两种思路:知道这个用户是哪一类人;知道某个物品是哪一类物品。实际上系统的策略可能综合两者。

举个栗子,你在豆瓣上给月亮之上和最炫民族风加了红心之后,豆瓣就会挑个小苹果放给你听。它发现你喜欢月亮之上和最炫民族风之后,把你分到了广场舞爱好者这一类用户里边,而广场舞爱好者同样喜欢小苹果,所以就推荐给你了。然后豆瓣又放了荷塘月色给你,因为荷塘月色和月亮之上都是凤凰传奇的作品,联系紧密。

看似简单的想法有时候非常有效,比如用了推荐系统广告投放更精准,推销成功率更好。(当然实现这样的系统并非易事。)

推荐系统并非总是好的。它的出发点是基于相似,相关,因而用户用户从推荐系统得到的东西总是“某种关系更密切的东西”。听歌的时候可能总会被推荐某种特定风格的歌曲,买东西的时候总会被推荐自己或朋友经常关注的商品,甚至在搜索引擎搜东西的时候,排名靠前的都是自己熟悉/喜欢的内容。想象一下两种情景:
A. 每天打开豆瓣永远听到熟悉的歌曲;去买东西总是几个常见的品牌;搜出来的内容都是符合自己观点的;甚至连看到别人的评论都是被过滤过的
B. 打开电台不知道放什么歌,可能一点也不好听恨不得马上跳过,也可能让你眼前一亮—-原来世上还有这种歌曲;买东西不经意间看到一些奇奇怪怪的产品,可能毫无用处,也可能带来惊喜;搜东西的时候无意间发现了一些闻所未闻的内容;评论里好好坏坏都有,可能让你高兴也可能生气
你更喜欢哪一种方式呢?我会选择B。 有句话叫兼听则明,偏听则暗, 推荐系统在我看来恰恰是一个容易让人偏听的东西。生活之所以有趣,是因为有很多偶然事件然后接触到了以前未知的东西,推荐系统降低了人接触这些未知事物的概率。

前几周看到过一个Ted的视频:Beware online “filter bubbles”。实际上这个视频在讨论同样一个问题,一些在线系统自己为是的帮助用户过滤了一些东西(过滤是另一种形式的推荐),这样会影响用户对问题的看法,忽略一些本来有权利知道的东西。
从更高的层面来说,互联网的伟大在于它使得人们可以以前所未有的方式平等的交换信息—-这里不存在一些高高在上的人和组织可以控制,垄断信息的交换传播。可是推荐系统恰恰在用户之上控制了用户可以看到的东西,这是极其危险的。大家都依靠google来获取信息,而google却可以决定让你看到什么不看到什么。

要解决这个问题,至少在线系统应该提供一个选项给用户,让用户自己决定是否启用推荐系统。(其实更高级的feature应该是由用户自己设计自己的推荐/过滤系统)
最近发现google搜索结果页面的右上角有一个选择按钮,可以选择显示或隐藏private results,这样就不错。
不像某逊,一打开页面就超大图片显示我最近浏览过或者之前买过的商品,还不停的发邮件翻来覆去推荐一些商品。且不去说推荐算法多么SB,我买了个电饭锅就三天两头推荐各种电饭锅。。。尼玛我又不是贩电饭锅的。如果推荐这么没水准的话,就不要推荐了,让用户自己安静的逛逛看看有什么有趣的新东西也好。