架构的相似性是怎么来的?

个人简介 王飓,华三研发副总裁 从事数据通讯设备软件开发长达14年,作为资深的网络协议专家和软件系统架构师,熟悉多个层面的数据通讯协议,擅长做通信协议设计以及实现,对嵌入式系统和复杂软件系统设计,以及对实时系统的性能优化有着十分丰富的经验。此外,对网络安全有着比较深入的研究,对各种网络攻击和防护有着丰富的经验。 近年来开始关注并投入SDN相关领域的研究和开发。对OpenStack、OpenDaylight、OpenVswitch、NFV等都有一定的研究,对云计算时代的网络通信有着深刻的理解。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

1. 本采访系InfoQ中文站在2014年QCon上海期间对华三通信研发副总裁王飓的对话。访谈的第一个问题为:很多软件的架构为什么发展到最后都会很相似?

王飓:实际上我们谈架构的时候,我们想这个架构是要解决一个实际的问题。但是呢,我们知道实际上变化最快的是什么?是需求。那么实际上架构是抽象那些需求的一些共性的东西来解决,所以呢,我们会发现很多的问题,最终出现了架构以后,很相似,就像你说的,确实是很相似,因为什么呢?因为我们从这个软件这样的一个体系,或者这样的一个工具,或者这样的一个系统的角度来考虑。

说的更宽泛一点,大家都使计算机的,其实计算机,你要是认为计算机有架构,那就是冯诺依曼架构,所有计算机玩儿的都是这样一个事情,所以抽象出来这个软件架构,其实跟具体的需求还真的关系不是特别大,它都是撇掉需求的这个变化的部分,看到的一个共性的问题,所以基本上当你选择,你把你的工具选定了,你的系统选定了,你的领域选定了,那么你能够采用的那些架构,就是哪几种,大家常用的那几种范式,那么你可以根据自己擅长的东西,我用这个用的熟,那我就用这个,我用那个用的熟,我就用那个。

所以呢,就是说像你说的,架构看起来都很相似,确实是一个很有趣的一件事情。

   

2. 那就是说对于我们这个想钻研架构这个领域的这种工程师来说,有哪些可以启发的地方,比如说我不用从头开始想,不用从头再摸黑的这样去探索,有哪些可以借鉴的地方?

王飓:因为我们想,这人吗,思想总是互相学习、互相借鉴的,你说真正的说什么东西全部是从头到尾,都是由我一个人发明的?第一,这不现实,第二,也不经济。

所以,其实我们都习惯用于已有的工具来解决新的问题,当发现这个问题,我这个工具不是那么合适的时候,这个时候我才可以说是被动的进行改进,使我这个工具适应这样的一个新的问题。

所以架构也是这样子的,如果说对于一个想从事这样一个领域,或者想当一个好的架构师,第一个就是什么?多学,多听,多看,你了解别人是怎么做的,当你面临一个问题的时候,我就可以把别人的经验拿过来,然后在面临新的问题时候我觉得不行了,那我们再去找解决这样的一个问题的办法,所以说有时候很难说架构是设计出来的,这只能,这句话只是对了一部分,架构往往是在面临现实的问题的时候被逼出来的,你可能这么讲就更确切一点。

   

3. 那我能不能这样说,我前面的问题是说,架构的相似性是怎么来的,是不是可以理解为是因为需求的,特别是需求的深层次的相似性,最后逼得架构变得相似了?能不能这么理解?

王飓:不完全对,这个应该说,有一部分对,但是我总觉得,就是我最开始时候讲了,架构实际上是要撇掉需求那种变化很快的那些部分。

所以实际上本质的问题就是什么?你解决这一个问题的领域,那就是有一套解决这个问题领域的模式;这个模式一旦确定了以后,对应的架构就几乎是确定了。那么当然了每个架构师会针对一个具体问题,他会有自己的发挥,但是呢,不管你怎么发挥,因为你这个问题确定了,这个领域确定了,那么这个领域前人的经验就这些,你就可以,我是用这种,还是用这种,其实差别不是会太大的,具体还是在我们使用过程中,我要看,这个问题发现什么问题,我灵活的进行一些调整,包括我们使用那些工具,这些工具你说哪个工具好,哪个工具不好,我觉得你很难单纯说哪个工具好,哪个工具不好,就是看面对你这个问题,我这个工具适不适用,解决的问题最终好不好,那就是最终的一个评判标准。

   

4. 那就正好可以引到我下一个问题,就是前面听你演讲的时候,就介绍到你们的Controller,是用的Java语言来开发的,然后在我的理解里面的电信级的绝大多数的软件,都会追求极致的性能,而且都会用C或者C++,甚至还会有一部分的汇编的东西来提升它的效率,那么为什么你们会选择在这个领域里面会选择Java这样的语言?

王飓:这个问题说简单也简单,说复杂也复杂,说简单就是因为什么呢?因为在这个领域里头,我们很多的这个竞争对手,或者是同行他们就选择这样的一个工具。

   

5. 他们也是用Java?

王飓:最典型的我们知道有一个组织叫做OpenDayLight,就是做一个开源的控制器,他那个架构跟我刚才讲的架构是很相似的,不说谁抄谁,反正互相学习。所以呢,就是说我开发这个系统,我肯定要考虑将来,我和这个开源的东西是不是可以相互融合?如果我使用的工具完全对不上,那几乎就无法融合。

当然刚才你说这个性能的问题,其实呢,对于控制器而言,这个性能就没有像我们这个网络设备要求那么苛刻,它这个弹性范围比较大,因为这控制器运行在这个服务器上,我们知道现在这个服务器,高端服务器性能都很好,所以这个弹性范围很大,所以对这个性能那种极端的要求,它就不像我们做那种标准的网络设备要求那么极限,这也为我们使用Java就是提供了一个基础。

