UDN-企业互联网技术人气社区

板块导航

浏览  : 776
回复  : 1

[Docker资讯] 对于开源和微服务,我有几点不同于别人的想法

[复制链接]
舞操的头像 楼主
发表于 2016-6-8 20:56:14 | 显示全部楼层 |阅读模式
  作为一个传统IT人,一直从事商业闭源软件开发,谈一谈对新兴的互联网模式的看法,难免在字里行间有一股浓浓的醋味,大家不要关注这些细节,主要来批判一下我对潮流形成和未来演进方向的逻辑分析和预测。

  野蛮生长到精细分工

  一种商业模式的发展初期一定是野蛮生长的,你可以想象最初的农民从游猎和采摘转向农业生产的过程,他们没有方法没有工具,没有人能帮助他们,甚至会有人嘲笑他们。于是他们探索方法论,并自己制造工具,正如现在互联网商业模式下的先驱们所做的事情是一样的,为了实现商业目标,他们利用一切能利用的现有技术手段(比如开源),大量的堆砌人力资源,最终开创了互联网商业模式。

  正如农业与狩猎的对比一样,新的商业模式对传统模式拥有巨大的优势,于是大量的人逐利而来不惜代价的投入互联网模式。但是,可以预见的是后来者大多会失败,因为只有巨大的财力才能支撑这种野蛮生长,当农民把大量的资源用于制造农具的时候,他就没有更多的资源用于农业的生产了,所以社会分工这种可能是源于蛮荒时代就存在的自然现象就会再次发生,专业的农具工匠把农民从自己不擅长的领域解放出来,这样农业这种崭新的商业模式才得以高速稳定的发展起来。

  同样的,可以预见的未来,野蛮生长的互联网模式一定会消亡,专业厂商会提供更加高效和低廉的工具,帮助任何一个希望采用崭新商业模式的人轻松跨越技术门槛,聚焦到自己熟悉的业务领域。

  互联网模式

  创新颠覆的是传统,那么哪些传统会被颠覆呢?我认为,科学的方法论支撑的传统是不会被颠覆的,比如社会化分工合作是基于人性基础上的符合逻辑的推论,只要这个世界的物理规律不变那么人性就不会变,人性不变那么社会化分工合作就是人类社会的必然趋势。

  那么传统的应用软件开发模式已经从作坊式进化到了大团队协同模式,从需求、设计到开发、测试再到部署、运维都是由专业化很强的团队来分工协作的。但是互联网模式却颠覆了这个模式,他们强调一体化即软件的全生命周期由一个团队独立完成。

  我们先不说这种模式的好坏,先来分析为什么会出现这样模式,其实原因就是他们做的业务没有任何现成的技术或产品能满足需求。这就像当初从猎人转变为农民的过程一样所有工具和方法都要自己去探索,那么虽然分工还是需要的,但是比分工更重要的是更强的执行力和更快的反应速度。同时,由于新的商业模式吸引了大量的资本,所以互联网巨头们可以利用资源优势随意的“任性”。

  互联网模式的基础

  基于以上原因,那么互联网模式的一切行为都是可以有合理的逻辑解释的:

  大量使用开源

  由于人的逐利行为,任何非主营业务的投入都是希望越少越好,互联网模式也是如此,他们清楚的知道技术并不是他们的主营,所以并不会真的野蛮到所有技术都自己开发,能有现成的就用,更关键的是这些技术都可以根据自己的需要进行修改。所以,互联网模式下,利用开源搭建自己的业务应用是合情合理的。

  但是,开源带来了另外一些问题,比如对开发人员的能力要求很高、后期维护成本居高不下、出现问题难以解决等等。所以,采用互联网模式的企业需要技术“牛人”来支撑。

  采用DevOps开发运维一体化模式

  DevOps运动是在这些“牛人”驱动下发展的,其实这个运动更像是系统软件开发而非应用软件开发。当我们去开发一个生命周期长达几十年的底层或中间件产品的时候,会采用类似的模式。我们知道,架构是一种平衡和取舍,底层产品和应用产品的差异在于平衡性能、功能、可靠性和成本等等诸多因素。

  显然,互联网模式有大量的资源,他们可以不考虑这种平衡,可以任性的使用大量的“牛人”和海量的技术人员来完成他们的业务应用系统。

  我认为,互联网模式是无法大规模复制的,只有前期的几个巨头能够支撑上万人的研发团队来满足业务的需求,任何其他企业妄图复制互联网模式只可能赔掉底裤。其实,互联网模式不需要复制,因为他最终会走下神坛回归科学的方法论。

  互联网模式的前景

  我们讨论互联网模式的前景,其实是在讨论开源产品的前景,因为大多数互联网模式都是建立在开源软件基础上的,这两者相辅相成相互推动。我本人是一直从事商业软件开发的,从这个角度看如果我说开源存在这样那样的问题,就显得有点酸,所以这一段我不会举任何例子来证明什么。而且首先,我对开源项目致以最大的敬意,从推动社会进步和改变世界的角度看,开源做出了巨大的贡献。

  从人性看

  我们都知道人性是自私的,我们每个人都会为自己的利益而奋斗,希望获得社会的承认。我也不否认可能会有真正的大公无私的人,去把自己劳动和创造完全不求回报的贡献出来。但是,如果说每个开源项目都是由如此伟大的人组成的,我相信这已经颠覆了人性了。我更愿意相信参与开源项目的人,都是抱着某种利益需求的,这样开源反而能走的更远些。

  我斗胆来一点点的搜寻开源项目的利益链条和前进动力。

  为什么要开源?

  我们知道任何事情都有其内在的逻辑因果,开源这件事也不会例外。传统的商业模式都是闭源的,这里面的因果非常简单:你通过大量的投入,获得了一种非常核心的关键技术,这种技术足以遏制和超越对手(甚至改变世界)。那么,你难道不想收回投资吗?难道不希望自己的技术得到社会的认可,并让所有为这个技术做出贡献的人获得更好的生活嘛?

  显然,直接公开这个核心技术不但是对自己劳动的不尊重,也是对整个团队的不尊重。我觉得像知识共享这样的说法我是不认同的,知识分为两种:一种是对自然的发现,一种是从无到有的创造发明。前者我们知道确实是被共享的,究其原因是你没有办法阻止其他人去发现相同的自然规律,而且现行的社会规则会给予第一个发现者非常好的回报;而后者则不同,对于一种从无到有的创造,社会能给予的唯一回报就是商业回报,如果这种发明被迅速模仿甚至公开,那么任何回报都没有,也可以变相的认为毫无价值。如果是一种毫无价值的知识,还有必要分享吗?

  所以,我们知道为什么有闭源,就可以分析出为什么会有开源了。一种可能是某个伟大的个体靠个人的力量掌握了一种核心技术,并无私的公开出来;还有一种可能就是无法在商业竞争中打败竞争对手,又不甘于自己的努力和劳动完全被埋没,于是将核心技术公开出来;当然,还有一种是出于人性对商业垄断的厌恶,自发的组织起来进行的“抵抗运动”。

  开源是如何被推动的?

  任何一件事情要被推动其背后必然有商业利益存在,开源也不会例外。在共产主义实现之前,我们找不到任何符合因果逻辑的公益行为来推动理想的开源,而开源本身的用户群也都是商业群体,我不太能理解一个组织无偿的投入资金和人力其目的仅仅是为了其他商业机构能够更低成本的去获利。

  所以,开源的第一推手显然还是商业机构,商业机构推动开源无非有几种目的:第一种为打击竞争对手,这从商业上讲是非常划算的买卖,其效果我们也是有目共睹,比如高端产品用我的低端产品用开源的,从而遏制竞争对手从低端做起;第二种依然是打击竞争对手,大家知道世界上所有的事情都已经有人在做了,任何一个行业都是有准入门槛的,这包括行业知识的壁垒、技术的壁垒、资金的壁垒、客户群的壁垒等等,那么任何一个可以打破某种壁垒的方法都是会受到无孔不入的资本的青睐的,开源就是一个打破技术壁垒和知识壁垒的好手段第三种依然是竞争需要,开源的出现为原来壁垒森严的闭源生态带来的不仅仅是商业上的冲击,更多的带来的是对人性的诱惑,传统的程序员可能做一辈子码农都没有机会接触一个商业软件的核心引擎,那么现在机会来了任何人只要愿意都可以随意的浏览和使用开源大牛们构造的核心。从程序员的角度讲,掌握了开源就拥有了更好的职业生涯和竞争力。

  开源和闭源之争

  只要有合乎逻辑的利益存在,那么开源就会继续存在。无论开源还是闭源,显然都是具有社会商业价值的,闭源产品为创新者和客户带来价值,开源项目同样为客户和众多二次创新者带来价值。选用开源还是闭源,完全是一个企业基于自身现状的一种考虑,无关乎开源闭源的优劣。其实任何优劣都会因需求与资源的不同而变化,现在舆论过多的强调了开源的优势,从某种意义上任何开源都会转化为闭源,比如你还能认为现在还在使用Tomcat 2.0的企业是基于开源的吗?

  一个企业做出选择一定是在平衡各种不同的风险和收益,如果盲目的跟风那么只会自食苦果。

  我对开源的看法

  从我个人观点来说,我觉得拥有第一次创新的开源项目是最具生命力的,那些竞争失败而开源的、为打击竞争对手开源的以及对成功商业产品模仿的开源项目,我是不太看好的。从结果上看,我认为一个开源项目,如果不断地有商业机构肯花费资金来基于它进行闭源研发,我觉得这就是一个优秀的开源项目,换句话说只有能成为闭源的开源项目才是有商业价值的好项目。

  从商业角度看,开源项目在一个商业模式初期是非常有竞争力的,野蛮生长需要的就是速度和灵活性以及大量低成本的试错;但是一但商业模式趋于稳定,那么稳定可靠低成本的闭源产品肯定会替换开源模式,如果说IT系统是运载企业前进的汽车,毕竟不是谁都有财力为自己量身打造一款专属的汽车的。

  精细分工——再谈微服务

  微服务无论有多大的争议,你喜欢也好讨厌也好,从社会分工的角度来看,是让分工更加精细的一种必然手段。所以,微服务一定是未来的一种发展趋势。但是,微服务不等于微服务架构,微服务架构是人们在微服务概念上做出的一系列推论,这些推论可能是对的也可能是错的。

  精细分工需要更先进的技术

  历史上任何一次更细致的分工发生,必然伴随着更先进的生产工具的产生。第一次工业革命伴随着蒸汽机的完善,靠着先进的机器摧毁了传统的手工作坊,不但支持了工厂化的分工模式,甚至导致了区域性分工(比如英国的区域性分工,乃至后来的全球分工)。第二次工业革命也是因电子电力的发展,产生了以电力为基础的先进工具才产生的。

  那么微服务化这种相对于传统业务更精细的分工模式,同样也需要更先进的技术和工具的支持。业界流传的“大道至简”、“简单就是美”是错的,我想说哲学、尤其是古老的传统哲学,不要再来指导现代的科技生产了。我们的生产工具已经复杂到了量子水平,纳米级别的生产工艺达到了上亿晶体管的集成度,一辆普通的家用轿车上万个零部件,你还跟我谈大道至简,我们回归刀耕火种算了吧。微服务,相对于传统的应用,需要更先进的软件来支撑这是毋庸置疑的。

  那么什么是更先进的软件?更先进的软件意味着:更高的效率、更高的可靠性、更好伸缩性、更高的可维护性、以及对业务更友好等等。开源软件可以胜任吗?我的观点是不能,开源软件从商业模式上就先天的决定了他的缺陷。引用一位网友的话:“用开源做项目,就是一个不断重复踩坑和填坑的过程”,我们做产品的也是如此,我们已经尽可能的不用开源来做核心模块,但是即便是外围模块也是如履薄冰,哪怕是非常成熟的开源也可能有很深的坑。

  可靠性和稳定性是一方面,另一方面使用开源过于复杂,任何一种开源都不能独立的解决业务问题,通常我们需要一个深深的技术栈,从栈顶到栈底罗列了至少七八种开源产品,每种产品都会面临两三种选择,同时每个开源产品本身又会引用七八种乃至十数种其他的开源产品。虽然我们知道,要实现更加细致的分工就需要更复杂的工具,但是工具本身不应该将复杂性暴露出来,一台汽车虽然本身有上万种零件,但这种内部的复杂度对于使用者来说是基本透明的。

  那么正如我们前面说的,对如此复杂而且把如此复杂的内部暴露给用户的软件系统,已经不能像传统工具一样来使用了。对于传统闭源软件,我们的应用开发人员在多数情况下都会信赖,出了问题大多数也是应用问题而非系统问题;而面对开源的技术栈,这种信心就不存在了,那么我们传统上对高质量工业产品的信赖就转嫁到对技术大牛的依赖上来。

  事实上,这是一种社会的退步,技术大牛们不断的转场,从一个互联网公司跳到另一个互联网公司,去解决一个个类似的问题。我不觉得这是合理的做法,这只是科技发展过程中的一个过渡,科技的发展应该使人们更加简单的使用工具,而非把工具做的更简单,这才应该是“简单就是美”。

  微服务更需要跨组织的分工合作

  DevOps运动是牛人经济的必然结果,没有这个运动就不可能把大量的复杂开源运用起来。但我觉得最终DevOps运动会成为牛人经济的终结者,因为我们总是希望业务的发展更加经济、更加易于管理,这就不能局限于小范围的分工合作,而是希望更大的分工。DevOps虽然在团队内部实现了从设计、开发、测试到部署运维的分工合作,但是限于团队规模过小,还不能有效发挥分工合作的作用。

  就像传统的制造业,如果把微服务看成是汽车的零部件的话,那么整个汽车的生产就是一个巨大的社会化分工协作,DevOps与之相比就如同传统的手工作坊与大工业生产的比较一样。当然,软件工业与传统工业相比还存在巨大的生产方式上的差异和落后,类比的话传统的业务软件更像是将整车与零部件一同生产,微服务化已经有一种更大社会化分工的趋势了,虽然DevOps更像是零部件生产厂商去整车生产厂安装和维护汽车的零部件。那么未来,随着闭源专业厂商的逐步成熟,我相信牛人经济与DevOps运动一定会被终结,取而代之的一定是普通人都可以使用的工具,以及更标准化的业务零部件。

原文作者:李东  来源:开发者头条
发表于 2016-6-9 20:31:47 | 显示全部楼层
赞一个
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部