程序员人生 网站导航

互联网技术发展之路(1) - 技术发展的驱动力

栏目:框架设计时间:2015-04-15 08:54:56

互联网技术发展之路(1) - 技术发展的驱动力

互联网行业是1个快速发展、快速变化的行业,新的业务、新的机会层见叠出,新的技术如雨后春笋般冒出,NoSQL、大数据、云、Node.js、Docker等,无时不刻都在轰炸程序员们的脑袋,难怪中国的程序员都流传1个说法:过了30岁不能做技术工作了,由于技术发展太快了!


快节奏带来机会,但对技术人员来讲,更多的是带来挑战,乃至有时候是困惑。例如:

1)Docker很火哦,我们要不要用呢 ?

2)Node.js好牛逼啊,我们用上就更牛逼了......

3)大数据和云是业界发展趋势,我觉得我们也应当跟上技术发展的趋势......

......

还有很多类似的问题和想法,其实归根结柢可以归纳为1个统1的问题:是甚么推动了1个互联网企业的技术发展

 

关于这个问题的回答,基本上可以分为几个典型的派别:

1)潮流派

潮流派的典型特点就是对新技术特别热中,紧跟技术潮流,当有新的技术出现时,迫切的想将新的技术利用到自己的产品中。

例如:

NoSQL很火,我们要大范围的切换为NoSQL;

大数据好牛逼呀,将我们的MySQL切换为Hadoop吧;

Node.js是的javascript统1前后端,这样非常有助于我们工作的展开;

......等等

 

2)守旧派

守旧派的典型特点和潮流派正好相反,对新技术抱有很强的戒备心,稳定压倒1切,已掌握了某种技术,就1直用这类技术打天下。就像那句俗语说的,“如果你手里有1把锤子,那末所有的问题都变成了钉子”,守旧派就是拿着1把锤子解决所有的问题。

例如:

MySQL我们用了这么久了,很熟习了,业务也用MySQL、数据分析也用MySQL、报表也用MySQL吧;

Java语言我们都很熟,业务用java、工具用java,平台也用java;

......等等

 

3)跟风派

跟风派与潮流派不同,这里的跟风派不是指随着技术潮流,而是指随着竞争对手的步子走。

简单来讲,判断技术的发展就看竞争对手,竞争对手用了我们就用,竞争对手没用我们就等等看。 

例如:

这项技术腾讯用了么? 腾讯用了我们就用;

阿里用了Hadoop,他们都在用,肯定是好东西,我们也要尽快用起来,以提高我们的竞争力;

Google都用了Docker,我们也用吧;

......等等

 

相信不用多说,大家都能看出这几个典型派别存在的问题:

1)潮流派

首先,新技术既需要时间成熟,如果刚出来就赶快用,此时新技术还不怎样成熟,实际利用极可能遇到各种“坑”;

其次,新技术需要学习,需要花费1定的时间去掌握,这个也是较大的本钱;如果等到掌握了结果技术又不适用,就是1种较大的人力浪费了

 

2)守旧派

守旧派的主要问题是不能享受新技术带来的收益,由于新技术很多都是为了解决之前技术存在的固有缺点。就像汽车取代马车1样,不是量变而是质变,带来的收益不是线性变化的,而是爆发式变化的。

如果疏忽技术的发展,形象1点说有了拖拉机,你还恰恰要用牛车。

 

3)跟风派

可能很多人都会认为,跟风派与“潮流派”和“守旧派”相比,是最有效的策略,既不会承当“潮流派”的风险,也不会遭受“守旧派”的损失,花费的资源也少,简直就是1举多得。

看起来很美好,但跟风派最大的问题在于如果没有风可跟的时候怎样办。1种情况就是如果你是领头羊怎样办,其他人都准备跟你的风呢;

另外1种情况就是竞争对手的这些信息其实不那末容易获得,即便获得到了1些信息,大部份也是不全面的,1不谨慎可能就变成邯郸学步了。

即便有风可跟,其实也还是存在问题的。俗语说:橘生淮南则为橘,生于淮北则为枳,叶徒类似,其实味不同。适用于竞争对手的技术,其实不1定适用于自己,盲目模仿可能带来相反的效果。

 

既然这几个典型派别都存在问题,那末互联网技术发展的驱动力究竟是甚么 

 

这个问题之所以让人困惑,我觉得关键的缘由还是在于不论是潮流派、守旧派,还是跟风派,都是站在技术本身的角度来斟酌问题的,正所谓“不识庐山真面,只缘身在此山中”。

因此,要想看到庐山真面目,只有跳出技术的角度,从1个更广更高的角度来斟酌这个问题,这个角度就是互联网企业的发展。

 

