链接:开放网络没那么简单

本文是云杉网络工程师张攀对当前开源网络技术现状的一些思考和探索。

开放网元、释放数据的价值

从2012年开始至今,网络行业明显是O字辈的天下。所有我接触过了解过的组织和项目,都鲜有不含“Open”这个单词的。

ONF/OPNFV/ONOS/ODL/OVS/OpenStack/OPEN-O……名单还可以变得更长。但对在网络行业语境中“开放”这个词的理解,以我的观察,业界也是逐渐演进的。最开始的理解,是接口的开放和统一,将铁皮盒子打开,统一控制,所谓的“集中”与“解耦”,就是那个时候的SDN。所以有了当时大热的OpenFlow、有了ONF和ODL以及那个时候会议中密集的对SDN这个概念的讨论和纸上谈兵。

就像所有极端激烈的革命一样,理想永远也填不满横亘在现实之间的鸿沟。完全的集中和解耦在现实部署中遇到了很多无法解决的困难,在这里不再一一赘述。SDN在“激情燃烧”的岁月之后,又回到了“螺旋上升”的一般规律。这个时候的“开放”,已经不再仅仅是一个北向或者南向接口,它的含义变得复杂、多变而暧昧。

  • 技术上,网络资源池化和Service-Chain可以算作开放;
  • 生态上,参与和维护开源社区,插入自家产品的agent可以算作开放;
  • 市场上,所有的宣传材料印上“开放”这个符号,就是政治正确。

这个时候OPNFV/ONOS/Open-O作为后起之秀开始崭露头角。而各厂的代表在会议上除了滔滔不绝地介绍自家的产品有多虚拟多灵活对接了多少开源项目之外,还是不免露出讳莫如深的破绽。当所有人都在谈论一件事的时候,恰恰证明这件事正是缺失的那块拼图。在2016年之前,我们对“开放”的理解,很多时候还停留在Teenage Sex的阶段:所有人都在谈论,却没人知道怎么做,但我们认为别的人都在做,所以只能声称自己也在做……在我们真正达到一个新的阶段之前,弯路其实也是必不可少的……

实际网络用户的需求,带来了对技术的反思。如今所谈的开放,已经抛弃了以前的那些技术上的繁文缛节和政治上的盘根错节,而真正关注于网络的细枝末节。它要将一张网络中流转的每一束流量,每一个报文,每一次以太网口的闪烁都展示给你。人们越来越明白,之前之所以说网络“封闭”,并不是因为没有CLI的编程接口,并不是因为没有x86和Linux服务器上的NFV,而是因为看不到到底什么东西在网络中流动,它们过去如何、现在如何、未来又将如何,无人知晓。封闭的不是网元,而是网线。而现在的开放,就是要将网线中的流量一层层剥开。剥出来的不仅仅是前端的一幅幅UI统计曲线,而是整个网络中最基础、也是最有价值的数据。依靠这些数据可以产生真正的价值。而开放,就是要取得这些数据、分发这些数据、处理这些数据、总结这些数据。这里仿佛又回到了SDN最初给大家构筑那幅愿景,唯一不同的是,这次已不再是一座空中楼阁。

开源项目为什么做不好?

业界对开源的热捧,给这些大名鼎鼎的项目笼罩上了一层不切实际的光环。单单从产品质量上来讲,开源项目不必,也不能做好。因为一旦有一个开源项目可以满足大部分客户的需求,那么这个行业的生态就宣告终结。如果任何人都可以连上网,点几下鼠标,就可以免费下载一个满足需求的软件,那谁还会参与这个生态呢?生态越繁荣,开源当然也可以火爆,但还是说明免费的软件有各种需要被填补的空缺。

