logo

后端语言变迁史

在 Web 1.0 时代,第一个进入互联网技术领域的编程语言是 perl,但在动态网站普及的短短几年之后,Web 2.0 时代就到来了。随后,各种产品形态层出不穷,各种语言、各种技术轮番登场,最终锤炼出了 Java 和 PHP 两种主流技术。

纯互联网业务喜欢 PHP

如果一家公司是通过提供免费的在线互联网产品获得用户,再通过卖广告、皮肤、会员等虚拟商品赚钱,那它就属于做纯互联网业务的公司。典型的有腾讯、百度、Facebook、字节、快手等。

扎克伯格选择用 PHP 和 MySQL 搭建了 Facebook

2004 年,扎克伯格选择了当时比较流行的 PHP 语言以及不太成熟的 MySQL 数据库来搭建第一版的 Facebook。这个决策在短时间内就取得了巨大的成功,使得 Facebook 战胜了已经拥有巨大先发优势的 MySpace,成为了全美乃至全世界最大的熟人社交网站。

然而,随着用户数量的爆炸式增长,Facebook 不得不背负起巨大的技术债务。为了应对高并发挑战,他们使用 PHP 的语法开发了一种强类型、且编译成二进制文件进行部署的 HACK/HHVM 技术,在 PHP 7 发布之前曾颇为流行。

在接下来的十年里,Facebook 与同样选择了 MySQL 的 Google 以及阿里巴巴一起,将 MySQL 推向了开源数据库的巅峰。这个故事我们在后面的章节还会详细讲述。

和电商业务这种长流程的需求相比,社交网络的数据处理流程都很短,不需要后端代码在内存中做很多的运算,系统的重点更多地落在了数据管理层面,例如高性能的内存缓存和不会丢数据的磁盘数据库。正是由于 PHP 和 MySQL 比较匹配“短周期数据处理”需求,使得它们成为了构建大型社交平台的首选技术,Facebook 的成功也证明了这一点。后来,通过发展这些技术,Facebook 成功地解决了用户数量快速增长带来的巨大压力,为用户提供了稳定、高性能的服务。

新浪、百度等卖网页广告的公司都选择了 PHP

PHP 语言一直以其出色的数据展示和网页生成能力而闻名。首先,PHP 的开发速度非常快,可以迅速实现各种功能需求。其次,PHP 的部署简单便捷,可以轻松搭建和管理网站环境。最重要的是,PHP 非常适合横向扩容,能够应对大规模访问和数据处理的需求。因此,许多卖网页广告的公司都选择了 PHP 作为它们的首选技术。

然而,字节和快手并没有选择使用 PHP。这主要是因为在它们成立的时代,PHP 的继任者 Go 语言已经在中国互联网领域开始普及,甚至比 Go 语言在美国的流行更早。Go 语言以其高效、并发性强的特点,成为了新一代互联网公司的首选。因此,字节和快手在技术选型上选择了 Go 语言,相比于 PHP 能够节约不少的服务器采购成本。

电商网站几乎全都选择了 Java

美国亚马逊

1995 年,亚马逊以一个图书销售网站的形式上线,从那之后经历了两次核心技术的换代:首先是从 C 迁移到了 Perl,然后是从 Perl 迁移到了 Java。

美国最大的 C2C 电商 eBay 的核心技术也是很早就从 Perl 迁移到 Java 了。

中国淘宝

淘宝最开始是购买的基于 LAMP 技术的PHPAution电商系统,于 2003 年 5 月首次上线。两个月后,基于like的搜索顶不住了,于是把自研的阿里巴巴中文站的搜索引擎复制到了淘宝网。到了 2004 年 1 月,MySQL 彻底顶不住了,换成了 Oracle 数据库。又过了一个月,淘宝网开始以 SUN 公司工程师驻场开发的方式,逐步替换掉了全部的 PHP 代码,从此淘宝网成了一个使用 Java + Oracle 开发的网站。

时至今日,阿里巴巴早已经完成了“去 IOE”战略,IBM 小型机、Oracle 数据库和 EMC 高端存储已经从阿里巴巴的机房消失,但是 Java 依然流淌在阿里巴巴集团的血液里。

其它电商公司

PHP 语言在纯互联网公司中的核心地位在最近几年已经被 Go 全面替代了,新兴的字节、BiliBili 都开始用 Go 作为主力后端语言。而同样很晚成立的拼多多却起步就用 Java 语言作为主力后端技术,而类电商业务的美团,其后端核心技术也是 Java。

至于京东?在笔者本科还没毕业的时候,就在微博评论里咨询过京东 CTO 李大学:“我看京东加入购物车的接口依然是.aspx后缀的,难道京东还在用自己的初代技术 asp?”他回复我“不要只看表面”。实际上京东的核心交易系统一共经历过三代:2003 年购买的第一代 asp 商城,2008 年花了三个多月封闭开发出的基于 .NET 的第二代系统,2012 年开始使用 Java 技术开发的第三代核心交易系统。

为什么电商网站都用 Java

最重要的原因:时也运也。

在当时,PHP 技术还不够成熟,主要用于处理网页展示等耗时较短的业务。然而,在面对海量并发的情况下,PHP 无法有效管理和控制与数据库的大量连接。更重要的是,当时的数据库技术也不够成熟,性能较差,功能有限,远远无法与拥有小型机支持的商用解决方案如 Oracle 相媲美,更没有如今各种高性价比的基于 MySQL 的云数据库。

