网络技术现况

在网络工程师的日常工作中,我们经常和各种网络协议,不同厂家的网络设备打交道。从大家熟知的RIP,OSPF,ISIS以及互联网无处不在的BGP等等。配置和优化以上协议已经成为网络从业者的家常便饭。
而在业余时间,我们认真好学,积极充电。学习Cisco,Juniper,华为等厂商的认证课程。
可是,自从IGRP至1980代发明以来,这些路由协议就没有怎么改变过。顶多在原来的基础上,新增了部分功能,例如RIP,OSPF,IS-IS支持IPv6,BGP支持新的family协议族等。


换句话说,在日新月异,万象更替的今天,作为网络工程师的我们,仍然用着30前发明的技术!

诚然,有朋友会解释道,现如今的网络技术也在逐步升级,例如SDN技术的引入。但其实SDN只是一种新的解决方案,它解决了自动化集中控制的问题,优化了转发和控制层面。其对现如今的网络技术体系并不是替代性的,颠覆性的。

假设有一天,这些传统的路由协议都消失了,取而代之的是我们完全没有接触过的新技术,网工的饭碗岂不是丢了?
想想就细思极恐。


作为一名在网络行业浸淫多年的资深工程师,我个人也不希望看到有这么一天。
但是很不幸,时代的脚步没有人能够阻止。在地球的另外一端,一家社交媒体公司正在悄然改变这一切。

它就是今天的主角:Facebook

Facebook 一群疯狂码农的乐园

因为某些原因,大家平时对Facebook知之甚少。所以在这里有必要稍稍介绍下Facebook。

Facebook 是一家主打网络社交平台的公司,它类似于我们平时使用的QQ空间,人人网等其他社交平台。

不知道你们是否看过一部电影,全名《社交网络》(THe Social Network)。它就是讲述了Facebook CEO扎克伯格被女友甩了以后,如何借助别人的点子创建了Facebook帝国,并发展壮大的过程。
本篇文章对于Facebook如何创建,我们并不感兴趣。但是大家需要注意的是,CEO扎克伯格天才般的码农技能吸引了一大批志同道合的牛叉码农。他们坚信代码改变世界。


为了让大家有个更直观的了解Facebook的体量,让我们来看看下面几组数据(截止2017第三季度)。

  1. Facebook有超过27亿人月活用户,同时每年16%的速度递增。
  2. 日活跃用户13.7亿人,23%年递增速度。
  3. 每天有3亿张照片上传到Facebook服务器。
  4. 。。。。

在如此规模用户量背后,是全球范围的数据中心,以及跨越各个大洲的国际骨干网在支持着数亿人每天的社交动作。自然而然,网络设计规划以及日常运维也是成为公司业务的关键。

因为体量巨大,Facebook极其容易遭遇平时大家不太可能遇到的各种协议上的扩展性问题。有些问题对普通企业来说,发生的概率为0.00000001%。但是在Facebook内发生的概率就是100%。

创新性开源路由平台 Open/R

因为不断增加的用户量和数据量,如今的网络协议逐渐跟不上Facebook内部不断产生的新应用。存在如下问题:

  1. 目前网络协议过于古老。设计之初是在有限的CPU和内存资源的情况下,解决网络可达性问题。而如今CPU和内存资源过剩,但是上层应用需要网络协议提供更多的服务来支持其功能,而不是简简单单的连通性问题。
  2. 在已有协议的基础上新增功能及其繁琐,Facebook曾向IETF撰写提交RFC,期间经历无数次的修改,耗时多年才得以获批。
  3. Facebook从创立之初,就一向致力于把一切问题归结于软件问题。既然是软件问题,就用解决软件问题的思维来处理,网络问题也不例外。

基于以上几点,Facebook放弃了修改已有协议,转而编写一套适合自己的全新的路由平台系统,那就是今天的Open/R。

Open/R结构

Open/R宏观结构图
上图为Open/R的宏观整体架构。

各个部件功能如下:

  • KV-STORE:产生链路状态泛洪,与邻接同步链路状态。存储与分发Key-Value,这些Key-Value 组合并不光是链路状态,理论上它可以存储任何信息。
  • Spark: 使用ipv6 Link-local 组播实现邻居发现,并向其他模块报告邻居状态。
  • LinkMonitor:顾名思义,通过Platform模块监控硬件接口的状态信息。并把通过Spark模块学习到的邻居关系报告给KV-STORE。
  • PrefixManager:IP地址前缀自动分发,这项功能大大简化在自动部署过程中,无需工程师干预链路的IP地址分配。
  • Decision:当接收到KV-STORE模块传来的全网链路信息以后,基于最短路径算法计算链路状态路径。
  • FIB:维护转发信息表,并下发给Platform执行硬件转发表更新。
  • Platform:结合特定硬件平台的SDK,执行硬件层面的接口功能和FIB下发的路由功能。

仔细一看,这不是和平常的OSPF, ISIS一样吗?对外通过Hello发现邻居,建立邻接关系。对内通过Shortest Path算法算出最优路径,然后下发FIB。

