回到未来

看了《饥饿游戏》不妨借此机会谈谈未来。

前几天恰好是《回到未来》中主角穿越到未来的这一天,随着时间不断的推进一个又一个当年畅想过得未来的时间点成为今天。想象力可及范围内对于短期未来的畅想无非是各种改善生活的小玩意,因为我们现在大抵处于这一波文明革命的中期,计算机的普及和进一步的发展还可以继续延续未来的几十年直至下一个突破点。很多电影小说中会描绘出各式各样的未来人类社会图景,它们大都有着相似和共通之处——许多情节都是有着玻璃幕墙的拥有流线型外观高耸入云的摩天大楼,拥有垂直公共交通体系,亦或是浮于空中拥有轻盈轨道的磁悬浮似的列车,不然则是将现有的汽车一并拥有了飞行的功能,生活中则是所到之处都有透明或不透明的显示设备将各式各样信息呈现在眼前,再加之则是饮食衣着都是由一些造型奇特的机器一键式完成。以上这些频繁出现的元素是我们想象力轻易可及之处,距离我们现在的生活并不遥远,不需要好奇的怀疑它们真实与否,假以时日都会实现。

我更好奇那些也许无从得知未来会是如何的问题。《饥饿游戏》描绘了一个中央集权的社会,这似乎也是许多其他故事乐于呈现的背景。我以为这都来源于经典《一九八四》类政治乌托邦小说的影响。日本动漫《叛逆的鲁鲁修》也讲述一个中央政府压迫殖民区和殖民区反抗的故事。让人困惑的是,什么样的发展路线最终会到达这样一个高度集权的社会,在从我们当下的生活中跳脱去那些故事的背景中时,是否会疑惑这些故事背景距离我们有多远,这个时空距离之中到底发生了什么。

《云图》的一个故事中描绘了人类的未来生活。让我印象深刻的是星美看到她们死后被重新处理加工成为食物的过程。这整一个工厂的描绘我相信作者亦或是导演一定去过现代化的屠宰场,曾经在视频网站上看到过题为惊叹德国人如何屠宰加工猪肉的视频过程,大抵是展示这一系列的先进机器是多么现代化,还有推荐广大屠宰场老板慷慨解囊购买的广告。这很有趣,把人替换到原来猪的位置上(我们暂且认为星美是人),这种视觉冲击可想而知。如果我们把星美换成一个机器人呢?假使这个机器人做的有如《A.I.》中的小男孩一样,或许和星美没有什么区别。如果和《E.T.》中的机器人类似呢?甚至如果只是和富士康生产的流水线上的机器手臂一样?其实我们已经可以做出生产机器人的机器人了,当这些机器人用尽,我们自然也会有(或者已经有了)处理回收这些机器人的机器人。那么这个场景和云图中描绘的被用以循环利用的『机器人』相比区别在哪里呢?

《云图》描绘的未来也是一个集权社会的未来——人类集权统治『人造人』。这似乎是一个可以预见的未来之一。接下来的短期的未来中必定会迎来一轮接一轮的劳动力大解放。这是否将使得人类本身可以不劳动就能继续存活和繁衍生息。很难想象如果回到百万年前,让那些尚未进化完全的人类享受到无需耕作、无需打猎、无需生命被收到自然界威胁的生活,这样的社会会朝向什么方向发展。会是更加的迅速进化成为新新人类还是停滞不前甚至倒退?似乎我们行将走到这一步了。我们走到这一步前替代我们劳动力的似乎只可能是机器人。从这点看来,人类对于机器人的集权社会是一条必经之路,而时下流行的人工智能带给我们的一方面是机器人的劳动力的提升,一方面则是为未来所谓的『道德』问题和『社会』冲突埋下伏笔。

见过机器人对打的比赛吧,只是时下机器人的样子长的和你不一样让你没法产生通感罢了。和《饥饿游戏》中的擂台区别大吗,和古罗马的角斗场区别大吗,小时候玩儿的斗蛐蛐呢,如今我们的拳击格斗比赛呢。这种难以逾越的人性本身当其赋予了对于机器『人』的无限权力的时候,我发觉《云图》中的未来首尔其实近在眼前。那么人类社会自己内部会变为如此吗?似乎也有可能。假使劳动力大解放之后,第三产业或许是唯一仍然需要人类本身参与的活动。当最低生活标准达到一定高度之后,社会是否会重新回到《一九八四》描写的三角形社会结构——底层社会享受最基本的物质生活和相互之间的服务业,中间阶层做管理而上层则垄断资本。这个时候资本是什么呢?假设你在玩帝国时代然后开启了资源无限的秘籍,资本或许就是从事第三产业的劳动力吧。这是否会成为未来集权社会的契机呢。