互联网企业的业务基本上可以大概分为两类:1类是提供“产品”,1类是提供“服务”

提供产品:360的杀毒软件、苹果的iphone、UC的阅读器。。。。。。等都属于这个范畴,这些产品本质上和传统的制造业产品类似,都是具有了某种“功能”,能够完成某些任务;

提供服务:百度的搜索、淘宝的购物、微博的资讯、腾讯的IM。。。。。。都属于这个范畴,和“提供产品”的业务不同是,提供服务的业务更加符合互联网的特点和本质:“互联” +“ 网”。

“互联”是指这些业务将本来分散的个体连结成了1个庞大的整体,可以将人连接,也能够将信息连接,也能够将数据连接,连接在1起的群体的价值比群体中单个个体的价值之和要大很多;

“网”有两种含义:1个是指通过数据网络连接(与传统的电话网络等相比)、1个是指个体互联成“网状”的结构。

 

1个互联网企业的发展,归根结柢就是业务的发展,而影响1个互联网企业的业务发展的主要有3个因素:市场、技术、管理。我称之为业务发展铁3角,任何1个因素的不足都将致使企业业务的发展停滞不前



如上图,在这个铁3角中,业务是处于3角形的中心,绝不夸大的说,市场、技术、管理的动作都是为了支持企业业务的发展。市场和管理对业务的影响不在本文的探讨范畴以内,我们主要来探讨1下“技术”和“业务”之间的关系和相互如何影响。

 

对“产品”类的业务,答案其实很明显:技术创新不断推动业务的发展

这个道理和传统的制造行业的产品创新是1样的:产品上的技术创新 -> 带来更强大的功能  -> 推动产品的市场不断扩大 -> 市场扩大竞争更加剧烈 -> 反过来又对技术创新提出了更高的要求,如此循环往复,技术创新不断的推动产品的提升、业务的扩大。

 

对“产品”类业务,为了寻求不断的创新,即便“潮流派”或“跟风派”存在风险或问题,但为了能够获得领先,也必须不遗余力的去尝试,否则等到技术没有风险的时候再去用,自己可能已落后对手1大截了。而且不但要做“潮流派”,还要做“跟风派”,更要做“领头羊”,这样才能在剧烈的竞争市场环境下不断的保持领先的优势。

例如:

1)苹果开发智能手机,将诺基亚推下王座,自己成为全球手机行业的新王者,就是技术创新驱动产品的典型例子;

2) 2G时期,UC阅读器独创的云端架构,很好的解决了上网慢的问题;智能机时期,UC阅读器又自主研发全新的U3内核,统筹高速、安全、智能及可扩大性,这些技术创新是UC阅读器成了全球最大的第3方手机阅读器最强有力的推动力。

  

而对“服务”类的业务,答案和产品类业务正好相反:业务发展推动技术的发展

为何会出现截然相反的差别呢?这还需要从“产品”和“服务”的本质差别来看。用户选择1个产品的根本驱动力是其“功能”,例如功能是不是强大,外观是不是漂亮,用户体验是不是良好;而用户选择1个服务的根本驱动力不是功能,而是“范围”。

例如:选择UC阅读器还是选择QQ阅读器,更多的人是根据个人喜好和体验来决定的;而选择微信还是whatsapp,就不是根据它们之间的功能差异来选择的,而是根据其范围来选择的。就像我更喜欢whatsapp的简洁,但我的的朋友和周边的人都用微信,那我也不能不用微信。

 

当“范围”成为业务的决定因素后,服务模式的创新成了业务发展的核心驱动力,而产品只是为了完成服务而提供给用户。以淘宝为例:淘宝提供的“网络购物”是1种新的服务,这类业务与传统的到实体店购物是完全不同的,而为了完成这类业务,需要“淘宝网”、“支付宝”、“1淘”、“菜鸟物流”等多个产品。

比如说假设我技术创新,开发1个耗电量只有微信的1/10,用户体验比微信好10倍的产品,你觉得现在的微信誉户都会抛弃微信,而转投我的这个产品么?我相信绝大部份人都不会,由于微信不是1个互联网产品,而是1个互联网服务,你1个人换到其它类微信类产品是没成心义的。

 

因此,服务类的业务发展路径是这样的:提出1种创新的服务模式 -> 吸引了1批用户 -> 业务开始发展 -> 吸引了更多用户 -> 服务模式不断完善和创新 -> 吸引愈来愈多的用户,如此循环往复。在这个发展路径中,技术并没有成为业务发展的驱动力,反过来由于用户范围的不断扩大,业务的不断创新和改进,对技术会提出愈来愈高的要求,因此是业务驱动了技术发展。

 