如果我们深入分析技术原因,笔者认为主要有两个。

首先,电商业务是一个长流程业务。如果数据能够在内存中停留足够长的时间,那么系统的整体性能一定会更高。这可以大大缓解 PHP 严重依赖外部数据库(包括内存数据库和磁盘数据库)而导致的性能问题。简单来说,这就是常驻内存技术和每次都需要新开进程技术的核心区别。

其次,Java 是一种对开发者进行强约束的技术。一个优秀的架构师就决定了项目的质量,无论是月薪八千的人还是月薪三万的人来编写业务代码,最终的结果都相差不大。

很多其他业务类型的互联网公司也主要使用 Java

除了电商领域,许多其他类型的互联网公司也主要使用 Java 作为主要开发语言。例如 LinkedIn、AT&T、Verizon、IBM 等头部公司都将 Java 作为它们的首选后端开发语言。甚至现在,连 Facebook 的第一后端语言也已经变成了 Java。

其它昙花一现的后端技术

在 Web 生态发展的过程中,除了 PHP、Java 双雄之外,也出现了如 Python、Ruby、Scala、Node.js 这样的后端技术之花,但它们都没有达到 PHP 和 Java 那样的高度,下面笔者简单介绍一下它们的兴起和衰落之路。

Python

Python 作为一种被广泛使用的编程语言,曾经也有一些比较流行的 Web 框架,有不少知名的互联网公司采用 Python 作为主要开发语言,例如 YouTube、Dropbox,国内的豆瓣和知乎等,但是随着 Node.js 和 Go 的兴起,以及 Python 在处理高并发流量和复杂业务时候的工程化能力较弱,现在已经逐渐没有新的公司使用 Python 来开发自己的核心系统了。但是意外的是,最近十年机器学习的崛起又让 Python 重新焕发了生命力。

Ruby

Ruby 的兴起来源于那段著名的发布于 2005 年 11 月 8 日的 16 分钟视频《Ruby on Rails demo》,可以说,正是 Ruby on Rails 拉开了 Web 技术百花齐放的大幕。这段视频由 David Heinemeier Hansson(简称 DHH)录制,DHH 这个名字的知名度一直贯穿到了移动互联网时代。

Github、Twitter、Airbnb 是几个曾经使用 Ruby on Rails(ROR)技术开发的大型网站。由于 Ruby 这门编程语言对程序员过于友好,导致 ROR 的运行性能相对较弱。因此,随着这些公司的用户量上升,它们纷纷选择将核心系统使用其他技术进行了重写。

Scala

Scala 第一次被大众所熟知是在 2009 年,当时 Twitter 宣布将核心系统从 Python 语言换成了 Scala 语言,据说减少了 90% 的物理服务器占用,并且在 2012 年美国总统大选期间支撑 Twitter 史无前例地没有宕机。

Scala 可以看做一个运行在 JVM 虚拟机上的、经过了更高级封装的基于 JAVA 的 DSL(领域专用语言),它的能力本质是 JVM 的能力,当然,Java 能力本质上也是来自 JVM。

Node.js

Node.js、Go 这两种技术能够爆火都是因为出了类似“五分钟开发个人博客”的教程,过去十几年,如果某种技术特别适合拿来开发 Web,那它就能火。根据 2023 年最新的调查,JavaScript 是目前头部科技公司广泛使用的语言之中排名第一的语言,除去前端因素,Node.js 完善的生态,丰富的开源工具库,以及一直在进步的官方维护团队功不可没。

如今,Airbnb、Netflix 等企业主要使用 Node.js 作为后端语言,虽然使用它作为主要后端语言的公司不多,但几乎所有的公司都会使用它。因为它特别适合拿来做“用户接入层”,它可以并发聚合接口,减少流量消耗,提升前端体验。

大前端时代

Web 2.0 发展到顶峰的标志,就是乔布斯拿出了人类科技前沿的结晶、科技与人文十字路口的路灯——iPhone 4,移动互联网的时代到来了,手机迅速对所有年龄段的所有人完成了“个人计算机普及”。而前端技术也完成了 JavaScript、jQuery、Angular、React/Vue 的代际更迭,APP 和大前端的时代到来了。

此后,界面由前端完全掌控,后端团队不用再输出网页了,提供稳定且高性能的 API 成了唯一的工作,于是后端技术也进入了新的时代。

Go:新时代的 PHP

移动互联网时代,由于网民数量的激增和 24 小时随时都可以使用的手机的普及,APP 的同时在线人数相较于网页时代又提升了一个数量级,因此后端性能压力也上了一个数量级,这推动了 PHP 的接班人—— Go 语言的流行。

十一年前笔者第一次写 Go 的时候就意识到了,它就是“C with net”——自带网络库的新时代万能底层语言,写起来像 PHP,跑起来像 C++。Go 还在语言和编译器层面提供了可以实现“超并发”的 Goroutine,普通开发者也可以轻松写出超高性能的接口。

PHP 在中国正在退潮,笔者已经很久没有看到五年以内经验的 PHP 程序员的简历了,目前在笔者公司内部,也正在推动 Go 语言和 Java 语言的落地,在微服务环境下,这也成了比较容易做到的一件事情。

阅读数:3642      字数:3390 最后更新:2024-03-05 08:38:44