《来自新世界》的故事提供了另外一个思路。偶然的有一小部分人有了常人不得的『特异功能』,于是随着时间推移,最终这批人为了防止对没有特异功能的人类的『集权统治』和自身的『道德绑架』的冲突,将剩余的人类『改造』成了非人类并且与之社会完全隔离。这个故事我很喜欢,讨论了很多对错间模棱两可的模糊地带和对未来的另一种想象。虽然他的结局和其他众所周知的类似故事一样,回到了美好的『民主共和新世界』,但是万一回不去呢。

意义

前段时间看了姜文的《一步之遥》,作为一个观影不多的观众至少也从中看出了姜文享受在其中的形象,我想这就是一部好电影。所以说做一件自己想做的或者说自己喜欢做享受在其中的事情是可以排在第一位的,外在的评论和事后的结果相对都可以排在之后。举个不恰当的例子,这就好像鲍尔默买手机,贝佐斯做手机一样(笑),既然自己喜欢,多花点时间多花点钱开心就好,不在乎别人多说几句。

中国有这么好的一个寓言故事,讲夫妇俩带着毛驴去赶集。两人牵着毛驴走,结果被人笑话有驴不骑;于是男的骑上驴让他老婆走路跟着,人说议论这大男人不照顾女的;于是换做让老婆骑驴,又被人说女人不体恤丈夫;只好俩人一起骑着驴,这下别人又说这两懒鬼折磨一头驴;没办法只好把驴捆木头上俩人抬着走了。

所以说既然无论如何都无法取悦,甚至是不得罪所有人,那还不如干脆做自己。我倒是好奇为什么自己在这个年纪乐得(苦得)时常去想这个问题,看来还是因为刚从学校毕业迈入社会,又到了这『青黄不接』的年纪,压力略大又无从选择,欲求自由却缺乏对生活的想象力吧。看了看之前的文章,其实一年前就知道生活『没有意义』,不过这标准答案既然没达到心理预期总是心中有说不出的抗拒。

这段时间(从上次的文章到现在)看知乎的频率高了起来,物以类聚的道理。但是真的什么问题都需要一个解答吗?更进一步说,都需要一个大众化的高票数的标准答案吗?以程序员作为职业(或者以工科作为专业)的一个『副』作用让我自身觉察到对于世界的看法的逐步改变——认为万物可解,所有问题、现象、矛盾都有原因,都可以重复性试验,都可以找到节点,进而解决——这就是工作中解决代码问题的万变不离其宗的能力。既Find a bug. Try to reproduce. Debug function by function, line by line. Fix the issue. 时常的这样的习惯给予了生活莫大的方便和心态上的宽慰——相信一切问题皆能解决和解决一切问题的能力。但是偶尔的潜意识中也会觉得是否这样的不变流程就是最优解、唯一解,或者是否真的需要解?

也许真的不需要解呢?因为每个人评价标准不同,所以自己才是唯一的评价标准来源吗?那么自己的评价标准是正确还是错误呢?可是遗憾的是,正确和错误的定义本身却又来自于其他人,也同样没有定论。

去年哪儿都没去,今年挽回了一点。我从不关心别人嘴里的正确和错误的旅行目的地——这没有定论,我关心的是我觉得它有趣不有趣。旅行或者换句话说出去玩儿,是通向新世纪三有青年(不是有学历、有背景、有证书,而是有钱、有趣、有理想)的必经之路。这次走访了墨西哥和俄罗斯,也算不虚此行——世界上不只有北美西欧这样的国家,中国特色也不是那么独一无二,墨西哥街边的早晚的卖吃的小摊小贩的铺子,还有莫斯科城里城郊的火柴盒型的居民楼,都能看到熟悉的影子。热闹的街头巷尾和喧嚣的城市对于一个住在市郊小山坡上的我来说更是亲切有加。这些都是有趣的元素。一定要空余出时间好好整理一下照片可以重新回味也好安排未来的旅途计划。

再记录一行,昨儿抓了一只螃蟹,味鲜。

Data Center Network Structures

