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的架构与之的关系。

夏天再见


过完这个周末,就同夏天说再见了。

身在西雅图,这样的时节每过一日便多一份焦虑。心情挣扎在等待下雨又盼望雨来得再晚点的边缘。就好像考完试享受着短暂轻松的学生,心里却总挂记着分数何时出来一般——我在等待那场宣判夏日终结的雨。每天注意着太阳升起落下的时间,似乎夜幕来临的又早了些,然后,又早了些。聚散苦匆匆,此恨无穷。之于人是如此,之于西雅图之夏,蓝天暖阳,亦如此。古人惜春伤春怨春,我惜夏伤夏怨夏。

古人行路不便,方圆百里既是极大一片区域。如今有车助力,能有幸抵达更多去处。北面Mt Baker,North Cascades National Park,南面Mount Rainier National Park,西面Olympic National Park,东面Snoqualmie Falls,Mount Si,等等等等。照片还未都整理好,也就留个到此一游的纪念。对摄影的执念不那么重,器材,后期都是为了最后的美的效果而服务,若为此累,倒不如图个清闲睁大眼就行。

朝十晚七的生活日复一日,却还没有从学生身份走出来。不知道是好事还是坏事。说到好坏,人的一个执念就是区分好坏,执着目的,寻找意义。可是好坏如何判断,目的是否有意义,这些问题都没有一个通解。无解的东西本身很容易困扰一个做了近二十年习题求解找答案的学生,当回过头来不得不承认一切都“没有意义”的时候,如何面对这个回应又是一番纠结。

宇宙是不是就好像一个数学公式,给定自变量时间T就能求出任意时刻的宇宙的状态呢。我的每一个动作,每一种想法,是否都逃不出这个公式呢。宇宙包含时间吗?如果包含,宇宙就仅仅是一个状态吗?如果不包含,那时间又是什么呢?

看《后会无期》里那段火箭升空的场景,想到了《三峡好人》里那幢奇怪建筑物升空。现实超现实本身就是模糊的。《来自新世界》很有意思,相对更加开放的价值观念比传统剧场卖座的好莱坞大片看完更有回味。

浮萍漂泊本无根,天涯游子君莫问。来年夏天,我将身处何方。

Let It Go


看完《冰雪奇缘》深受感动,主题曲反复的听。不久前刚看完宫崎骏自言的收官之作《起风了》,一部更加细腻和温和的作品。相比而言,这部迪士尼的动画的风格烙印更加明显——百分之一百的完美故事和结局。看电影时我曾想如果公主Elsa的妹妹就真的变成了冰的雕塑,或者小雪人在夏天来到以后就这样融化——许多宫崎骏的作品里会出现真正的别离,但是至少迪士尼不会。Dreams come true. 所以这种感动更加是一种“竟然能如此美好”的感动,一时间生活的种种残缺也就在脑后了。

我很喜欢这首主题曲。自由的礼赞。一个人拥有全世界的快乐。或者说,终于一个人住studio的快乐?笑。独处有好有坏,所以最后她还是回去了原本属于她的地方。人可以享受一时的寂寞,终享受不了一辈子啊。

关于《起风了》,人类的梦想就在蓝天,抬头可望而不可及,看着鸟儿歆慕不已。再过个把小时我也能短暂的领悟一把自由飞翔的乐趣,应该是一个令人难忘的体验吧。

另外,慰籍游子的美食节目我还是愿意给一个好评的——无论它是舌尖上的中国还是舌尖上的中国辛酸故事。顺带着看了两年前BBC拍摄的一部四集中国美食节目,一个广东人一个台湾人,俩外国长大的华人。更加着眼于社会发展而非个人的故事,也很有意思。不知道别的国家的人漂泊在外时是怎么想的,但是似乎大部分漂泊在外的华人想念第一位的总是吃的。或许也因为每个妈妈都是都是这户人家几十年的掌勺大厨的关系吧。在此也祝天下母亲节日快乐。