对“服务”类业务,业务成了技术发展的驱动力。因此“潮流派”、“跟风派”、“守旧派”都是不可取的,甚么时候采取甚么技术是由业务的范围决定的。

 

对“产品”类业务来讲,技术的发展和具体的产品有很强的关系,比如说UC阅读器的技术优化和苹果手机的技术优化差别会非常大,因此难以构成1套技术发展的模式;而对“服务”类业务来讲,虽然业务千差万别,但“范围”的发展对技术的影响和推动效果是基本1致的,可以归纳出1套成熟的技术发展体系,本文就试图在这个方向上分几个主题进行1番探索。

 

前面讲了那末1大堆理论,听起来有点道理,但实践是检验真谛的唯1标准,究竟事实是不是就是这样呢?我们可以回顾1下几个典型互联网企业的技术发展历程。这里挑选了两个最典型的企业:淘宝、腾讯。之所以挑选这两个,1个是由于大家耳熟能详,另外1个也是由于资料好找。

 

【淘宝】

注:以下内容主要摘自《淘宝技术发展》,原文链接:http://kb.cnblogs.com/page/132724/

淘宝技术发展主要经历了“个人网站”、“Oracle/支付宝/旺旺”、“Java时期1.0”、“Java时期2.0”、“Java时期3.0”、“散布式时期”。我们看看每一个阶段的主要驱动力是甚么。

1. 个人网站

2003年4月7日马云提出成立淘宝,2003年5月10日淘宝就上线了,中间只有1个月,怎样办?淘宝的答案就是:买1个。

估计大部份人很难想象如今技术牛气冲天的阿里最初的淘宝居然是买来的,我们看看当初决策的根据:

 

当时对全部项目组来讲压力最大的就是时间,怎样在最短的时间内把1个历来就没有的网站从零开始建立起来?了解淘宝历史的人知道淘宝是在 2003 年 5 月 10 日上线的,这之间只有1个月。要是你在这个团队里,你怎样做?我们的答案就是:买1个来。

 

大家看到没有,这个时候没有过量斟酌技术是不是牛逼、没有过量斟酌性能是不是海量、没有斟酌稳定性如何,主要的斟酌就是:快!

由于此时业务要求快速上线,时间不等人,等你花几个月乃至10几个月弄出1个牛逼的系统出来,可能市场机会就没有了,黄花菜都凉了。

一样,在斟酌如何买的时候,淘宝的决策根据主要也是”快“:

 

买1个网站明显比做1个网站要省事1些,但是他们的梦想可不是做1个小网站而已,要做大,就不是随意买个就行的,要有比较低的保护本钱,要能够方便的扩大和2次开发。

那接下来就是第2个问题:买1个甚么样的网站?答案是:轻量1点的,简单1点的

 

买1个系统是为了”快速可用“,而买1个轻量级的系统是为了”快速开发“,由于系统上线后肯定有大量的需求需要做,这个时候能够快速开发就非常重要。

从这个实例我们可以看到:淘宝最开始的时候业务要求就是”快“,因此反过来要求技术一样要”快“,业务决定技术。

 

第1代的技术架构以下图:



2. Oracle/支付宝/旺旺

淘宝网推出后,由于正好碰到非典,网购很火爆,加上采取了成功的市场运作,流量和交易量迅速上涨,业务发展很快,在 2003 年底,MySQL 已撑不住了。

1般人或团队在这个时候,可能就开始优化系统、优化架构了、分拆业务了,由于这些是大家耳熟能详也很拿手的动作。那我们来看看淘宝这个时候怎样采取的措施:

技术的替换方案非常简单,就是换成 Oracle。换 Oracle 的缘由除它容量大、稳定、安全、性能高以外,还有人材方面的缘由。

 

可以看出这个时候淘宝的策略主要还是”买“,买更高配置的Oracle,这个是当时情况下最快的方法。

除购买Oracle,后来为了优化,又买了更牛逼的存储:

后来数据量变大了,本地存储不行了。买了 NAS(Network Attached Storage:网络附属存储),NetApp 的 NAS 存储作为了数据库的存储装备,加上 Oracle RAC(Real Application Clusters,实时利用集群)来实现负载均衡。

 

我们思考1下,为何淘宝在这个时候继续采取“买”的方式来快速解决问题呢?我们可以从时间上看出端倪:此时离刚上线才半年不到,业务飞速发展,最快的方式支持业务的发展还是去买。如果说第1阶段买的是“方案”,这个阶段买的就是“性能”。

 

换上Oracle和昂贵的存储后,第2代架构以下:




