我按照年代演化,从前端交互层,到网络层、应用层、数据库来分别讲,技术对于客户的业务应用价值。
大家在阅读中,尤其要细细品味为啥出现了那个技术,到底是为了解决什么问题,但是它又产生了什么弊病。
一、70年代
过去的计算机,都是电传打字机和打孔机当终端,和计算机进行交互。1972年,王安电脑研制成功最新一代的文字处理计算机,首次配套了咱们现在最常用的键盘和显示屏,从此我们有了可视的字符界面。
咱们现在用的以太网是1979年才产生的。但是世界上第一条跨大西洋的海底通信电缆在1866年就铺完了,人类已经可以通过海底通信电缆进行跨洋的电报数据传输。而且在1969年互联网的前身ARPANet诞生的时候,人们已经通过电话线缆可以进行联网数据传输和访问了。
有了文件和文件系统,有了网状数据库和层次数据库,内容修改/存储/查找倒是比过去容易了,但是复杂性仍然很高。
二、80年代
1983年,Lisa推出了,这是世界上第一款图形界面的计算机。1983年,微软也在研发Windows图形界面,但是Windows1.0在1985年才推出。图形界面取代字符、取代命令行,让计算机大大易用。
1981年,以太网的发明人创办了3COM公司,给1981年IBM发布的PC机配备了以太网网卡。局域网便于多人多部门一起协作。
早在1984年,贝尔实验室Unix研究团队就已经产生出了分布式数据事务一致性协调中间件,后来1992年卖给了Novell公司,后来又被BEA公司在1995年收购。这是最早的中间件,就是为了解决分布式应用的问题。1987年,Sun公司就发明了RPC技术,用于分布式应用之间通过API进行远程调用的问题,这也是比较早的中间件,也是为了解决分布式应用的问题。
Oracle终于在1979年推出了Oracle2.0真正可商用的关系数据库,这让结构化数据存储/查询容易了很多。
三、90年代
早在1991年,欧洲原子能实验室的研究员就已经研究出来网页浏览器、HTML、HTTP协议、Web服务器。但是在1993年才被伊利诺伊大学的学生们开源实现并且普及。1994年网景公司成立,引爆了全球互联网。Web技术免除下载安装这些麻烦事,可以做到随时随地访问。
思科也顺便切入了TCP/IP的互联网路由器,互联网便于全球访问。
1990年,COM组件技术、CORBA组件技术都出现了,并且还配套了分布式应用远程调用中间件、组件持久化中间件技术、组件池化中间件技术。组件的出现是由两个技术在推动:一个是接口技术的推动,接口的出现,让不同开发语言编写的应用之间可以很方便API调用;另一个技术是通用组件规范,过去写一个类是很随意的,但是你要写成组件,前提就必须符合通用组件接口定义规范,只有这样,才能做到组件的计数/池化、组件的内省/持久化。
1994年,互联网崛起后,中间件又增加了Web中间件服务器,如开源的Apache WebServer。WebLogic和WebSphere一开始都是商用的WebServer。1995年,为了做到Web页面从静态文本变成动态,Servlet/JSP技术发明了,这就相应出现了Servlet/JSP中间件服务器。1998年,J2EE规范发布,这就又相应出现了EJB组件和EJB中间件服务器。他们其实都是为了解决跨互联网的远程调用问题。
1990年,Red Brick公司推出世界上第一款数据仓库管理软件。这样,关系数据库处理OLTP交易型应用,数据仓库处理OLAP分析型应用。
四、2000年代
2008年,iOS、Android这两大双雄终于出现,开启了移动互联网时代。但是当时2G、3G网速慢,智能手机本机的性能也慢,所以当时做移动互联网应用,苹果公司就走了App这样的技术路线。如果你要做内部用或外部用移动应用,只能跟随苹果事实上的产业标准,做APP。
联网技术,也从Modem拨号上网技术,演化到有线ADSL技术、WiFi无线上网技术,乃至2G GPRS、3G无线上网技术。无线上网技术,让大家可以随时随地访问互联网。
1998年,W3C为了分布式应用跨互联网访问就在制定WebService标准,在2001年才正式推出。因而中间件又增加了WebService的特性,这就是过去大家老提的SOA:有注册中心UDDI,有所谓的SOAP企业总线(其实和过去的远程方法调用中间件本质是一样的),有描述文件语言WSDL。如果你想方便地利用互联网技术跨互联网访问其他的应用,那么你当时只能使用WebService技术。
关系数据库统治应用已经很多年,但是互联网的很多应用产生的内容和数据并非都是结构化关系数据,如半结构化数据(CSV、XML、JSON的日志),非结构化数据(电子邮件,文档,PDF)和二进制数据(图像、音频、视频)。所以就出现了很多存储方式系统以及NOSQL数据库。
五、2010年代
2017年,微信小程序技术出现,随后阿里、百度、头条、滴滴等等很多公司都跟进。Google在2017年也同时提出了PWA(渐进式Web应用)技术,Google在2018年还用Dart开发语言(2011年产生)和FlutterUI组件形成组合。前端又从APP技术回到了类似HTML、Javascript的技术世界。如果你想在微信里开发应用,小程序技术是微信第一优先级支持的,所以页面的适配性最好。如果你就不用小程序技术,就自己用HTML5技术来搞,那么适配微信各个版本、适配各种手机的工作,只能你自己搞了。
2013年,4G无线上网牌照发布。人们从3G无线上网,升级到4G无线上网。上网速度更快,访问应用不用再等待了。
中间件出现了N多分布式中间件,来应对各个细分层的海量并发。2014年,微服务编程架构提出。微服务为啥出现?就是因为组件技术和WebService技术太沉重了,写一个简单东西也得附加一大堆组件技术规范实现和WebService技术规范实现。
早在2004年,Spring已经产生了,那还是SOA时代。后来2014年摇身一变,Spring变成Spring Cloud,SOA(面向服务)变成了面向微服务,应用中间件变成了应用编程框架。虽说各种开源的分布式中间件互相灵活组合在一起打破了当年WebLogic/WebSphere垄断企业级中间件的商用市场,虽说用RSET和JSON代替了沉重的WebService技术族,虽说微服务用普通类代替了过去沉重的组件技术,但是给应用开发工程师也带来了烦恼:过去本来应该由完全封装的中间件软件操心的分布式要求,现在得应用开发工程师来关注了。
所以2015年,业界痛定思痛,在Docker容器和k8s技术的支撑下,大家把分布式应用要求的能力又从应用编程框架层级下沉到分布式操作系统层。微服务的架构,也变成了面向函数服务/无服务器Serverless架构。
这样来看,其实微服务是走错路了,就像CloudFoundry和OpenStack走错路一样。很不巧,以Spring为代表的微服务应用编程框架和以CloudFoundry为代表的应用容器框架,都是Pivotal这家公司的。
所以,世界绕了一圈回来了,现在的Serverless、容器、K8s生态技术体系,把分布式应用架构的复杂性从应用层下降到了分布式操作系统层,目的是在简化分布式应用架构。如果不这么简化,你又想应对海量并发,又想简单,那没门。
早在2003年,Google就开始陆续发布三大论文,直到2009年,Hadoop在雅虎的推动下才正式开源。大数据海量存储、大数据海量计算的需求才得以满足。大数据不用像过去数据仓库一样ETL、维度化入仓,就能做很高性能的计算和查询。尤其后来2014年发布的Spark用内存处理机制、DataFrame机制,实现了实时的流式计算,比过去Hadoop MR批量计算更加性能高、实时性好。
现在大家又在提大数据湖,因为大家发现了NOSQL太多了,大家其实期望的是一个技术搞定各种数据存取。但是大家也要警醒,现在说大数据湖落地产品的,可能不是真正的大数据湖的产品,就如同iPhone没出来之前Symbian就叫智能手机,iPhone出来后就没有Symbian什么事了。