扫码打开虎嗅APP
本文来自微信公众号:阿朱说(ID:azhushuo),作者:吕建伟,原文标题:《云原生简史》,头图来自:unsplash
一、引子
1999年我自己发生了好几件事:
1. 我购买了两张盗版光盘:Sun Solaris OS、红帽Linux。
2. 正在用COM+、MTS,开发三层架构的局域网内的大型企业商用套件,由Windows客户端、中间层中间件、后台SQLServer数据库构成。
3. 自己尝试基于WebSphere,开发三层架构的互联网的企业应用,由浏览器Web(HTML/CSS/JavaScript)、JSP/servlet、EJB中间件、Oracle 数据库构成。我1997年学习Java,但一直没尝试开发点什么。
二、Unix
1964年,IBM发布划时代的System360大型主机,里面包含了System/36O操作系统,这个操作系统可以说是人类计算机史上第一个操作系统,也真正做到了多用户、多计算存储环境隔离、多分时。
在那个年月,IT产业刚刚开启,很多工业时代的巨头都想进入信息时代。如通用电气、霍尼韦尔等等,也都设计制造计算机。为了对抗IBM,通用电气出钱,产学研联合,1964年联合AT&T贝尔实验室、MIT麻省理工学院一起搞一个操作系统。这就是Multics。
但是由于IBM太厉害了,横扫市场。1970年,通用电气退出竞争,不干计算机业务了,所以也不资助这个项目了。
贝尔实验室搞Multics项目的这帮人就开始无所事事了。于是,Ken Tphmpson和Dennis Ritch这两个人就开始瞎折腾。1971年,ken Tphmpson在一台废弃的DEC PDP-7小型机上用汇编语言花了一个月时间仿照Multics开发了简化的、能够在老旧性能的小型机上运行的操作系统。这就是UNIX。
1973年,Dennis Ritch感觉用汇编开发太麻烦了,于是他就从一个已经存在了很久的B语言做了改良,就叫它C语言,然后就用C语言重新开发了一版,这就是UNIX第三版。1974年,他们俩对外发了一篇文章,外界这才知道了有个东西叫UNIX。
由于当时贝尔实验室的母公司AT&T正处于被反复K反复要搞反垄断的时候,所以AT&T当时被美国裁定不能销售除电话电报以外任何商品。所以,1975年,贝尔实验室搞了一个开源教学版Unix,高校可以免费学习。所以各大公司也开始研究这份开源代码。
1978年,还在伯克利大学上学、后来的SUN公司的创始人Bill Joy,在高校开源教学版UNIX第六版的开源代码基础上进行改造,这就是大名鼎鼎的UNIX伯克利软件分发版本,简称BSD。1979年,最后一个开源教学版Unix第七版发布以后,AT&T宣布UNIX不再开源。AT&T专门成立了一个独立公司:USG(Unix Support Group),准备将 Unix商业化。但AT&T能想到的招儿就是保留著作权和商标权,卖商业化的Unix源代码。
1982年,HP买了UNIX商业源代码,改造成了自己的HP-UX操作系统。1984年,IBM买了UNXI商业源代码,改造成了自己的AIX操作系统。
1982年,Sun公司成立,Bill Joy在BSD的基础上开发了Sun公司的Unix商用版本,这就是后来的Solaris。
1976年,乔布斯成立苹果公司。1977年推出AppleII,这是人类历史上第一台个人电脑(简称PC)。1985年,乔布斯被赶出苹果公司后,在硅谷到处寻找好的东西想重建辉煌。他遇到了一家创业小公司叫NeXt.Inc,这帮人正是想造乔布斯最想要的最强劲的电脑。1989年,NeXT电脑发布。它也是从BSD开源代码中发展出了操作系统。后来,乔布斯重返苹果,把苹果公司的操作系统废掉,用了NeXT的操作系统,这就是后来的Mac OS。
1977年,盖茨把微软公司搬到西雅图,继续开发BASIC编程语言。1979年,SCO公司成立,并且和微软进行合作,基于Unix第七版,移植到Intel 当时1978年推出的最新的8088 CPU上。这就是后来的世界上第一个PC上的Unix:Xenix。1980年,IBM受苹果公司个人电脑的压力准备搞开放兼容个人电脑,就想采取微软开发的第一个PC上的Xenix。但当时Xenix还涉及到SCO合作开发的版权问题,于是盖茨耍了一个花招,就从市面上买了一个操作系统,这就是后来大名鼎鼎的MS-DOS。1987年,SCO买下了微软工程师开发的那一部分Xenix代码,SCO完全拥有了Xenix。
1984年,AT&T被拆分,贝尔实验室由于获得不了资助也开始衰落。1993年,Novell买下了Unix的所有资产。Novell是世界上第一个提出网络操作系统、文件服务器的公司,曾经把微软打的很厉害。但是微软在1993年推出了Windows NT一雪前仇。1995年,Novell顶不住了,也开始想着怎么榨干Unix最后一滴血。1995年,Novell模仿AT&T做法也把Unix源代码卖给了SCO。后来SCO和Novell都宣称拥有Unix的资产权。这场官司从2004年打到2007年,Novell也不知道官司能不能胜利,于是Novell在2004年并购了一家德国的Linux发行公司SUSE。所幸的是,后来法官裁定Novell获胜。
SUSE是Linux。Linux是芬兰Linus在1990年上学时上操作系统课,因为要交课堂作业,于是自己就尝试写了点东西,后来一发不可收拾觉得自己也能写个操作系统,于是就产生了Linux。当时因为AT&T已经不再给高校开源Unix,所以荷兰教授Tanenbaum自己搞了一个教学用的操作系统,这就是Minix。Linus上操作系统课,老师用的教学系统就是Minix。Linus开发Linux时也是靠Minix启发了不少思路。1994年初,Linux1.0发布。不过,我们这里讲的Linux其实是操作系统内核。Linux操作系统内核之上的东西,都是各个Linux发行公司在搞。业界有一个开源组织叫GNU,它也在开源的Linux发行版,在Linux内核上集成了当时许多开源软件,其中就有伊利诺伊大学开源组织搞的apache Web Server。
Linux其实生得逢时。1994年刚推出来,世界互联网热潮就爆发了。大家都想创业搞互联网,但是Unix和Windows NT这些商业操作系统都很昂贵。Linux开源、免费、不涉及Unix版权,而且GNU搞的开源Linux发行版里还有Apache Web Server,正好搭建网站。现在,LAMP组合还是绝配:Linux、Apache Web Server、MySQL、PHP。
三、中间件
80年代,局域网、互联网都发展的方兴未艾。互联互通成为人们的普遍诉求。所以,Novell、Sun公司都提出网络操作系统概念。
上节咱们已经提到,Sun公司的联合创始人Bill Joy也是BSD的核心人物。BSD给Unix业界最重要的贡献就是:TCP/IP的实现,为了解决网络之间的互联互通。现在各大操作系统中的TCP/IP实现代码,根源都来自于此。
Bill Joy太厉害了,他还在Sun公司于1984年搞出了一个新玩意,那就是:RPC(远程过程调用),也用于解决应用程序之间的互联互通。
1986年,IEEE(电气与电子工程师协会)介于Unix版本太多,不好互联互通,于是搞了一个开放作业系统标准,这就是POSIX。但IEEE有点类似学术组织,不是工程组织,制定了标准没人执行。1993年,从AT&T买下Unix资产的Novell也想解决Unix之间在操作系统层面的互联互通,于是Novell联合大家,如买了Unix源代码的HP、IBM等,成立了一个组织,X/Open,专门负责POSIX标准定义和业界推广、落地执行,让各大操作系统厂商都遵守POSIX标准。
这个1993年成立的X/Open组织,后来在1996年和Open Software Foundation合并,成为了The Open Group。Open Software Foundation是IBM和HP这起子购买了Unix商用源代码的厂商们在1986年就成立的一个组织,也是一直试图想在工程界解决POSIX落地的问题。现在Unix的正主Novell领头搞了X/Open,两个组织从职能目标和参加厂商来说大多重叠,所以这两个组织就合并了。
咱们再说一个组织,那就是OMG,对象管理组织,是由Sun、IBM、HP等厂商在1989年组建的。The Open Group组织是为了在操作系统层面解决互联互通,而OMG组织是为了在应用层面解决互联互通。大家可别忘了,Sun公司这人可是既实现了TCP/IP,也实现了RPC(远程过程调用)。
OMG组织首先在1990年发布了CORBA标准。里面有几个好东西:
1. IDL:中立的文本可描述的接口语言
2. 对象请求代理:ORB
3. 网络互联互通:RPC、TCP/IP、UDP、IIOP
4. 服务:目录服务、注册服务、事务服务、消息服务、事件通知服务、安全服务
当你看到这组东西的时候你会想到什么?Oh My God,这不就是Sun公司在1998年制定的J2EE标准么,这不就是2003年之后在Structs/Spring/Hibernate兴起后的SOA么?
嘿嘿嘿,是的,Novell衰落后,The Open Group就被IBM把持了。IBM给The Open Group塞进了两个东西,一个是TOGAF(开放组体系结构框架),一个就是SOA。IBM给TOGAF塞进了自己想塞的架构分析设计方法论和工具UML。我就弄不明白了,TOGAF本来是开放组体系结构框架,为啥人们老叫它企业架构?企业架构难道不是:公司治理、商业模式、战略规划与战略推进、组织能力四大组成么?
嘿嘿嘿,2002年,IBM并购Rational。这就是大公司的玩法套路啊:把自己的标准搞成产业的标准。
2008年,Oracle收购了Sun、收购了BEA。SUN实质上拥有着J2EE的标准制定权,BEA实质上拥有着J2EE的实现市场领导权。我一直很赞叹Oracle的收购。Oracle收购Siebel CRM、PeopleSofe HR、SaaS ERP NetSuite都相当精准。况且,在Oracle收购Sun之前,Sun还收购了MySQL。Oracle作为一家数据库厂商对MySQL绝对是需要控制权的。
咱们这节是主要说中间件的,所以咱们主要表一下BEA。BEA其实是一家硅谷常见的并购套路的公司,一路并购长大。最先并购的仍然是咱们的老面孔:贝尔实验室的一个东西,叫Tuxedo。这个东西是世界上最早的中间件,最初起的作用就是分布式事务控制器。1993年,AT&T卖东西,把Unix卖给了Novell,把Tuxedo卖给了BEA公司。1994年互联网爆发,一家小创业公司模仿开源的Apache Web Server搞了一个商业的Web服务器中间件,这家公司就叫WebLogic。BEA一看好东西啊,在热潮上,就并购了WebLoigc,这样,BEA就拥有了事务中间件和Web中间件。后来,Sun公司在1997年制定JSP/Servlet标准,BEA公司就一路跟随从HTML网页支持到JSP页面支持。
后来Sun把这事玩的和CORBA一样复杂了,业界开始造反了。NO EJB、杀死EJB、EJB已死的风潮开启。开源的Structs/Spring/Hibernate三大件出现。IBM一看这事,不好啊。这样搞下去,自己的WebSphere生意就做不下去了啊。于是,在XML、WebService技术的基础上,又搞出来了SOA。
大家看看SOA五大组成:
1. IDL:用XML来描述接口
2. 组件:SCA,不搞Sun那套复杂的有状态EJB、无状态EJB、事件EJB,IBM则是用普通Java类实现SCA组件定义即可
3. 数据传输对象:SDO,用XML来进行数据打包
4. 业务流程引擎:BPEL,用XML来描述业务流程
5. 网络互联互通:WebService
后来啊,从Spring开源框架就长出了一家公司,想必大家基于Spring开源框架开发了不少应用。但是想必大家也遇到了一个头疼的问题,这些应用如何简单地打包和部署?所以,Spring在2008年并购了一家创业公司叫cloud Foundry,它是世界上第一个提出把应用按标准格式进行打包的公司。这给后来的Docker出现带来了启发。
2009年,Spring(含Cloud Foundry)就被VMWare收购了,这就集齐了:应用、应用打包和部署、虚拟机集群平台。2013年,VMWare和EMC共同出资成立了一家公司,这就是Pivotal。Pivotal就把:Spring应用框架、Cloud Foudry打包部署平台、RabbitMQ消息中间件、GreenPlum数据库都装了进来,好基于VMWare的虚拟机集群平台跑起来。这就是妥妥的PaaS平台和IaaS平台啊。Dell作为一家服务器厂商并购EMC(存储)、VMWare、Pivotal(含Spring、Cloud Foudry)打的一手好牌啊。
Pivotal的CTO Matt Stine就是在这种背景下开始于2013年宣传云原生这个概念的。当然,屁股决定脑袋。他所说的云原生技术就是:
1. 微服务技术(暗指Spring)
2. 微服务程序设计方法(暗指他推崇的Heroku使用的微服务应用开发技巧,Heroku也是用的Pivotal开源的这套。Heroku就是在2010年被Salesforce收购作为Salesforce的应用开发PaaS平台的。)
3. 持续集成(暗指Cloud Foundry)
4. 敏捷基础设施(暗指VMWare的vSphere)
但这动了另一个厂商的奶酪。这个厂商就是Google。因为在2013年这个时间档口,VMWare也错过了AWS的快速发展期,Google云也错过了AWS的快速发展期。Google一开始做云,思路很Google,那就是:我Google把基础设施的复杂性都屏蔽了,你们在我上面开发就行了。这就是Google在2008年搞的GAE,不知道现在还有多少同学记得这个东西。后来AWS的云服务器、云存储、云CDN、云网络代码大卖钱的时候,Google才想起怎么狙击。
于是,Google在2015年搞了一个组织,这就是CNCF,名字起的好啊,CNCF的全名就是:The Cloud Native Computing Foundation,云原生计算基金会。
CNCF偏偏不主打微服务,而是主打无服务。从CORBA(IBM公司),到EJB(Sun公司),到SOA(IBM公司),到EJB已死微服务崛起(Spring公司),到无服务(Google公司)。另外,我就弄不明白了,这些技术都是为了解决应用程序开发技术,为了解决应用程序之间互联互通的问题,为啥业界的人都说它们能解决应用程序好灵活组合的问题呢?业界都是些猪脑子啊。
你Pivotal和Spring主打虚拟机、主打Cloud Foudry的专有打包格式,那我CNCF就主打容器和K8S。
AWS现在卖完云服务器、云存储了,现在又绕回了Google的老路:你们直接用我的无服务器架构Serverless开发就好,我的Serverless无服务器技术,可以无缝调用我的所有AWS其他服务。这才是真正原生,一开始就是长在云上的啊。我才是云原生。
而采用Spring和Cloud Foudry这套开源PaaS平台的Heroku、被Salesforce并购了的Heroku,也说自己才是纯的云原生。君不见:Salesforce应用商店上的插件和生态应用,都是用Salesforce的专属开发语言APEX开发,都必须统一部署在Heroku上,都必须接受Salesforce的统一监控、统一安全防护、统一订单统一支付统一计费统一结算。
话说回来了,各位看官看完了我这篇文章,大家知道什么叫云原生了吗?
这就是真实的业界。
本文来自微信公众号:阿朱说(ID:azhushuo),作者:吕建伟