没错,Open/R设计之初,就充分吸收学习现有路由协议的优秀机制,并加以利用。但是同时,它也引入如下众多功能:

  1. 跨平台运行- Open/R可以运行在不同的硬件平台之上。所有硬件软件都抽象为接口,不同的硬件ASIC和CPU均不会影响Open/R的正常运行。从而实现不同网络设备的一致性体验,使得统一化网络管理更加容易。包括Arista和Juniper在内的厂商都通过API的方式运行Open R。以Juniper为例,QFX系列和PTX系列都支持Open/R。
  2. 基于IPv6原生开发,使用ipv6 link-local地址,支持zero-touch配置。若需要ipv4路由亦可以开启ipv4。
  3. 基于一个大掩码的聚合地址prefix,运行Open/R的路由节点可以实现自动分配IP地址实现即插即用功能。
  4. 因为功能模块化,提供了平滑重启的特性。升级过程中不会打断业务。
  5. 支持实时业务流量剥离。
  6. 基于RTT的动态链路metric计算调整。省去了人工计算RTT来确认链路的Metric值的烦恼。
  7. 基于实时可达性探测,Open/R可以实时监控整个网络的健康状况。
  8. 提供API用于集成SDN控制器。
  9. 原生提供Python 库来调用所有主要的Open/R进程。(又是python!)
  10. 极其容易做仿真测试,最高曾经测试过一万个Open/R节点和6万个link链路。(想想以前学习的知识,OSPF单区域不建议多余50台路由器,免得database过大。)

然而,最主要也是最重要的功能,是极强的扩展性。
今天你看到的是这些功能,但是随着业务发展需要,Facebook可以随时添加新模块进入此系统。而且-----Open/R开源了!!!

其实Open/R不是本文重点

其实今天的讨论重点,不是在Facebook 的Open/R,而是借着Open/R,和大家聊聊关于网络工程师的未来,关于我们自己!

不知道大家看完Facebook Open/R介绍以后,想到了什么,有什么样的思考。

我说说我看到Open/R以后,我的感受吧。
首当其冲,如果自己再不转变,就要失业了。
作为一名网络工程师,我们赖以生存的技能就是网络技术,更深一层来说,深刻理解网络各个网络协议之间的运行机制,以及如何规划并实施。
但是正如我开篇提出的问题,假如这些协议在某一天都消失了怎么办?
取而代之的是像Open/R这样的新网络系统。曾经熟知的OSPF区域类型,BGP 的policy,协议timer等统统派不上用场。一切一切都是被码农们提前预设好,系统按部就班运行就可以。如果遇到系统故障,作为网络工程师的我们也插不上手,因为代码故障还需要代码来解决。

今天只有一个Open/R,明天会有无数个Open/R

如果大家只是觉得,Facebook离我很遥远,而且Open R目前只有Facebook以及零星几个合作伙伴在部署。那就大错特错了。
首先,因为Open/R的开源,其他存在类似协议扩展性困扰的公司就会借着Open/R的设计思路和原理,开发出符合自身的路由平台。这个趋势不是谁能够阻挡的,包括设备制造商。
类似的例子为虚拟化,包括Cisco或者Juniper原来是借着硬件设备外加软件系统来盈利。但是在虚拟化面前,不得不推出虚拟化的路由交换平台,放弃部分硬件设备的利润。
还是那句话,在科技进步的潮流面前,没有谁能够阻挡。
而这次潮流的最终受益者----是程序员。
在科幻世界里面,有这么一个方式叫做“高维打低维”。大概解释为:高维空间的生物打击低维空间的生物,易如反掌。
而在现实生活中,这种
正在发生在我们身边。农耕时代敌不过工业时代,工业时代的产物又敌不过互联网时代。同样,在互联网应用发展迅猛的今天,程序员如雨后春笋,一切问题,都可以用代码解决。因此从某种层面上来说,程序员们站在了更高的维度。而作为网工的我们,则是低维。

对手 or 朋友?

翻开现在的博客,公众号。大大小小的文章都是关于程序员的,貌似作为网络工程师的我们,已经成为过气明星,只能在街边小剧场路演。
那么我们应该怎么办,继续生活在象牙塔内,心里暗暗仇视日夜加班的码农么?No No No,我们不仅不能仇视,还应该和他们成为朋友,合作共赢才是未来。

Facebook Open/R,新一代路由平台与网工的未来

有句话说得好,与其坐以待毙,不如融入其中。

网工的路该怎么走?

总结一句话:夯实网络基础知识,同时大力发展写代码能力,成为程序员的一份子。进可攻,退可守。
毕竟,程序员再强,他们对于网络技术知识的理解还是不如职业的网络工程师,所以夯实网络基础知识非常重要。只要练好看家本领,才能开疆扩土。
同时,作为网工的我们,应该大力学习编程,进入程序员的领域Get新技能,把自己变成程序员,跟上时代的步伐,才不会被时代所抛弃。

结尾

最后,以一句略带危机感的话语,结束这篇文章:

作为一名网工,希望大家换个角度看待当下。网络并不仅仅是OSPF,ISIS,BGP。也并不仅仅是多少个CCIE。也许在地球的某个地方,破坏性的创新正在侵蚀我们熟知的领域,最终引领我们走向陌生。

----END-----