在多数会议里,如果演讲人是开源软件的“一线用户”,那么很少会听到当前那几个热门开源软件的好话,理由也多是不具备生产环境商用的能力和价值,存在各种各样的坑和二次开发的必要。在我看来,现阶段正是下一代商用产品青黄不接的时间段,这种时候,谁都希望能开展一场轰轰烈烈的开源造神运动。即能拉帮结派,又能收到一些代码、标准和市场的实效,为自家的商用产品铺垫,何乐而不为呢?当自家投入甚多的开源软件“商用版本”出来之后,再借着用户习惯占领市场,不是最有效的方式吗?当越来越多的厂商有了自己成熟的商用产品,那个时候再来看开源软件,恐怕只能用“有高潮就有低谷”来形容了。

但开源并不仅仅是个炮灰的角色。很多大厂在介绍自己的商用产品的时候,总是不忘最后加上一句“回馈社区”来彰显自己一览众山小的气度。但这个链条往往到此为止,开源社区的大部分价值,甚或最大的价值,还没被攫取和利用。

在我看来,开源社区,是最好的营销平台、是点击率最高的公众号、是精准投放的广告渠道。很多厂商在开源社区投入很大但宣传的很少,或者宣传方式有那么一点点简单粗暴。导致自己的贡献要么说出去让人反感,要么说出去没人知道。如果能把自己的贡献和参与以群众喜闻乐见的方式投放出去,对技术知名度和品牌价值的作用,恐怕就像在北京买了一套房。毕竟开源的本质不是免费而是汇聚。有汇聚就会有广泛的联系,有了联系和交换,就有可能。

编程是一种心理活动

虽然上面谈到了一些不一定经得起时间考验的看法和见解,但无论是构建网络,还是开发一个产品,最终依赖的基石还是人。这几个人组成的团队才是改变真正“make a difference”的土壤。他们的所思所想,他们对产品的投入和态度,将会唯一性地、长时效性地,影响最终的产品。要想产品做得好,一定要先把团队建好。而对一个(技术)团队来说,最重要的东西——很直观的——就是编程开发。

但我们对编程开发的认识还不够深入。编程到底是什么?编程当然是一件脑力、技巧与经验相结合的活动,但这些并不是它的本质。从根本上讲,开发编程是一种心理活动。没有人能不带任何情绪地敲代码,也没有人能不把他的情绪敲到代码里。很多时候,我们需要不断地(自我)激励,需要不断地获得心理奖赏和反馈,才能把这项工作做好。因为与其说我们是搞定了Bug,搞定了算法,毋宁说是搞定了自己的心态。对于稳定心态来讲,最有用的事,可能并不是怀有一个盲目的信仰,而是有一个完整的逻辑链条,能够支撑这一行行代码的意义。虽然这些可能只是一个小小的commit,但它可能代表的是一副网络世界未来的景象。

包括我自己在内,很多时候也会埋首于一堆技术细节之中,而没有抬头看看的空隙。就像爬山,看不到山顶在哪,也不知道为什么要翻越这么多沟壑,再加上与一个行为方式完全“反人类”的计算机打交道,心理遭受的伤害可想而知。如果不及时“修复”,这种心理活动最终都会反映在产品之上。而若是你理解了自己的产品,理解了它将会在这个行业里所起的作用之后,你不但可以知道为什么要前进,并且可以量化今天前进了多少米,还能知道你在地图中的绝对位置,那么在心理方面的准备,就是足够了,这也其实就是开发一个好的产品的全部过程。

作者简介:
张攀,云杉网络工程师,专注于x86网络软件的开发与性能优化,深度参与ONF/OPNFV/ONOS等组织及社区,曾任ONF测试工作组副主席

