---
title: 后端语言变迁史
taxonomy:
    category: docs
---

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

### 纯互联网业务喜欢 PHP

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

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

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

然而，随着用户数量的爆炸式增长，Facebook 不得不背负起巨大的技术债务。为了应对高并发挑战，他们使用 PHP 的语法开发了一种强类型、且编译成二进制文件进行部署的 HACK/HVVM 技术，在 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》](https://www.youtube.com/watch?v=Gzj723LkRJY)，可以说，正是 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 语言的落地，在微服务环境下，这也成了比较容易做到的一件事情。