之前一段时间恰好准备了一个”HOW TO HOUR”,因为自己才疏学浅,东拼西凑找了一些值得一读的文章做了一个简单的概论。把大致内容记录于此,之后亦可以浏览。

一个典型的三层(核心层、汇聚层、接入层)的Data Center Network Structure大体如下图所示

这里涉及到了架构或拓扑、Oversubscription、多路径路由和费用这些概念。在之后的讨论中都有逐条说明。同时,这里也讲到了这种架构来自于Fat Tree Network和Clos Network的“结合”。

第一篇有关的文章是A Scalable, Commodity Data Center Network Architecture。应该是现代数据中心网络架构的先驱。这篇文章提出了如下的模型

可以看出,在核心层和汇聚层都被小型路由器替代了。这里为了达到一比一的Oversubscription,大体比例上是这样的:对于一个k-ary fat tree来说,一共有k个pods,每个路由器有k个ports,一共有k^2/4个核心层路由器,k^3/4个主机,两个主机之间有k^2/4条最短路径。文章中提出了一种寻址方法,即每一个pod switch的IP地址设置为10.pod.switch.id。每一个核心路由器的IP地址设为10.k.j.i,每一个主机的IP地址设为10.pod.switch.id。这里文章提到不用OSPF或OSPF-ECMP的原因是防止信息拥塞等考虑。路由表由两层结构,第一层是后缀表,第二层是前缀表。后缀表决定北向路由,前缀表决定南向路由。

这样的一个问题就是,fat tree结构并没有被充分利用。所以两种动态路由在此被提出。一是流分类Flow Classification,将北向的流按照大小动态分流到北向的端口;一是流调度Flow Scheduling,这里提及了一个中央调度器Central Scheduler。通过中央调度器来决定哪一个流用哪一个端口。

这样的设计存在着一些问题,譬如可扩展性相对较差,负载平衡过于简单,commodity device需要有专门的设计满足寻址和路由,虚拟化计算机的动态迁移,和浪费较多地址空间等问题。所以接下来我们再看一篇文章Portland: A scalable Fault-Tolerant Layer 2 Data Center Network Fabric。这篇文章意在设计这样一种架构,虚拟机迁移过程中IP地址不变、路由器不需要专门配置、Oversubscription达到一比一、路由不出现环路、以及路由表的错误修正。为了达到这些目的,作者认为这会是一个Layer 2的构造。Portland的目标是给出一个可扩展的数据链路层的路由、转发、寻址设计。Portland这里也需要一个逻辑上的中央处理器以保持一个配置信息的软状态。

实现这个设计的关键在于:一、Positional Pseudo MAC Addresses;二、Proxy-based ARP。第一点和第一篇文章中的IP分配的想法是类似的。这里为每一个主机分配一个独特的MAC地址:pod.position.port.vmid。

Fabric Manager分配给主机一个独特的PMAC,每一个主机向边缘路由器发起ARP请求以得到目的主机的PMAC,边缘路由器的功能在于拥有AMAC和PMAC的映射,而Fabric Manager只存有主机的IP和PMAC的映射。在边缘路由器转发的过程中,也会向Fabric Manager查询相应IP地址对应的PMAC。

Portland的设计——位置地址Location Address和应用地址Application Address的分离,使得虚拟机在迁移的过程中无需改变IP地址。中央控件的使用保证了LA-AA的映射。网关负责DCN内外的encapsulation/decapsulation。

在VL2: A Scalable and Flexible Data Center Network一文中,以上几点特征同样留在了设计中。而区别在于,Portland是一个基于Layer 2的设计而VL2则是Layer 3层的设计——IP-PMAC的映射变为了IP-IP的映射。

上面几张图可以看出VL2在于

  1. Building on proven networking technology.
  2. Separating names from locators.
  3. Embracing end systems.

这里要提到的是VL2的directory system design。它代替了Portland中的fabric manager的角色,保证了查询更新地址映射的功能。这个设计包含了(1)一个大约50-100个服务器组成了读优化的冗余目录系统,存储和负责AA-LA的映射和查询;(2)一个相对较小的(5-10)写优化的异步replicated state machine服务器簇,以保证统一的可靠地映射一致更新和存储。具体实现细节可以参考原文章。

话说要提到的一点是,这篇文章的作者在这篇文章发表这年入职了亚马逊,James Hamilton。成为了AWS的VP/Distinguished Engineer。可想而知AWS的架构与之的关系。