3. Java时期1.0 - 洗心革面

淘宝切换到Java的缘由很有趣,主要由于找了1个PHP的开源连接池SQL Relay连接到Oracle,而这个代理常常死锁,死锁了就必须重启,而数据库又必须用Oracle,因而决定换个开发语言。最后淘宝挑选了Java,而且当时挑选Java,也是请Sun公司的人,这帮人很牛逼,先是将淘宝网站从PHP热切换到了Java,后来又做了支付宝。

这次切换的最主要缘由是由于技术影响了业务的发展,你说动不动就死锁、然后就要重启,这个是对用户业务严重的影响。从业务的角度来看这是不能不解决的技术问题。

 

但这次淘宝为何没有去“买”,是有点疑惑的地方。我们看最初选择SQL Relay的缘由:

但对 PHP 语言来讲它是放在 Apache 上的,每个要求都会对数据库产生1个连接,它没有连接池这类功能(Java 语言有 Servlet 容器,可以寄存连接池)。那如何是好呢?这帮人刺探到 eBay 在 PHP 下面用了1个连接池的工具,是 BEA 卖给他们的。我们知道 BEA 的东西都很贵,我们买不起,因而多隆在网上寻寻觅觅,找到1个开源的连接池代理服务 SQLRelay”

 

不清楚当时到底有多贵,Oracle都可以买,连接池买不起 ?所以我个人感觉这次切换语言,更多的是为以后业务发展做铺垫,毕竟当时PHP语言远远没有Java那末火,那末好招人。淘宝选择Java语言的理由可以从侧面验证这点:

“Java 是当时最成熟的网站开发语言,它有比较良好的企业开发框架,被世界上主流的大范围网站普遍采取,另外有 Java 开发经验的人材也比较多,后续保护本钱会比较低。”

 

从PHP改成Java后,第3代技术架构以下:



4. Java时期2.0 - 坚若盘石

Java2.0时期,淘宝做了很多优化工作:数据分库、放弃 EJB、引入 Spring、加入缓存、加入 CDN、采取开源的 JBoss。为何在这个时候要做这些动作? 原文作者很好的概括了做这些动作的缘由:

这些杂7杂8的修改,我们对数据分库、放弃 EJB、引入 Spring、加入缓存、加入 CDN、采取开源的 JBoss,看起来没有章法可循,其实都是围绕着提高容量、提高性能、节俭本钱来做的”

我们思考1下,为何在前面的阶段,淘宝斟酌的都是“快”,而现在开始斟酌“容量、性能、本钱”了呢?而且为何这个时候不采取“买”的方式来解决容量、性能、本钱问题呢?

简单来讲,就是“买”也弄不定了,此时的业务发展情况是这样的:

随着数据量的继续增长,到了 2005 年,商品数有 1663 万,PV 有 8931 万,注册会员有 1390 万,这给数据和存储带来的压力仍然山东大学,数据量大,性能就慢。”

 

原本的方案存在的固有缺点,随着业务的继续发展,已不是靠“买”能够解决的了,此时必须从全部架构上去进行调剂和优化。比如说Oracle再牛逼,在做like类搜索的时候,也不可能做到纯洁的搜索系统如Solr、Sphinx等的性能,由于这是机制决定的。

 

另外,随着范围的增大,纯洁靠买的1个典型问题开始成为重要的斟酌因素,那就是本钱。当买1台两台Oracle的时候,可能对本钱其实不怎样关心,但如果要买100台Oracle,本钱就是1个关键因素了。这就是“量变带来质变”的1个典型案例。

 

Java 架构经过各种优化,第4代技术架构以下:


5. Java时期3.0 和散布式时期

Java时期3.0时期我个人认为是淘宝技术奔腾的开始,简单来讲就是淘宝技术从商用转为“自研”,典型的就是去IOE化。

散布式时期我认为是淘宝技术的修炼成功,到了这个阶段,自研技术已自成1派,除支持本身的海量业务外,也开始影响全部互联网的技术发展。

具体的缘由这里就不详细分析,留给读者依照前面的思路去分析。


【手机QQ】

注:以下内容主要摘自《QQ1.4亿在线背后的故事》

手机QQ的发展历程依照用户范围可以粗略划分为4个阶段:10万级、百万级、千万级、亿级,不同的用户范围,IM后台的架构也不同,而且基本上都是用户范围先上去,然后产生各种问题,倒逼技术架构升级。

1. 10万级 - IM1.X

最开始的手机QQ后台以下,可以说是简单的不能再简单,普通得不能再普通的1个架构了(是不是会感叹原来神1样的公司开始也是

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