【转载 来自sdnlab】 开放网络没那么简单的更多相关文章

  1. [转载] Google数据中心网络技术漫谈

    原文: http://www.sdnlab.com/12700.html?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd ...

  2. 转载来自朱小厮博客的 一文看懂Kafka消息格式的演变

    转载来自朱小厮博客的 一文看懂Kafka消息格式的演变     ✎摘要 对于一个成熟的消息中间件而言,消息格式不仅关系到功能维度的扩展,还牵涉到性能维度的优化.随着Kafka的迅猛发展,其消息格式也在 ...

  3. 青云QingCloud业内率先支持云端全面透明代理功能 | SDNLAB | 专注网络创新技术

    青云QingCloud业内率先支持云端全面透明代理功能 | SDNLAB | 专注网络创新技术 青云QingCloud业内率先支持云端全面透明代理功能

  4. /dev/mem可没那么简单

    这几天研究了下/dev/mem.发现功能非常奇妙,通过mmap能够将物理地址映射到用户空间的虚拟地址上.在用户空间完毕对设备寄存器的操作,于是上网搜了一些/dev/mem的资料. 网上的说法也非常统一 ...

  5. /dev/mem可没那么简单【转】

    转自:http://blog.csdn.net/skyflying2012/article/details/47611399 这几天研究了下/dev/mem,发现功能很神奇,通过mmap可以将物理地址 ...

  6. ContOS网络连接及简单的ssh Xshell连接!

    这边简单的记录一下下ContOS网络连接及简单的ssh Xshell连接! 首先你得安装一个Contos Linux系统对吧! 1.找到设置--->网络-->有线连接-->IPv4 ...

  7. C#中的interface没那么简单

    最近在园子里闲逛看到一篇文章“(抽象)类和接口细节分析”,尽管作者很细心很细致.可事实上C#里面的interface没那么简单,interface有着大量不为人知的小秘密的说. 1.值类型也能实现接口 ...

  8. 安全开发Java:日志注入,并没那么简单

    摘要:当web工程比较大,历史代码较多时, 应当使用log4j2框架的能力来修改日志注入问题,而不是按照有些博文里写的逐个进化参数的方式. 案例故事 某个新系统上线了,小A在其中开发了个简单的登录模块 ...

  9. 基础项目构建,引入web模块,完成一个简单的RESTful API 转载来自翟永超

    简介 在您第一次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复粘贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot ...

随机推荐

  1. cenos配置

    #修复ifconfig1.查看 /sbin/ifconfig是否存在 echo $PATH2.查看ifconfig命令是否存在ls /sbin |grep ifconfig如果ifconfig命令存在 ...

  2. C/C++函数参数读取顺序2

    #include <stdio.h>int main(){ int a=1,b=3,c=3; printf("%d, %d, %d",(a++,b++,c++),b,c ...

  3. CI批量更新$this->db->update_batch();

    $this->db->update_batch(); 生成一条update命令是以你提供的数据为基础的,并执行查询.你可以传递一个数组或对象的参数给update_batch()函数.下面是 ...

  4. 以app形式启动chrome——关于chrome命令行

    转自:http://wiselyman.iteye.com/blog/2179043 转自:http://bbs.ithome.com/thread-589651-1-1.html 转自:http:/ ...

  5. mysql忘记root密码

    skip-grant-tables:非常有用的mysql启动参数 介绍一个非常有用的mysql启动参数—— --skip-grant-tables.顾名思义,就是在启动mysql时不启动grant-t ...

  6. linux在工作中用的比较多的几个命令

    1.chmod +X qmf.txt;给qmf.txt文件添加执行的权限 2.find命令: find ./ -name "*.log" exec  rm -rf { } \;   ...

  7. 绑定GoDaddy域名到OpenShift应用

    一.申请GoDaddy域名 二.托管OpenShift应用 三.绑定www.mydomain.com 四.重定向mydomin.com到www.mydomain.com 五.It's go time ...

  8. DOM--1 遵循最佳实践

    为重用命名空间而进行规划 (function() { function $(id) { return document.getElementById(id); } function alertNode ...

  9. 实践1-qq邮箱主页

    纯html的网页 采用table分割板块进行布局 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  10. python 代码片段7

    #coding=utf-8 #列表 book=['python','development',8] book.append(2008) print book book.insert(1,'web') ...