一个互联网企业的发展,归根结底便是业务的发展,而影响一个互联网企业的业务发展的紧张有3个成分:市场、技能、管理。我称之为业务发展铁三角,任何一个成分的不敷都将导致企业业务的发展结束不前。
互联网行业是一个快速发展、快速变革的行业,新的业务、新的机会层出不穷,新的技能如雨后春笋般冒出,NoSQL、大数据、云、Node.js、Docker等,无时不刻都在轰炸程序员们的脑袋,难怪中国的程序员都流传一个说法:过了30岁不能做技能事情了,由于技能发展太快了!
快节奏带来机会,但对付技能职员来说,更多的是带来寻衅,乃至有时候是困惑。例如:

Docker很火哦,咱们要不要用呢 ?
Node.js好牛逼啊,我们用上就更牛逼了......
大数据和云是业界发展趋势,我以为我们也该当跟上技能发展的趋势......
还有很多类似的问题和想法,实在归根结底可以归纳为一个统一的问题:是什么推动了一个互联网企业的技能发展?
关于这个问题的回答,基本上可以分为几个范例的派别:
潮流派
潮流派的范例特色便是对付新技能特殊热衷,紧跟技能潮流,当有新的技能涌现时,急迫的想将新的技能运用到自己的产品中。例如:
NoSQL很火,咱们要大规模的切换为NoSQL;
大数据好牛逼呀,将我们的MySQL切换为Hadoop吧;
Node.js是的JavaScript统一前后端,这样非常有助于我们事情的开展;
守旧派
守旧派的范例特色和潮流派恰好相反,对付新技能抱有很强的戒备心,稳定压倒统统,已经节制了某种技能,就一贯用这种技能打天下。就像那句俚语说的,“如果你手里有一把锤子,那么所有的问题都变成了钉子”,守旧派便是拿着一把锤子办理所有的问题。例如:
MySQL咱们用了这么久了,很熟习了,业务也用MySQL、数据剖析也用MySQL、报表也用MySQL吧;
Java措辞我们都很熟,业务用Java、工具用Java,平台也用Java;
跟风派
跟风派与潮流派不同,这里的跟风派不是指随着技能潮流,而是指随着竞争对手的步子走。
大略来说,判断技能的发展就看竞争对手,竞争对手用了咱们就用,竞争对手没用咱们就等等看。例如:
这项技能腾讯用了么? 腾讯用了我们就用;
阿里用了Hadoop,他们都在用,肯定是好东西,咱们也要尽快用起来,以提高咱们的竞争力;
Google都用了Docker,咱们也用吧;
相信不用多说,大家都能看出这几个范例派别存在的问题:
潮流派的问题
首先,新技能既须要韶光成熟,如果刚出来就赶紧用,此时新技能还不怎么成熟,实际运用很可能碰着各种“坑”;
其次,新技能须要学习,须要花费一定的韶光去节制,这个也是较大的本钱;如果等到节制了却果技能又不适用,便是一种较大的人力摧残浪费蹂躏了。
守旧派的问题
守旧派的紧张问题是不能享受新技能带来的收益,由于新技能很多都是为理解决以前技能存在的固有缺陷。就像汽车取代马车一样,不是量变而是质变,带来的收益不是线性变革的,而是爆发式变革的。
如果忽略技能的发展,形象一点说有了拖沓机,你还偏偏要用牛车。
跟风派的问题
可能很多人都会认为,跟风派与“潮流派”和“守旧派”比较,是最有效的策略,既不会承担“潮流派”的风险,也不会遭受“守旧派”的丢失,花费的资源也少,切实其实便是一举多得。
看起来很美妙,但跟风派最大的问题在于如果没有风可跟的时候怎么办。一种情形便是如果你是领头羊怎么办,其他人都准备跟你的风呢;
其余一种情形便是竞争对手的这些信息并不那么随意马虎获取,纵然获取到了一些信息,大部分也是不全面的,一欠妥心可能就变成邯郸学步了。
纵然有风可跟,实在也还是存在问题的。俗话说:橘生淮南则为橘,生于淮北则为枳,叶徒相似,实在味不同。适用于竞争对手的技能,并不一定适用于自己,盲目模拟可能带来相反的效果。
既然这几个范例派别都存在问题,那么互联网技能发展的驱动力究竟是什么 ?
这个问题之以是让人困惑,我以为关键的缘故原由还是在于不管是潮流派、守旧派,还是跟风派,都是站在技能本身的角度来考虑问题的,正所谓“不识庐山真面,只缘身在此山中”。
因此,要想看到庐山真面孔,只有跳出技能的角度,从一个更广更高的角度来考虑这个问题,这个角度便是互联网企业的发展。
互联网企业的业务基本上可以大概分为两类:一类是供应“产品”,一类是供应“做事”。
供应产品:360的杀毒软件、苹果的iPhone、UC的浏览器。等都属于这个范畴,这些产品实质上和传统的制造业产品类似,都是具备了某种“功能”,能够完成某些任务;
供应做事:百度的搜索、淘宝的购物、微博的资讯、腾讯的IM。都属于这个范畴,和“供应产品”的业务不同是,供应做事的业务更加符合互联网的特色和实质:“互联” +“ 网”。所往后续的文章评论辩论的“互联网技能”,便是指“供应做事的互联网业务的技能”。
“互联”是指这些业务将原来分散的个体贯串衔接成了一个弘大的整体,可以将人连接,也可以将信息连接,也可以将数据连接,连接在一起的群体的代价比群体中单个个体的代价之和要大得多;“网”有两种含义:一个是指通过数据网络连接(与传统的电话网络等比较)、一个是指个体互联成“网状”的构造。
如上图,在这个铁三角中,业务是处于三角形的中央,绝不夸年夜的说,市场、技能、管理的动作都是为了支撑企业业务的发展。市场和管理对业务的影响不在本文的磋商范畴之内,我们紧张来磋商一下“技能”和“业务”之间的关系和相互如何影响。
对付“产品”类的业务,答案实在很明显:技能创新不断推动业务的发展。
这个道理和传统的制造行业的产品创新是一样的:产品上的技能创新 -> 带来更强大的功能 -> 推动产品的市场不断扩大 -> 市场扩大竞争更加激烈 -> 反过来又对技能创新提出了更高的哀求,如此循环往来来往,技能创新不断的推动产品的提升、业务的扩展。
对付“产品”类业务,为了追求不断的创新,纵然“潮流派”或者“跟风派”存在风险或者问题,但为了能够取得领先,也必须不遗余力的去考试测验,否则等到技能没有风险的时候再去用,自己可能已经掉队对手一大截了。而且不但要做“潮流派”,还要做“跟风派”,更要做“领头羊”,这样才能在激烈的竞争市场环境下不断的保持领先的上风。
例如:
苹果开拓智好手机,将诺基亚推下王座,自己成为环球手机行业的新王者,便是技能创新驱动产品的范例例子;
2G时期,UC浏览器独创的云端架构,很好的办理了上网慢的问题;智能机时期,UC浏览器又自主研发全新的U3内核,兼顾高速、安全、智能及可扩展性,这些技能创新是UC浏览器成为了环球最大的第三方手机浏览器最强有力的推动力。
而对付“做事”类的业务,答案和产品类业务恰好相反:业务发展推动技能的发展。
为什么会涌现截然相反的差别呢?这还须要从“产品”和“做事”的实质差别来看。用户选择一个产品的根本驱动力是其“功能”,例如功能是否强大,外不雅观是否俊秀,用户体验是否良好;而用户选择一个做事的根本驱动力不是功能,而是“规模”。
例如:选择UC浏览器还是选择QQ浏览器,更多的人是根据个人喜好和体验来决定的;而选择微信还是WhatsApp,就不是根据它们之间的功能差异来选择的,而是根据其规模来选择的。就像我更喜好WhatsApp的简洁,但我的的朋友和周边的人都用微信,那我也不得不用微信。
当“规模”成为业务的决定成分后,做事模式的创新成为了业务发展的核心驱动力,而产品只是为了完成做事而供应给用户。以淘宝为例:淘宝供应的“网络购物”是一种新的做事,这种业务与传统的到实体店购物是完备不同的,而为了完成这种业务,须要“淘宝网”、“支付宝”、“一淘”、“菜鸟物流”等多个产品。
比如说如果我技能创新,开拓一个耗电量只有微信的1/10,用户体验比微信好10倍的产品,你以为现在的微信用户都会抛弃微信,而转投我的这个产品么?我相信绝大部分人都不会,由于微信不是一个互联网产品,而是一个互联网做事,你一个人换到其它类微信类产品是没故意义的。
因此,做事类的业务发展路径是这样的:提出一种创新的做事模式 -> 吸引了一批用户 -> 业务开始发展 -> 吸引了更多用户 -> 做事模式不断完善和创新 -> 吸引越来越多的用户,如此循环往来来往。在这个发展路径中,技能并没有成为业务发展的驱动力,反过来由于用户规模的不断扩展,业务的不断创新和改进,对技能会提出越来越高的哀求,因此是业务驱动了技能发展。
对付“做事”类业务,业务成为了技能发展的驱动力。因此“潮流派”、“跟风派”、“守旧派”都是不可取的,什么时候采纳什么技能是由业务的规模决定的。
对付“产品”类业务来说,技能的发展和详细的产品有很强的关系,比如说UC浏览器的技能优化和苹果手机的技能优化差别会非常大,因此难以形成一套技能发展的模式;而对付“做事”类业务来说,虽然业务千差万别,但“规模”的发展对技能的影响和推动效果是基本同等的,可以归纳出一套成熟的技能发展体系,本文就试图在这个方向上分几个主题进行一番探索。
前面讲了那么一大堆理论,听起来有点道理,但实践是考验真理的唯一标准,究竟事实是否便是这样呢?我们可以回顾一下几个范例互联网企业的技能发展进程。这里挑选了两个最范例的企业:淘宝、腾讯。之以是挑选这两个,一个是由于大家耳熟能详,其余一个也是由于资料好找。
淘宝的技能发展
注:以下内容紧张摘自《淘宝技能发展》。
淘宝技能发展紧张经历了“个人网站”、“Oracle/支付宝/旺旺”、“Java时期1.0”、“Java时期2.0”、“Java时期3.0”、“分布式时期”。我们看看每个阶段的紧张驱动力是什么。
1、个人网站
2003年4月7日马云提出成立淘宝,2003年5月10日淘宝就上线了,中间只有1个月,怎么办?淘宝的答案便是:买一个。
估计大部分人很难想象如今技能牛气冲天的阿里最初的淘宝竟然是买来的,我们看看当初决策的依据:
“当时对全体项目组来说压力最大的便是韶光,怎么在最短的韶光内把一个从来就没有的网站从零开始建立起来?理解淘宝历史的人知道淘宝是在 2003 年 5 月 10 日上线的,这之间只有一个月。假如你在这个团队里,你怎么做?我们的答案便是:买一个来。”
大家看到没有,这个时候没有过多考虑技能是否牛逼、没有过多考虑性能是否海量、没有考虑稳定性如何,紧张的考虑便是:快!
由于此时业务哀求快速上线,韶光不等人,等你花几个月乃至10几个月搞出1个牛逼的系统出来,可能市场机会就没有了,黄花菜都凉了。
同样,在考虑如何买的时候,淘宝的决策依据紧张也是”快“:
“买一个网站显然比做一个网站要省事一些,但是他们的梦想可不是做一个小网站而已,要做大,就不是随便买个就行的,要有比较低的掩护本钱,要能够方便的扩展和二次开拓。
那接下来便是第二个问题:买一个什么样的网站?答案是:轻量一点的,大略一点的”。
买一个别系是为了”快速可用“,而买一个轻量级的系统是为了”快速开拓“,由于系统上线后肯定有大量的需求须要做,这个时候能够快速开拓就非常主要。
从这个实例我们可以看到:淘宝最开始的时候业务哀求便是”快“,因此反过来哀求技能同样要”快“,业务决定技能。
第一代的技能架构如下图:
2、Oracle/支付宝/旺旺
淘宝网推出后,由于恰好碰到非典,网购很火爆,加上采纳了成功的市场运作,流量和交易量迅速上涨,业务发展很快,在 2003 年底,MySQL 已经撑不住了。
一样平常人或者团队在这个时候,可能就开始优化系统、优化架构了、分拆业务了,由于这些是大家耳熟能详也很拿手的动作。那我们来看看淘宝这个时候怎么采纳的方法:
“技能的替代方案非常大略,便是换成 Oracle。换 Oracle 的缘故原由除了它容量大、稳定、安全、性能高之外,还有人才方面的缘故原由。”
可以看出这个时候淘宝的策略紧张还是”买“,买更高配置的Oracle,这个是当时情形下最快的方法。
除了购买Oracle,后来为了优化,又买了更牛逼的存储:
“后来数据量变大了,本地存储弗成了。买了 NAS(Network Attached Storage:网络附属存储),NetApp 的 NAS 存储作为了数据库的存储设备,加上 Oracle RAC(Real Application Clusters,实时运用集群)来实现负载均衡。”
我们思考一下,为什么淘宝在这个时候连续采纳“买”的办法来快速办理问题呢?我们可以从韶光上看出端倪:此时离刚上线才半年不到,业务飞速发展,最快的办法支撑业务的发展还是去买。如果说第一阶段买的是“方案”,这个阶段买的便是“性能”。
换上Oracle和昂贵的存储后,第二代架构如下:
3、Java时期1.0 - 洗手不干
淘宝切换到Java的缘故原由很有趣,紧张由于找了一个PHP的开源连接池SQL Relay连接到Oracle,而这个代理常常去世锁,去世锁了就必须重启,而数据库又必须用Oracle,于是决定换个开拓措辞。末了淘宝挑选了Java,而且当时挑选Java,也是请Sun公司的人,这帮人很牛逼,先是将淘宝网站从PHP热切换到了Java,后来又做了支付宝。
这次切换的最紧张缘故原由是由于技能影响了业务的发展,你说动不动就去世锁、然后就要重启,这个是对用户业务严重的影响。从业务的角度来看这是不得不办理的技能问题。
但这次淘宝为什么没有去“买”,是有点迷惑的地方。我们看最初选择SQL Relay的缘故原由:
“但对付 PHP 措辞来说它是放在 Apache 上的,每一个要求都会对数据库产生一个连接,它没有连接池这种功能(Java 措辞有 Servlet 容器,可以存放连接池)。那如何是好呢?这帮人打探到 eBay 在 PHP 下面用了一个连接池的工具,是 BEA 卖给他们的。我们知道 BEA 的东西都很贵,我们买不起,于是多隆在网上寻寻觅觅,找到一个开源的连接池代理做事 SQLRelay”
不清楚当时到底有多贵,Oracle都可以买,连接池买不起 ?以是我个人觉得这次切换措辞,更多的是为往后业务发展做铺垫,毕竟当时PHP措辞远远没有Java那么火,那么好招人。淘宝选择Java措辞的情由可以从侧面验证这点:
“Java 是当时最成熟的网站开拓措辞,它有比较良好的企业开拓框架,被天下上主流的大规模网站普遍采取,其余有 Java 开拓履历的人才也比较多,后续掩护本钱会比较低。”
从PHP改为Java后,第三代技能架构如下:
4、 Java时期2.0 - 坚若磐石
Java2.0时期,淘宝做了很多优化事情:数据分库、放弃 EJB、引入 Spring、加入缓存、加入 CDN、采取开源的 JBoss。为什么在这个时候要做这些动作? 原文作者很好的概括了做这些动作的缘故原由:
“这些杂七杂八的修正,我们对数据分库、放弃 EJB、引入 Spring、加入缓存、加入 CDN、采取开源的 JBoss,看起来没有章法可循,实在都是环绕着提高容量、提高性能、节约成本来做的”
我们思考一下,为什么在前面的阶段,淘宝考虑的都是“快”,而现在开始考虑“容量、性能、本钱”了呢?而且为什么这个时候不采纳“买”的办法来办理容量、性能、本钱问题呢?
大略来说,便是“买”也搞不定了,此时的业务发展情形是这样的:
“随着数据量的连续增长,到了 2005 年,商品数有 1663 万,PV 有 8931 万,注册会员有 1390 万,这给数据和存储带来的压力依然山大,数据量大,性能就慢。”
原有的方案存在的固有缺陷,随着业务的连续发展,已经不是靠“买”能够办理的了,此时必须从全体架构上去进行调度和优化。比如说Oracle再牛逼,在做like类搜索的时候,也不可能做到纯粹的搜索系统如Solr、Sphinx等的性能,由于这是机制决定的。
其余,随着规模的增大,纯粹靠买的一个范例问题开始成为主要的考虑成分,那便是本钱。当买一台两台Oracle的时候,可能对本钱并不怎么关心,但如果要买100台Oracle,本钱便是一个关键成分了。这便是“量变带来质变”的一个范例案例。
Java 架构经由各种优化,第四代技能架构如下:
5、Java时期3.0 和分布式时期
Java时期3.0时期我个人认为是淘宝技能飞跃的开始,大略来说便是淘宝技能从商用转为“自研”,范例的便是去IOE化。
分布式时期我认为是淘宝技能的修炼成功,到了这个阶段,自研技能已经自成一派,除了支撑本身的海量业务外,也开始影响全体互联网的技能发展。
详细的缘故原由这里就不详细剖析,留给读者按照前面的思路去剖析。
手机QQ的技能发展
注:以下内容紧张摘自《QQ1.4亿在线背后的故事》
手机QQ的发展进程按照用户规模可以粗略划分为4个阶段:十万级、百万级、千万级、亿级,不同的用户规模,IM后台的架构也不同,而且基本上都是用户规模先上去,然后产生各种问题,倒逼技能架构升级。
1、十万级 - IM1.X
最开始的手机QQ后台如下,可以说是大略的不能再大略,普通得不能再普通的一个架构了(是否会感叹原来神一样的公司开始也是屌丝一个呀 ):
2、百万级 - IM2.X
业务发展:2001年,QQ同时在线打破一百万
第一代架构很大略,但也很明显不可能支撑百万级的用户规模,紧张的问题有:
以接入做事器的内存为例,单个在线用户的存储量约为2KB,索引和在线状态 50字节,好友表 400个好友 5字节/好友 = 2000字节,大致来说,2G内存只能支持一百万在线用户;
CPU/网卡包量和流量/交流机流量等瓶颈;
单台做事器支撑不下所有在线用户/注册用户;
于是针对这些问题做架构改造,IM2.X的终极架构如下:
3、千万级 - IM3.X
业务发展:2005年,QQ同时在线打破一千万。
第二代架构支撑百万级用户是OK的,但支撑千万级用户又有问题,表现如下:
同步流量太大,状态同步做事器碰着单机瓶颈;
所有在线用户的在线状态信息量太大,单台接入做事器存不下,如果在线数进一步增加,则乃至单台状态同步做事器也存不下;
单台状态同步做事器支撑不下所有在线用户;
单台接入做事器支撑不下所有在线用户的在线状态信息;
针对这些问题,架构须要连续改造升级,IM3.X的终极架构如下:
4、亿级用户 - IM1.X
业务发展:2010.03,QQ同时在线人数过亿
第三代架构此时也不适应了,紧张问题有:
灵巧性很菜:“昵称”长度增加一半,须要两个月、增加“故乡”字段,须要两个月、最大好友数从500变成1000,须要三个月。
无法支撑这些关键功能:上万好友、隐私权限掌握、PC QQ与手机QQ别互踢、微信与QQ互通、异地容灾。
除了不适应外,还有一个更严重的问题:
“IM后台从1.0到3.5都是在原来根本上做改造升级,但是:持续打补丁已经难以支撑亿级在线,IM后台4.0必须从头开始,重新设计实现!
”
决定重新打造一个这么繁芜的系统,不得不佩服当时决策人的勇气和蔼魄!
!
重新设计的IM4.0架构如下,和之前的架构比较,架构本身都拆分为两个紧张的架构:存储架构和通信架构:
通过上面对淘宝技能发展和手机QQ的架组成长,我们可以看到,这两个实例证明了我们之前的推断:对付供应互联网做事的企业来说,互联网技能的发展,背后的驱动力是业务的发展。
本文首发于InfoQ垂直号【聊聊架构】,ID:archtime
GTLC年度演讲高朋王坚来啦!
从生理学教授,到阿里云总裁、阿里巴巴集团CTO,再到集团技能委员会主席,只管王坚一起走来备受争议,但“去IOE”、阿里云、YunOS等阿里巴巴诸多创新中都深深烙上了王坚的印记。8月29~30日,在环球技能领导力峰会,为你讲述顶尖技能领导人的魅力。
8折优惠火热报名中,快戳阅读原文!
▽