那么还有一个问题呢,在Java这个领域里头,可供使用的这个工具比较多,而几个同行也都在做这个,那他做的东西我就可以拿来借鉴,或者我们做的东西也可以贡献出去,所以基于这样几个方面的考虑,我们就觉得,我们可以先用这个Java构建一个控制器。

但这个问题不是说,我用Java做了一个控制器以后,我就不能用别的了,我完全可以有一部分用Java、一部分用C可不可以?可以的,我完全可以在一个容器里把他两个东西全部装进去,所以这就根据我们实际的需求。

   

6. 回头再慢慢优化?

王飓:说发现性能不够了,OK,我把某一部分换成C,完全可以。

   

7. 那其实正好,我是想提一个跟开源相关的问题,前面你也提到有一个开源的控制器,其实现在我们在各个领域,各个行业,我们都看到各种各样的开源项目,那么对于一些企业来说,他会思考一个问题,我们要不要用外面开源的东西,用了以后这个版本要不要改了以后就不放出去了,就一直是我们自己的,还是说我要改到后面,我要Push回去,逐渐的跟这个社区始终保持同步,甚至成为这个外部这个社区的开源项目的中坚力量,这个是企业的很多选择中的一种,那我就不知道这个对于华三来说,你这边的企业对于开源的思考或者选择会是怎么样?

王飓:关于开源这个问题,就是我们公司内部研发,我们这个CTO老跟我们讲说,我们以后公司要走一个什么样的道路呢?就是说硬件标准化,软件开源化,这是一个方向,所以现在我们看这个整个各行各业都是往这个方向走的,所以这个潮流我估计是很难逆转过来了,那么像你说的这一个问题,如果我使用开源了,那么我对这个开源软件的修改,我是不是要贡献回给这个社区?这个问题呢,我想单纯从这个经济学的角度来讲,你肯定是应该贡献回去的。

   

8. 这个不亏吗?

王飓:不是,是这样的,因为一个开源社区是很庞大的一个力量,而对于一个企业而言,你这个力量相对一个开源社区而言,你总是处于比较弱的。你可能在某一个局部很强,但整体上来讲,你一般是处于弱势的地位。

如果这是一个很活跃的一个开源社区,它会不断的往前发展的,你今天遇到的问题你解决了,别人其实也可以解决,那没准明天这个解决方案就回到开源社区了。如果你只抱着自己这块,而我不往回融合的时候,你会发现一个难题,当这个开源软件升级到一个新的版本的时候我怎么办?这个新的版本和我原先做的东西不融合怎么办?所以从经济学的角度来看,就是说你不往回贡献,实际上并不是一个很经济的一件事情,因为你从长远看,你这个东西要有生命力,你要不断的发展,不是说我这个软件做完卖一次OK,不管了,没有这个,你要不停的维护,要不停的增加新功能。

所以呢,从经济的角度来讲,你贡献给开源社区呢,这是一个正确的一个选择。

但是话又说回来了,说有的时候不是你想贡献给开源社区,开源社区就会接受你的贡献,因为很多的开源社区他有自己的一套管理的方法,我举个最简单的例子,刚才我讲的那个OpenStack,我说我们在那个OpenStack里头开发了很多的插件,让这个OpenStack可以管理我们的这些控制器,当我们想把我们这些插件的代码贡献给开源社区的时候,发现不行,你不符合人家的标准你贡献不回去,为什么?OpenStack有要求的,不是你想贡献一个插件进去就是可以的,你想把你的插件合到我这个开源社区里,对不起,你先要对我整体的架构做出一定的贡献,你一定是我的什么级别的这个会员才可以,所以说这个事情不是说我们想贡献就一定能贡献的。

   

9. OpenStack可能会更加管理更加规范,或者说更加商业化一些。

王飓:现在比较活跃的这样一个开源社区,因为开源这件事情对于我们来讲,可能相对来说还是比较新的东西,其实在国外,我觉得他们这种文化,他们这种这个习惯,就是这个开源做得都是很规范的,那一个开源社区他会列的很清楚,我有什么样的会员,每个人都有什么样的权利,有什么样的义务,你在整个这个开源社区维护中你处于什么脚色,你应该能做什么事情,都非常规范,都是有法律条文规定的,当然这个每个开源社区对管理也有区别,风格不同,所以呢,就是说,你要想紧跟一个开源社区,那么你就要拥抱它,那你要赞同他的这样一个理念,你要不赞同他的理念,那你的事情就跟他针锋相对了,你要努力的成为他的一个比较高级一点的会员,这样你的东西就能够和它融合在一起,那么它的一些发展,甚至他的一些发展方向也可以符合你的要求,因为这个发展最终还是人来控制。

   

10. 我突然联想到一个问题,就是说在华三没有考虑过用某种策略来鼓励公司的员工为开源做贡献?

王飓:我们是这样的:我们并不反对我们的员工参与各种开源的社区,但是一般的情况下,我们把它作为一种业余的爱好。除非是你这个项目正好用到了开源系统,那么我们就鼓励他,希望你能在这个开源社区里具有一定的影响力,这样能够把你个工作融进去,这个其实对公司是一个有好的事情。

   

11. 这方面已经,这条路已经通过了?

王飓:公司这方面是鼓励,我刚才讲了,我们强调是硬件标准化,软件开源化,这是方向。

你可能感兴趣的:(架构的相似性是怎么来的?)