从开源社区到云计算
UNIX编程艺术讲到UNIX为何如此成功的第一个原因就是开源。当时的一些计算机大牛们,为了彼此间更好的合作,为了提高团队的效率,选择选择将源代码开放出去。在那个蛮荒的时代,因特网没有诞生,甚至最开始连TCP/IP都没有诞生,人们依赖脆弱的计算机网络进行一些文档的传输和技术上的交流。开源这件事是那些大牛比如Kim Tompthon,Dung Mcllroy的一些协作的习惯。后来诞生在伯克利大学的hacker们在编写Unix程序以及各种工具软件的时候也选择了这种开源。可以说开源软件是计算机历史中有史以来的一种优良的传统。
我们来分析一下为何那些人愿意把自己的劳动果实告诉其他人。我觉得原因有一下几点,首先是为了提升效率,那本书在讲到Unix文化的时候讲到,人们开放自己的源代码给别人首先是因为这样可以提升效率,别人做过的事自己可以不用再做。对自己对他人都有利。第二点是,炫吗,hacker们从事计算机事业,在那个时代首先是一件很刺激的事,非常高大上。开源这种高大上人士的习惯自然就被很多其他的hacker所沿用。第三点就是很多机构都从Unix的开源中获利,包括官方的和非官方的,所以开源这种行为当然得以快速发展,成为国外程序员的一种时尚。
开源软件促进了计算机技术的高速发展,全世界的计算机工程师,组成一个个开源社区,也许他们都不曾谋面,但是确完成了一个个伟大都工程。他们的开发模式是分布式的,每个开发者都无私的贡献着自己的代码,自己的智慧,这些程序员以一种非常单纯的目的从事这项事业。那些开放出去的源代码是每个后来者学习的珍贵资源,所有的程序员在构建属于自己的程序代码的时候都在直接或者间接的享受开源代码带来的好处。我们今天使用着一个个开源框架,开源代码库,快速构建着我们自己的应用,可是试想一下我们没有这些东西,没有开源的C++STL,没有开源的JDK,tomcat,netty这些东西,可能我们就意味着要么使用商业软件,使用商业软件的成本总的来说比较高的,可能不是每个公司都能承受,而且对于一个企业来说核心东西如果还是使用别人的东西,并不是每个公司都能接受。商业软件从目前的角度来说可能在某些领域还超越着相应开源软件,但是随着开发者的努力,开源软件的能力也会更加的完善。第二种选择是使用我们不知道实现并且也不收费的东西去做一些东西,这些东西廉价但是危险,因为他可能就是你后期的系统运维期间的一个定时Boom,而且你不知道怎么拆除他。或者我们要重头开始构建这些基础构建,这对于每个程序员来说都是一个灾难,你要加更多的班,也许收效还没那么明显,因为基础构建的bug可能让你头疼到炸。
国外开源从社区数量到规模到质量都比国内要好很多。原因一个就是上面说到的历史吗,人家有那种传统,hacker们崇尚开源。开发者们好凝聚,协作也很专业。另一个当然是国内外程序员生存的现状决定的。国外程序员可能觉得自己干着一份十分潇洒的职业,每天固定可能8小时不到的上班时间,剩下的时间就是自己,当然可以根据自己的兴趣爱好,干点想干的,并且这样收入依然是很高。国内就截然相反,程序员大多数都很苦逼的从事这项职业,每天加班到很晚,午夜之后除了孤魂野鬼,大多数都是还在加班或者下班回家的程序员,及时这样中国程序员的收入依然比较低。而且如果多余的时间去做开源软件的话,这项事业在国内几乎不产生收入。所以大多数人一是没有多余精力去做开源,二是不愿意去做开源。只有少部分对技术真正有情怀对开发者活跃在国外的开源社区,贡献自己的力量。
开源模式从生产力角度来说是通过提升生产效率的方式来促进生产力的发展。这种模式是免费的几乎不增加任何IT成本。这是一项非常伟大的事业,因为你的每一份努力,都优化着软件本身,都贡献着每一个业内人士,每一个程序员。多少程序员因为他们而少加班,多活了几年!
再说到云计算技术,这是一个被炒了十多年的概念。概念一度被炒的神之又神。分析一下这三个字,主语是云,谓语是计算,是云去计算,没有宾语或者对象,那计算的对象就是everything或者他能够计算的一切。那么就牵扯到两个东西,第一云是什么,第二怎么去计算。我觉得从字面理解,弄懂这两个问题基本就可以了。业内有个划分,从三个层次阐述了云计算,也就是著名的IAAS(Infrastructure as a Service),PAAS(Platform as a Service),SAAS(Software as a Service),从软件架构角度来划分,应当说是不存在问题的。IAAS关注的是云计算的基础设施,包括机器硬件资源,网络带宽资源,DB,文件系统,缓存存储资源等。这是每个IT互联网公司都必须投入的东西,是一块非常大,不可忽视的成本因素。大的互联网公司每年在这方面的投入达到几十上百亿的规模。问题不是在预算的规模,而是是否在每一个时间都需要这么多规模的基础设施。可能对于一个电商公司来说,在淡季他的基础设施资源很多处于闲置,CPU利用率和内存利用都很低,那么一开始的预算是不是在这个时间点就浪费了许多。所以在基础设施这一块如何做到弹性的支出是云计算的关键所在。所以很多云计算厂商提出了很多弹性的基础设施方案,比如亚马逊的ES3,EC2,阿里云的ECS等。可以按需扩展。再谈到PAAS层,这也是偏底层等软件服务,开发者要在云平台之上构建他们自己的应用,势必到牵扯到各种服务或组件,比如各种中间件(服务容器,消息队列系统,数据层等)。这些服务是应用产生的必需品。对于PAAS层来说,如果一般的软件服务商,如果从头构建这些基础构建的话,那将耗费非常大的时间和成本,而且开源的系统在某些情况下可能未必能立马满足你的需求,这个时候如果选择去修改开源软件然后可能要自己维护跟自己特性相关的分支,这也是一件成本比较高的事情。对于这种基础软件来说,开发成本相对于运维成本还是很低的。大部分公司招聘了很多人其实都是想让他们运维出一个更好的三代或者四代软件,这里的运维比较广义,一是处理系统出现的问题,bug,二是为了满足某些用户的需求而开发。其实从开发和运维的角度来说,大多数的互联网公司,对于运维的投入其实可能要高于初期开发,无数的程序员其实是疲于运维,疲于不休止的处理问题,疲于改需求,满足新需求。所以在云计算的各个层面,降低运维成本,让生长在云平台上的厂商付出更少的运维成本是个非常关键的问题。否则他们从将自己的应用部署在云平台上没有太多的意义。再讲到SAAS层,互联网软件厂商一旦到了云平台上,除了部署自己的平台应用之外自己本身也需要各种服务,比如对于一个电子商务公司来说,ERP服务可能是个必须的服务。对于这类服务,有些云平台可以自己提供出来,但是更好的方案是让那些ISV(Independent Software Vendors )厂商提供,一是他们更有经验,更了解用户,二是这对于云生态来说非常有必要。让更多的ISV厂商活跃在云上,整个生态环境才能更好,你的用户才能被你粘住。这里简单分析了一下各个层面,不是很全面。但是我们从分析中能得出的是,一是,云计算是在降低成本,包括,硬件,软件开发,系统运维,服务接入,二是,云计算大大提升了效率。对于告诉发展的当今互联网来说,如果你的老板足够有良心,有远见,如果云计算厂商都有“良心”,胸怀更宽广,就应当拥抱云计算,快速让你的应用构建起来,然后去抓住市场,发展自己。
云计算技术的发展,很多人把他和蒸汽机的发明和电气的发明应用对于时代的作用相提并论。也许他不能算是一项纯粹的发明,因为当中用到的虚拟化,中间件,软件技术都是都是成熟现有的技术。但是他在历史当中所起的作用,或者将要起的作用,都足以和前两者相提并论。极大都提升了社会生产力,势必导致行业或者产业结构发生巨变,导致生产关系的变化。这当中孕育着巨大的商机,除了云计算本身。
对于我们这些苦逼中国程序员来说,我们也希望看到这项技术的高速成熟发展,我们希望我们能用到各种云计算服务快速满足用户的需求,产品经理提出的需求,不用再加那么多班,不用再去半夜起立处理问题,不用再像个孤魂野鬼一样在夜间游荡回家。所以从事这项事业对于一个有情怀的程序员来说还是非常愿意去做的,其一真的蛮有挑战的,面临很多新的问题,其二产生的价值非常深远,对于开发者,对于用户,对于这个行业,对于这个行业会影响波及到的其他,更大一点的是社会生产力及可能的变革。
向开源社区的开发者及耕耘在云计算行业多年的有情怀的程序员,有良知的决策者致敬!