diff --git a/2023/12/popular-websites-tech-stack/index.html b/2023/12/popular-websites-tech-stack/index.html index 277eb209..916852a8 100644 --- a/2023/12/popular-websites-tech-stack/index.html +++ b/2023/12/popular-websites-tech-stack/index.html @@ -607,7 +607,7 @@
值得一提的是,PHP 之父 Rasmus Lerdorf,在 2002 年至 2009 年期间为供职于 Yahoo!,2011 年起至今供职于 Etsy。Python 之父 Guido van Rossum,在 2005 年至 2012 年期间供职于 Google,在 2013 年至 2019 年期间供职于 Dropbox。国内最有影响力的 PHP 技术专家是惠新宸,是加入 PHP 语言官方开发组的首位国人,曾先后供职于雅虎中国、百度、新浪微博、链家网等公司。
2000 年前创建的网站,因为开源技术栈尚未成熟,编程语言基本上都是选择 C++ 开发。在开源技术栈成熟后,多数网站会选择拥抱开源。具体选择哪个编程语言,PHP、Ruby、Python、Java 等,主要由技术负责人的技术偏好决定。根据 w3techs 统计,历年网站使用的服务端编程语言统计占比,2012 年至今 10 多年,PHP 占比稳居榜首,每年都是 75% 以上。大型网站都是公司内的技术团队研发的,技术栈由技术团队选择,而很多小型网站,很可能会直接使用开源的 CMS 系统搭建。根据 w3techs 统计,前 100 万网站中有 43.0% 使用 WordPress 构建。WordPress 的服务端编程语言就是 PHP,数据库是 MySQL。大型网站选择 PHP 越来越少,因为 PHP 是解释型脚本语言,相对编译型编程语言有性能劣势。另外,PHP 的优势是快速开发 Web 动态网页,但是随着前后端分离开发模式的流行,Web 页面从服务端渲染逐渐转向客户端渲染,PHP 的优势不再,后端工程师只需要向前端提供 REST API 接口,展示层的实现完全由前端工程师实现。
+2000 年前创建的网站,因为开源技术栈尚未成熟,编程语言基本上都是选择 C++ 开发。在开源技术栈成熟后,多数网站会选择拥抱开源。具体选择哪个编程语言,PHP、Ruby、Python、Java 等,主要由技术负责人的技术偏好决定。根据 w3techs 统计,历年网站使用的服务端编程语言统计占比,2012 年至今 10 多年,PHP 占比稳居榜首,每年都是 75% 以上。大型网站通常都是公司内的技术团队研发的,技术栈由技术团队选择,而很多小型网站,很可能会直接使用开源的 CMS 系统搭建。根据 w3techs 统计,前 100 万网站中有 43.0% 使用 WordPress 构建。WordPress 的服务端编程语言就是 PHP,数据库是 MySQL。大型网站选择 PHP 越来越少,因为 PHP 是解释型脚本语言,相对编译型编程语言有性能劣势。另外,PHP 的优势是快速开发 Web 动态网页,但是随着前后端分离开发模式的流行,Web 页面从服务端渲染逐渐转向客户端渲染,PHP 的优势不再,后端工程师只需要向前端提供 REST API 接口,展示层的实现完全由前端工程师实现。
早期部分网站选择 .NET 技术栈,比如京东、携程。但是,Java 平台生态更完善,有非常多的经验可以借鉴。另外,.NET 平台本身虽然不收费,但是 Windows 操作系统是收费的,开发工具也不便宜。于是京东在 2012 年从 .NET 迁移到 Java,携程在 2017 左右从 .NET 迁移到 Java。目前在国内,多数互联网大厂都选择 Java 技术栈,如淘宝、美团、京东、微博、携程等,Java 相对来说是主流选择。
编程语言的另外一个流行趋势是 Go 语言。Go 语言诞生于 Google,在 2009 年 11 月对外公开。在发明 Go 语言前,Google 内部主要使用的语言是 C++、Java 和 Python 等,但是 Go 发明者认为这些语言无法同时满足高效编译、高效执行和易于编程的特性诉求,所以创造了 Go 语言[48]。Go 比 C++ 能更高效编译和易于编程,比 Java 更易于编程,比 Python 能更高效执行。在 GoCon Tokyo 2014 会议上,Go 语言研发团队的 Brad Fitzpatrick 对各种编程语言在编程乐趣和执行速度(Fun vs. Fast)的对比[49],如下图所示:
diff --git a/atom.xml b/atom.xml index 96a30bf0..48a90343 100644 --- a/atom.xml +++ b/atom.xml @@ -23,7 +23,7 @@在“开源”(open source)一词出现之前,技术社区的黑客选择使用“自由软件”(free software)这个词。但是“自由软件”这个词与对知识产权的敌意、共产主义和其它观点相联系,几乎不受管理者和投资者的欢迎,于是 1998 年 2 月 3 日在由 Eric Raymond 等人参加的会议上“开源”一词诞生,2 月下旬开源软件促进会成立 OSI,Eric Raymond 担任主席。自由软件和开源软件被合称为 FOSS。缩写“LAMP”代表的是 Linux-Apache-MySQL-PHP,这些软件都是自由软件或开源软件。
在互联网诞生早期,开源技术栈、开源社区尚未成熟,互联网公司不得不自研专有软件,随着开源软件的成熟,技术栈的选择开始从专有软件逐渐转向开源软件。先来看下,主要 Web 技术和服务端技术的发展时间线:
按编程语言区别,主要流行的互联网产品的创建时间和早期的技术栈选择(也可以参见 wiki):
值得一提的是,PHP 之父 Rasmus Lerdorf,在 2002 年至 2009 年期间为供职于 Yahoo!,2011 年起至今供职于 Etsy。Python 之父 Guido van Rossum,在 2005 年至 2012 年期间供职于 Google,在 2013 年至 2019 年期间供职于 Dropbox。国内最有影响力的 PHP 技术专家是惠新宸,是加入 PHP 语言官方开发组的首位国人,曾先后供职于雅虎中国、百度、新浪微博、链家网等公司。
2000 年前创建的网站,因为开源技术栈尚未成熟,编程语言基本上都是选择 C++ 开发。在开源技术栈成熟后,多数网站会选择拥抱开源。具体选择哪个编程语言,PHP、Ruby、Python、Java 等,主要由技术负责人的技术偏好决定。根据 w3techs 统计,历年网站使用的服务端编程语言统计占比,2012 年至今 10 多年,PHP 占比稳居榜首,每年都是 75% 以上。大型网站都是公司内的技术团队研发的,技术栈由技术团队选择,而很多小型网站,很可能会直接使用开源的 CMS 系统搭建。根据 w3techs 统计,前 100 万网站中有 43.0% 使用 WordPress 构建。WordPress 的服务端编程语言就是 PHP,数据库是 MySQL。大型网站选择 PHP 越来越少,因为 PHP 是解释型脚本语言,相对编译型编程语言有性能劣势。另外,PHP 的优势是快速开发 Web 动态网页,但是随着前后端分离开发模式的流行,Web 页面从服务端渲染逐渐转向客户端渲染,PHP 的优势不再,后端工程师只需要向前端提供 REST API 接口,展示层的实现完全由前端工程师实现。
早期部分网站选择 .NET 技术栈,比如京东、携程。但是,Java 平台生态更完善,有非常多的经验可以借鉴。另外,.NET 平台本身虽然不收费,但是 Windows 操作系统是收费的,开发工具也不便宜。于是京东在 2012 年从 .NET 迁移到 Java,携程在 2017 左右从 .NET 迁移到 Java。目前在国内,多数互联网大厂都选择 Java 技术栈,如淘宝、美团、京东、微博、携程等,Java 相对来说是主流选择。
编程语言的另外一个流行趋势是 Go 语言。Go 语言诞生于 Google,在 2009 年 11 月对外公开。在发明 Go 语言前,Google 内部主要使用的语言是 C++、Java 和 Python 等,但是 Go 发明者认为这些语言无法同时满足高效编译、高效执行和易于编程的特性诉求,所以创造了 Go 语言[48]。Go 比 C++ 能更高效编译和易于编程,比 Java 更易于编程,比 Python 能更高效执行。在 GoCon Tokyo 2014 会议上,Go 语言研发团队的 Brad Fitzpatrick 对各种编程语言在编程乐趣和执行速度(Fun vs. Fast)的对比[49],如下图所示:
早期由 Go 语言实现的经典开源项目主要是基础设施软件,比如 YouTube 的 Vitess 数据库分片中间件(2012.02 对外开源)、Docker 容器(2013.03 对外开源)、Red Hat 的 CoreOS 团队的 Etcd 分布式配置服务(2013.07 对外开源,实现 Raft 共识协议)、前 Google 工程师创建的 CockroachDB 分布式数据库(2014.02 对外开源,受 Google Spanner 启发)、Google 的 Kubernetes 容器编排系统(2014.06 对外开源)、SoundCloud 的 Prometheus 监控工具(2015.01 对外开源)等。大规模使用 Go 语言的代表性的国外的互联网公司有 SoundCloud[19][20]、Dropbox[30][31]、Uber[38] 等,国内的有七牛云、字节跳动[40][41]、哔哩哔哩[12]、滴滴[16]、知乎[39]、百度[50][51]、腾讯[52]等,在这些互联网公司 Go 语言通常主要被用于构建基础设施软件(网关、数据存储、监控、视频处理等)或高性能要求的业务服务,部分公司的大量核心业务也从 Python、PHP 等迁移到 Go 语言。使用 Go 语言的公司的更加完整的列表,可以参见官方整理的“GoUsers”。
数据库方面,根据 DB-Engines Ranking 的统计,流行的关系数据库主要是 4 个,开源免费的 MySQL 和 PostgreSQL,专有收费的 Oracle 和 Microsoft SQL Server。多数互联网产品使用的数据库是 MySQL,部分是 PostgreSQL 或 Oracle。一些早期使用 Oracle 数据库的网站选择部分或完全从 Oracle 数据库中迁出,代表性的案例是,Amazon 从 Oracle 完全迁移到 Amazon RDS 和 NoSQL,淘宝从 Oracle 完全迁移到 MySQL。以 PostgreSQL 为主数据库的互联网应用有 Skype、Reddit、Spotify、Disqus、Heroku、Instagram 等[53]。
MySQL 相对 PostgreSQL 更加流行的主要原因是[54][55],在早期 MySQL 入门槛更低。MySQL 就支持在 Windows 下安装,而 PostgreSQL 只能在 Cygwin 下安装,MySQL 对 Windows 平台的支持使得初学者更容易上手,并且 MySQL 更加易于管理,能够快速简单地启动和使用,而且 MySQL 拥有一个非常简洁、易于导航和用户友好的在线文档和支持社区。另外一个重要原因是,MySQL 很早就默认支持复制(replication),而 PostgreSQL 的复制是第三方的,而且极其难用。之后的几年即便 PostgreSQL 完善了不足,但错过了流行的时间窗口,MySQL 成为了主流选择,有更完善的生态。不过,受 MySQL 被 Oracle 公司收购的影响,近几年 PostgreSQL 开始越来越流行,根据 DB-Engines Ranking 的统计,最新的 PostgreSQL 的流行度分数是 10 年前的三倍,流行度与前三名越来越接近。
容易发现多数网站的技术栈的演进模式类似。在创建网站早期通常选择使用 PHP、Ruby、Python 脚本语言和框架来开发,这些脚本语言和框架具有更快的开发效率,能快速交付上线。随着网站流量的增长,面临性能和可扩展性问题,通常会将网站服务化,从单体架构向面向服务的 SOA 和微服务架构演进,一大部分网站在服务化过程中会选择将核心业务改由其他性能更佳的编译型编程语言来实现,如 Java、Scala、C++、Go,原先的脚本语言可能全部废弃,也可能仅用于前端展示层的 Web 动态页面渲染,比如 Facebook、Twitter 等。当然也有一部分网站,演进为 SOA 和微服务架构后,业务逻辑的实现一直以最初的脚本语言为主。
在架构微服务化后,很多网站实现的微服务之间采用基于 HTTP 协议的 REST 方式通信(或者使用的 RPC 框架支持跨语言 RPC 调用),各个微服务的实现在理论上编程语言不需要统一,可以根据该微服务的性能要求或负责该微服务的团队的技术偏好自由选择,所以真实世界的互联网公司内部各个业务子系统的技术栈可能不统一。但是内部技术栈不统一会带来额外的维护成本。另外,考虑技术栈的迁移重构成本,新的业务子系统使用新的技术栈,而有些旧的业务子系统很可能继续使用旧的技术栈。除了业务子系统外,很可能团队内部有自研的中间件、运维工具等,这些组件由中间件团队、运维团队研发,很可能会选择与业务系统不一样的技术栈。
注意,解决网站的可扩展性问题,不一定需要演进为服务化架构。架构服务化意味着将完整的单体服务按业务的功能领域做垂直拆分,而实际上在应用服务层可以通过部署多个相同副本的单体服务的方式实现系统的水平扩展,网站的可扩展性问题主要在数据存储层上。拆分应用服务的好处在于能实现组织团队的规模化。解决数据库的扩展性的策略有,数据复制(数据缓存、数据库读写分离)、数据垂直拆分、数据水平拆分(也叫数据分片,sharding)。数据库被拆分后,如果单个事务内的数据分散在多个节点就要解决分布式事务问题,但是实现分布式事务代价太大,通常的选择是牺牲一致性,仅满足最终一致性(BASE)。
没有拆分应用服务,始终采用单体架构的经典案例是 Instagram,2019 年 Instagram 在技术博客上有这样一段话[37]:
Our server app is a monolith, one big codebase of several million lines and a few thousand Django endpoints, all loaded up and served together. A few services have been split out of the monolith, but we don’t have any plans to aggressively break it up.
为了解决可扩展性问题,Instagram 在数据存储[35][36],对 PostgreSQL 数据库做了主从读写分离、数据垂直拆分和数据分片,并且使用了 NoSQL 数据库 Cassandra,用于存储 Feed 流等数据。类似的,Reddit 也是单体架构,在数据存储层做可扩展性改造,对 PostgreSQL 数据库做了垂直拆分,并且使用 Cassandra 数据库[25]。
Yahoo!,1994 年创立,早期网站操作系统是 FreeBSD,Web 服务器是自研的 Filo Server,数据库是自研的 DBM 文件,Web 动态页面脚本是自研的 yScript,业务逻辑编程语言是 C++。1996 年 Web 服务器改用 Apache HTTP Server,1999 年部分数据库改用 MySQL(同时也使用 Oracle 数据库),2002 年编程语言从 yScript 和 C++ 改为 PHP,操作系统也从 FreeBSD 逐渐转向 Linux[56][57][58]。在 2002.10 的 PHPCon 2002 会议上,Yahoo! 工程师 Michael Radwin 介绍了 Yahoo! 从专有软件向开源软件转向的原因和演进过程,以及选择 PHP 而不选择 ASP、Perl、JSP 等其他技术的原因[56]。Yahoo! 转向开源软件的原因主要是,避免维护专有软件的成本,开源软件从早期的不成熟最终变得成熟,具有更好的性能,更容易与第三方软件集成,以及开源社区逐渐发展壮大。2005 年,Yahoo! 的技术架构如下图所示[57]:
2000 年 ~ 2010 年,Yahoo! 是世界上流量最大的网站,虽然期间被 Google 短暂超越,但随后又反超,一直到到 2010 年后才被 Google 彻底超越。2000 年前后 Yahoo! 转向到 MySQL 和 PHP,并在技术上助力 LAMP 生态的发展壮大,对 LAMP 技术栈的流行起到巨大的推动作用。值得一提的是,知名 MySQL 专家 Jeremy Zawodny,《高性能MySQL》2004 年第 1 版(豆瓣)的作者,在 1999.12 ~ 2008.06 期间为 Yahoo! 工程师;PHP 之父 Rasmus Lerdorf 在 2002.09 ~ 2009.11 期间为 Yahoo! 工程师。
Amazon,1994 年创立,早期是单服务、单数据库的单体架构,使用的编程语言是 C++,2000 年开始从单体架构向 SOA 和微服务架构演进,使用最多的语言变为 Java,C++ 被用在高性能要求的系统和底层基础设施组件。Amazon 架构演进过程如下图所示[59]:
Amazon.com 的技术栈演进过程:
当前 Amazon.com 网站的主要技术栈[59][60][61][62]:
eBay,1995 年创立,早期使用的编程语言是 Perl,1997 年迁移到 C++,2002 年迁移到 Java。eBay 的技术栈演进过程[66][67]:
2016 年,eBay 的技术架构如下图所示[69]:
当前 eBay 的主要技术栈[66][67][69][70]:
淘宝技术架构[75][76][77][78][79],是从 LAMP 架构演变而来的。在 2003 年 5 月最早上线时,淘宝是对购买得到的采用 LAMP 架构网站源码进行二次开发的网站。为了应对网站流量的增长,2003 年底数据库从 MySQL 切换到 Oracle,2004 年初编程语言从 PHP 迁移到 Java,同时硬件演变为 IBM 小型机和 EMC 高端硬件存储,依赖的基础设施被统称为“IOE”(IBM 小型机、Oracle 数据库、EMC 存储设备),这个架构被称为 2.0 架构。
2007 年底开始拆分第一个业务中心是用户中心(UIC,User Information Center),在 2008 年初上线。2008 年初,启动“千岛湖”项目,拆分出了交易中心(TC,Trade Center)和类目属性中心(Forest)。2008 年 10 月,为了打通淘宝网和淘宝商城(后来的天猫)的数据,启动“五彩石”项目,拆分出了店铺中心(SC,Shop Center)、商品中心(IC,Item Center)、评价中心(RC,Rate Center)。到 2009 年初,“五彩石”项目结束,阿里电商架构也从之前的单体架构演进为了 SOA 服务化架构,被称为 3.0 架构,同时淘宝网和淘宝商城也完成了数据整合,并淘宝网和淘宝商城的共享业务沉淀到多个业务中心。在 2009 年,共享业务事业部成立,在组织架构上共享业务事业部和淘宝、天猫平级。在业务中心的上层业务服务有,交易管理(TM,Trade Manager)、商品管理(IM,Item Manager)、店铺系统(ShopSystem)、商品详情(Detail)、评价管理(RateManager)等。2009 年淘宝的服务化拆分如下图所示[77]:
在各个应用服务拆分的同时,数据库也按业务功能做了垂直拆分,2008 年 Oracle 被拆分为商品、交易、用户、评价、收藏夹等 10 来套。当时的淘宝的分布式架构设计,包括 Java + Oracle 技术栈的选择,以及应用服务和数据库的拆分策略,很大程度上参考的是 eBay 的架构[75][78]。对照 eBay 架构师在 2006 年 11 月对外分享的 eBay 架构的 slides[66],容易发现两者大同小异。
因为使用 Oracle 成本太高,2008 年 8 月淘宝数据库设计了异构数据库读写分离架构,写库为集中式的 Oracle,读库使用分库分表的 MySQL,该数据库架构方案基于自研的数据库中间件 TDDL 实现[80]。之后的几年,数据库逐渐向 MySQL 迁移。2008 年 9 月前微软亚洲研究院常务副院长王坚博士加盟阿里巴巴集团,担任首席架构师,2009 年 11 月时任阿里 CTO 的王坚博士决策启动阿里“去IOE”工程。淘宝的“去IOE”工程的关键时点[81]:
值得注意的是,在 2011 年淘宝商品库和交易库“去IOE”的同时,为了满足数据库的性能要求,底层硬件从 HDD 机械硬盘改为 SSD 固态硬盘。而庆幸的是,当时的前几年正好是 SSD 大爆发的时间点[82]。在消费级 SSD 市场,2010 年苹果的 MacBook Air 开始全面改用 SSD,2012 年苹果的 MacBook Pro 开始全面改用 SSD。在数据库服务器层面,因为 SSD 在随机读写的性能具有巨大优势,2010 年开始机械硬盘改用 SSD 成为趋势,当时的 MySQL 新版代码也专门针对 SSD 做了性能优化[83]。
2009 年初淘宝演变为 SOA 架构后,服务拆分粒度越来越细,到 2009 年底拆分出的总服务数达到 187 个,到 2010 年底达到 329 个[77]。因为系统依赖关系越来越复杂,当时最大问题是稳定性问题,系统的稳定性建设成为重点工作。到 2013 年阿里电商系统开始 4.0 架构改造,即异地多活架构改造,内部称为单元化项目。2013 年 8 月完成杭州同城双活,2014 年双 11 前的 10 月完成杭州和上海近距离两个单元的异地双活,2015 年双 11 完成三地四单元的异地多活[76][79],至此也完成了 3.0 到 4.0 架构的升级。在阿里电商系统迁移到阿里云公共云方面,2015 年阿里电商系统开始采用混合云弹性架构,当阿里本地保有云无法支撑时,就快速在公有云上扩建新的单元,当流量过去后,再还资源给公有云。2015 年 10% 的双 11 大促流量使用了阿里云的机器来支撑,2016 年 50% 以上的双 11 大促流量使用了阿里云的机器来支撑[76]。2019 年初,阿里电商开启了全面上公共云的改造,到 2019 年双 11,阿里电商系统实现了全部核心应用上公共云,2021 年双 11,阿里电商系统实现了 100% 上公共云。
当前阿里电商系统(淘宝、天猫等)的主要技术栈[78][79]:
2016 年,阿里产品专家倪超对外介绍的阿里电商技术架构,如下图所示[86]:
类似的,阿里巴巴中间件首席架构师《企业IT架构转型之道》(豆瓣)作者钟华在 2017 年对外介绍的阿里电商技术架构图[87]:
2017 年,阿里中间件技术部专家谢吉宝对外介绍的阿里中间件技术大图[79]:
阿里 HSF 与 Dubbo 的历史演进时间线:
阿里 RocketMQ 的历史演进时间线:
LinkedIn,2003 年创立,采用纯 Java 技术栈,早期是单体架构,到 2008 年演化为 SOA 架构[96]。到 2010 年拆分的服务数超过 150 个,到 2015 年拆分的服务数超过 750 个[97]。
2008 年,LinkedIn 对外介绍的技术架构如下图所示[96]:
2012 年,LinkedIn 对外介绍的关注在数据基础设施上的技术架构图[98]:
Facebook,2004 年创立,早期采用 LAMP 技术栈,为了应对负载增长开始服务化,将核心业务从 LAMP 中移出到新的服务,新的服务改用使用 C++、Java 等编写。为了解决 PHP 进程与非 PHP 进程的 RPC 通信问题,2006 年内部研发了跨语言的 RPC 库 Thrift,2007.04 对外开源。PHP 代码用于实现前端展示层的 Web 动态页面渲染,以及对服务层的数据聚合。
2010 年,Facebook 工程师 Aditya Agarwal 对外介绍的 Facebook 技术架构如下图所示[101]:
Facebook 的技术栈图[102]:
Facebook 的 NewsFeed 服务的架构图[102]:
Facebook 的 Search 服务的架构图[102]:
当前 Facebook 的主要技术栈[101][102][103]:
Twitter,2006 年创立,早期采用 Ruby on Rails 技术栈,数据库是 MySQL,2009 年开始服务化,将核心业务从 Ruby on Rails 中移出到新的服务,新的服务用 Scala、Java 编写[109][110]。
2013 年,Twitter 工程师总结的 Twitter 从单体架构向分布式架构演进的过程,如下图所示[110]:
2007 Jeff Dean: Software Engineering Advice from Building Large-Scale Distributed Systems (Stanford CS295 class lecture, Spring, 2007) https://research.google.com/people/jeff/stanford-295-talk.pdf ↩
2008-11 Google Architecture http://highscalability.com/blog/2008/11/22/google-architecture.html ↩
2008-06 新浪夏清然、徐继哲:自由软件和新浪网. 程序员 2008年第6期54-55 http://lib.cqvip.com/Qikan/Article/Detail?id=27523653 http://www.zeuux.com/blog/content/3620/ ↩
2016-01 微信张文瑞:从无到有:微信后台系统的演进之路 https://www.infoq.cn/article/the-road-of-the-growth-weixin-background ↩
2008-02 Yandex Architecture http://highscalability.com/yandex-architecture ↩
2007-08 Wikimedia architecture http://highscalability.com/wikimedia-architecture ↩
2007-11 Flickr Architecture http://highscalability.com/flickr-architecture ↩
2016-03 What does Etsy's architecture look like today? http://highscalability.com/blog/2016/3/23/what-does-etsys-architecture-look-like-today.html ↩
2011-05 新浪刘晓震:新浪博客应用架构分享 (PHPChina 2011) https://web.archive.org/web/0/http://www.phpchina.com/?action-viewnews-itemid-38418 https://www.modb.pro/doc/121035 ↩
2013-11 百度张东进:百度PHP基础设施构建思路 (QCon上海2013, slides, 30p) https://www.modb.pro/doc/121042 ↩
2013-05 The Tumblr Architecture Yahoo Bought for a Cool Billion Dollars http://highscalability.com/blog/2013/5/20/the-tumblr-architecture-yahoo-bought-for-a-cool-billion-doll.html ↩
2017-06 B站任伟:B站高性能微服务架构 https://zhuanlan.zhihu.com/p/33247332 ↩ ↩
2021-05 微博刘道儒:十年三次重大架构升级,微博应对“极端热点”的进阶之路 https://www.infoq.cn/article/qgwbh0wz5bvw9apjos2a ↩
2012-08 腾讯张松国:腾讯微博架构介绍 (ArchSummit深圳2012, slides, 59p) https://www.slideshare.net/dleyanlin/08-13994311 ↩
2016-02 美团夏华夏:从技术细节看美团架构 (ArchSummit北京2014) https://www.infoq.cn/article/see-meituan-architecture-from-technical-details http://bj2014.archsummit.com/node/596/ https://www.modb.pro/doc/8311 ↩
2019-06 滴滴杜欢:大型微服务框架设计实践 (Gopher China 2019) https://www.infoq.cn/article/EfOlY8_rubh4LfoXzF8B https://www.modb.pro/doc/35485 ↩ ↩
2018-08 E-Commerce at Scale: Inside Shopify's Tech Stack - Stackshare.io https://shopify.engineering/e-commerce-at-scale-inside-shopifys-tech-stack ↩
2013-03 Phil Calçado @ SoundCloud: From a monolithic Ruby on Rails app to the JVM (slides, 75p) https://www.slideshare.net/pcalcado/from-a-monolithic-ruby-on-rails-app-to-the-jvm ↩
2012-07 Go at SoundCloud https://developers.soundcloud.com/blog/go-at-soundcloud ↩ ↩
2014-04 Peter Bourgon @ SoundCloud: Go: Best Practices for Production Environments (GopherCon 2014) http://peter.bourgon.org/go-in-production/ ↩ ↩
2009-04 Heroku - Simultaneously Develop and Deploy Automatically Scalable Rails Applications in the Cloud http://highscalability.com/blog/2009/4/24/heroku-simultaneously-develop-and-deploy-automatically-scala.html ↩
2021-07 GitHub’s Journey from Monolith to Microservices https://www.infoq.com/articles/github-monolith-microservices/ ↩
2017-12 Building Services at Airbnb, Part 1 https://medium.com/airbnb-engineering/c4c1d8fa811b ↩
2020-11 Jessica Tai @ Airbnb: How to Tame Your Service APIs: Evolving Airbnb’s Architecture https://www.infoq.com/presentations/airbnb-api-architecture/ ↩
2013-08 Reddit: Lessons Learned from Mistakes Made Scaling to 1 Billion Pageviews a Month http://highscalability.com/blog/2013/8/26/reddit-lessons-learned-from-mistakes-made-scaling-to-1-billi.html ↩ ↩
2012-03 7 Years of YouTube Scalability Lessons in 30 Minutes http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html ↩
2016-04 豆瓣田忠博:豆瓣的服务化体系改造 (QCon北京2016, slides, 37p) http://2016.qconbeijing.com/presentation/2834/ ↩
2010-09 Disqus: Scaling the World's Largest Django App (DjangoCon 2010, slides) https://www.slideshare.net/zeeg/djangocon-2010-scaling-disqus ↩
2021-05 Dropbox: Atlas: Our journey from a Python monolith to a managed platform https://dropbox.tech/infrastructure/atlas--our-journey-from-a-python-monolith-to-a-managed-platform ↩
2014-07 Dropbox: Open Sourcing Our Go Libraries https://dropbox.tech/infrastructure/open-sourcing-our-go-libraries ↩ ↩
2017-07 Tammy Butow @ Dropbox: Go Reliability and Durability at Dropbox https://about.sourcegraph.com/blog/go/go-reliability-and-durability-at-dropbox-tammy-butow ↩ ↩
2011-02 Adam D'Angelo: Why did Quora choose C++ over C for its high performance services? Does the Quora codebase use a limited subset of C++? https://qr.ae/pKwCE3 ↩
2012-02 A Short on the Pinterest Stack for Handling 3+ Million Users http://highscalability.com/blog/2012/2/16/a-short-on-the-pinterest-stack-for-handling-3-million-users.html ↩
2015-08 Finagle and Java Service Framework at Pinterest (slides) https://www.slideshare.net/yongshengwu/finaglecon2015pinterest ↩
2013-03 Instagram 5位传奇工程师背后的技术揭秘 https://web.archive.org/web/0/http://www.csdn.net/article/2013-03-28/2814698-The-technologie- behind-Instagram ↩ ↩
2017-03 Lisa Guo: Scaling Instagram Infrastructure(QCon London 2017, 87p) https://www.infoq.com/presentations/instagram-scale-infrastructure/ ↩ ↩
2019-08 Static Analysis at Scale: An Instagram Story https://instagram-engineering.com/8f498ab71a0c ↩ ↩
2016-07 The Uber Engineering Tech Stack, Part I: The Foundation https://web.archive.org/web/0/https://eng.uber.com/tech-stack-part-one/ ↩ ↩
2018-11 知乎社区核心业务 Golang 化实践 https://zhuanlan.zhihu.com/p/48039838 ↩ ↩
2022-10 字节马春辉:字节大规模微服务语言发展之路 https://www.infoq.cn/article/n5hkjwfx1gxklkh8iham ↩ ↩
2021-07 字节成国柱:字节跳动微服务架构体系演进 https://mp.weixin.qq.com/s/1dgCQXpeufgMTMq_32YKuQ ↩ ↩
Why does Google use Java instead of Python for Gmail? https://qr.ae/pKkduC ↩
2011-07 揭秘Google+技术架构 http://www.infoq.com/cn/news/2011/07/Google-Plus ↩
2009-12 人人网架构师张洁:人人网使用的开源软件列表 https://web.archive.org/web/0/http://ugc.renren.com/2009/12/13/a-list-of-open-source-software-in-renren ↩
2018-12 Netflix OSS and Spring Boot — Coming Full Circle https://netflixtechblog.com/4855947713a0 ↩
携程为什么突然技术转型从 .NET 转 Java? https://www.zhihu.com/question/56259195 ↩
Golang Frequently Asked Questions: Why did you create a new language? https://go.dev/doc/faq#creating_a_new_language ↩
2014-05 Brad Fitzpatrick: Go: 90% Perfect, 100% of the time: Fun vs. Fast https://go.dev/talks/2014/gocon-tokyo.slide#28 ↩
2021-08 百度Geek说:短视频go研发框架实践 https://my.oschina.net/u/4939618/blog/5191598 ↩
2023-07 百度Geek说:从 php5.6 到 golang1.19 - 文库 App 性能跃迁之路 https://my.oschina.net/u/4939618/blog/10086661 ↩
2022-03 2021年,腾讯研发人员增长41%,Go首次超越C++成为最热门语言 https://mp.weixin.qq.com/s/zj-DhASG4S-3z56GTYjisg ↩
2020-05 Which Major Companies Use PostgreSQL? What Do They Use It for? https://learnsql.com/blog/companies-that-use-postgresql-in-business/ ↩
2009-05 Why is MySQL more popular than PostgreSQL? https://news.ycombinator.com/item?id=619871 ↩
Why is MySQL more popular than PostgreSQL? https://qr.ae/pKPJcE ↩
2002-10 Michael Radwin: Making the Case for PHP at Yahoo! (PHPCon 2002, slides) https://web.archive.org/web/0/http://www.php-con.com/2002/view/session.php?s=1012 https://speakerdeck.com/yulewei/making-the-case-for-php-at-yahoo ↩ ↩
2005-10 Michael Radwin: PHP at Yahoo! (PHP Conference 2005, slides) https://speakerdeck.com/yulewei/php-at-yahoo-zend2005 ↩ ↩
2007-06 Federico Feroldi: PHP in Yahoo! (slides) https://www.slideshare.net/fullo/federico-feroldi-php-in-yahoo ↩
2021-02 AWS re:Invent 2020: Amazon.com’s architecture evolution and AWS strategy https://www.youtube.com/watch?v=HtWKZSLLYTE ↩ ↩
What programming languages are used at Amazon? https://qr.ae/pKFwnw ↩
2011-04 Charlie Cheever: How did Google, Amazon, and the like initially develop and code their websites, databases, etc.? https://qr.ae/pKKyB0 ↩
2016-04 Is Amazon still using Perl Mason to render its content? https://qr.ae/pKFwFm ↩
2019-10 Migration Complete – Amazon’s Consumer Business Just Turned off its Final Oracle Database https://aws.amazon.com/blogs/aws/migration-complete-amazons-consumer-business-just-turned-off-its-final-oracle-database/?nc1=h_ls ↩
Amazon RDS for PostgreSQL customers https://aws.amazon.com/rds/postgresql/customers/?nc1=h_ls ↩
Amazon ElastiCache for Redis customers https://aws.amazon.com/elasticache/redis/customers/?nc1=h_ls ↩
2006-11 Randy Shoup & Dan Pritchett: The eBay Architecture (SDForum2006, slides, 37p) http://www.addsimplicity.com/downloads/eBaySDForum2006-11-29.pdf ↩ ↩ ↩
2007-05 eBay Architecture http://highscalability.com/blog/2008/5/27/ebay-architecture.html ↩ ↩
2011-10 Tony Ng: eBay Architecture (slides, 46p) https://www.slideshare.net/tcng3716/ebay-architecture ↩
2016-11 Ron Murphy: Microservices at eBay (slides, 20p) https://www.modb.pro/doc/120378 ↩ ↩ ↩
2020-09 High Efficiency Tool Platform for Framework Migration https://innovation.ebayinc.com/tech/engineering/high-efficiency-tool-platform-for-framework-migration/ ↩
2023-10 BES2:打造eBay下一代高可靠消息中间件 https://mp.weixin.qq.com/s/ThhkO1WM7ck1WO8RqjTCJA ↩
2013-06 Cassandra at eBay - Cassandra Summit 2013 (slides) https://www.slideshare.net/jaykumarpatel/cassandra-at-ebay-cassandra-summit-2013 ↩
2017-03 Sudeep Kumar: 'Elasticsearch as a Service' at eBay https://www.elastic.co/elasticon/conf/2017/sf/elasticsearch-as-a-service-at-ebay ↩
2016-08 How eBay Uses Apache Software to Reach Its Big Data Goals https://www.linux.com/news/how-ebay-uses-apache-software-reach-its-big-data-goals/ ↩
2011-06 淘宝吴泽明范禹:淘宝业务发展及技术架构 (slides, 43p) https://www.modb.pro/doc/116697 ↩ ↩ ↩
2014-12 阿里云王宇德、张文生:淘宝迁云架构实践 https://web.archive.org/web/1/http://www.csdn.net/article/a/2014-12-09/15821474 ↩ ↩ ↩
2017-07 阿里谢吉宝唐三:阿里电商架构演变之路 (首届阿里巴巴中间件技术峰会, slides, 33p) https://www.modb.pro/doc/121185 ↩ ↩ ↩ ↩
2010-11 淘宝赵林丹臣:淘宝数据库架构演进历程 (iDataForum2010, slides, 38p) https://www.slideshare.net/ssuser1646de/ss-10163048 ↩
2019-10 阿里刘振飞:十年磨一剑:从2009启动“去IOE”工程到2019年OceanBase拿下TPC-C世界第一 https://mp.weixin.qq.com/s/7B6rp17XVhpAWZr1-6DHqQ https://developer.aliyun.com/article/722414 ↩
2016-02 SSD的30年发展史 https://mp.weixin.qq.com/s/JsHKFilB5fvLY9V9z_xsXw ↩
2010-04 Yoshinori Matsunobu: SSD Deployment Strategies for MySQL (slides, 52p) https://www.slideshare.net/matsunobu/ssd-deployment-strategies-for-mysql ↩
2020-04 阿里王剑英、和利:淘宝万亿级交易订单背后的存储引擎 https://mp.weixin.qq.com/s/MkX1Pr8tERrzK29XG9zMUQ https://help.aliyun.com/zh/rds/apsaradb-rds-for-mysql/storage-engine-that-processes-trillions-of-taobao-order-records ↩
2022-03 阿里云罗庆超:阿里巴巴集团上云之 TFS 迁移 OSS 技术白皮书 https://developer.aliyun.com/article/876301 ↩
2016-12 阿里倪超:阿里巴巴Aliware十年微服务架构演进历程中的挑战与实践 https://www.sohu.com/a/121588928_465959 ↩
2017-10 阿里钟华古谦:企业IT架构转型之道 (杭州云栖大会2017, slides, 18p) https://www.modb.pro/doc/121695 ↩
2021-09 阿里郭浩:Dubbo 和 HSF 在阿里巴巴的实践:携手走向下一代云原生微服务 https://mp.weixin.qq.com/s/_Ug3yEh9gz5mLE_ag1DjwA ↩ ↩ ↩
2012-11 阿里巴巴分布式服务框架 Dubbo 团队成员梁飞专访 http://www.iteye.com/magazines/103 ↩
2019-01 Dubbo 作者梁飞亲述:那些辉煌、沉寂与重生的故事 https://www.infoq.cn/article/3F3Giujjo-QwSw2wEz7u ↩ ↩
Dubbo 用户案例:阿里巴巴升级 Dubbo3 全面取代 HSF2 https://cn.dubbo.apache.org/zh-cn/users/alibaba/ https://github.com/apache/dubbo-website/blob/ee727525aa61d68b397cc6ddedb322001f0ca4da/content/zh/users/alibaba.md ↩
2023-01 阿里巴巴升级 Dubbo3 全面取代 HSF2 https://cn.dubbo.apache.org/zh-cn/blog/2023/01/16/阿里巴巴升级-dubbo3-全面取代-hsf2/ ↩
2017-11 阿里林清山隆基:阿里消息中间件架构演进之路:notify和metaq https://zhuanlan.zhihu.com/p/302600352 ↩
2013-07 淘宝张乐伟韩彰:淘宝消息中间件技术演变:MetaQ 1.0、MetaQ 2.0、MetaQ 3.0(sildes, 30p)https://www.modb.pro/doc/109298 ↩
2017-03 阿里冯嘉鼬神:Apache RocketMQ背后的设计思路与最佳实践 https://developer.aliyun.com/article/71889 ↩
2008-05 LinkedIn - A Professional Network built with Java Technologies and Agile Practices (JavaOne2008, slides) https://www.slideshare.net/linkedin/linkedins-communication-architecture ↩ ↩ ↩
2015-07 Josh Clemm: A Brief History of Scaling LinkedIn https://engineering.linkedin.com/architecture/brief-history-scaling-linkedin https://www.slideshare.net/joshclemm/how-linkedin-scaled-a-brief-history ↩ ↩
Aditya Auradkar, Chavdar Botev, etc.: Data Infrastructure at LinkedIn. ICDE 2012: 1370-1381,dblp, semanticscholar, slides ↩ ↩ ↩
2012-06 Sid Anand: LinkedIn Data Infrastructure Slides (Version 2) (slides) https://www.slideshare.net/r39132/linkedin-data-infrastructure-slides-version-2-13394853 ↩ ↩
2021-12 Evolving LinkedIn’s analytics tech stack https://engineering.linkedin.com/blog/2021/evolving-linkedin-s-analytics-tech-stack ↩ ↩
2010-05 Aditya Agarwal: Scale at Facebook (Qcon London 2010) https://www.infoq.com/presentations/Scale-at-Facebook/ ↩ ↩
2008-11 Aditya Agarwal: Facebook architecture (QCon SF 2008, slides, 34p) https://www.slideshare.net/mysqlops/facebook-architecture https://www.infoq.com/presentations/Facebook-Software-Stack/ ↩ ↩ ↩ ↩
2011-04 Michaël Figuière: What is Facebook's architecture? https://qr.ae/pKYg12 ↩
2013-10 Where does Facebook use C++? https://qr.ae/pKCIee ↩
2022-07 Programming languages endorsed for server-side use at Meta https://engineering.fb.com/2022/07/27/developer-tools/programming-languages-endorsed-for-server-side-use-at-meta/ ↩
2015-07 Instagram: Search Architecture https://instagram-engineering.com/eeb34a936d3a ↩
Guoqiang Jerry Chen, Janet L. Wiener, etc.: Realtime Data Processing at Facebook. SIGMOD Conference 2016: 1087-1098,dblp, semanticscholar ↩
2021-10 XStream: stream processing platform at facebook (Flink Forward Global 2021, slides) https://www.slideshare.net/aniketmokashi/xstream-stream-processing-platform-at-facebook ↩
2013-01 Johan Oskarsson: The Twitter stack https://blog.oskarsson.nu/post/40196324612/the-twitter-stack ↩ ↩
2013-10 Chris Aniszczyk: Evolution of The Twitter Stack (slides) https://www.slideshare.net/caniszczyk/twitter-opensourcestacklinuxcon2013 ↩ ↩ ↩
2017-01 The Infrastructure Behind Twitter: Scale https://blog.twitter.com/engineering/en_us/topics/infrastructure/2017/the-infrastructure-behind-twitter-scale ↩
2010-07 Cassandra at Twitter Today https://blog.twitter.com/engineering/en_us/a/2010/cassandra-at-twitter-today ↩
2011-12 How Twitter Stores 250 Million Tweets a Day Using MySQL http://highscalability.com/blog/2011/12/19/how-twitter-stores-250-million-tweets-a-day-using-mysql.html ↩
2013-11 Michael Busch: Search at Twitter (Lucene Revolution 2013, slides) https://www.slideshare.net/lucenerevolution/twitter-search-lucenerevolutioneu2013-copy https://www.youtube.com/watch?v=AguWva8P_DI ↩ ↩
2022-10 Stability and scalability for search https://blog.twitter.com/engineering/en_us/topics/infrastructure/2022/stability-and-scalability-for-search ↩
2021-10 Processing billions of events in real time at Twitter https://blog.twitter.com/engineering/en_us/topics/infrastructure/2021/processing-billions-of-events-in-real-time-at-twitter- ↩
在“开源”(open source)一词出现之前,技术社区的黑客选择使用“自由软件”(free software)这个词。但是“自由软件”这个词与对知识产权的敌意、共产主义和其它观点相联系,几乎不受管理者和投资者的欢迎,于是 1998 年 2 月 3 日在由 Eric Raymond 等人参加的会议上“开源”一词诞生,2 月下旬开源软件促进会成立 OSI,Eric Raymond 担任主席。自由软件和开源软件被合称为 FOSS。缩写“LAMP”代表的是 Linux-Apache-MySQL-PHP,这些软件都是自由软件或开源软件。
在互联网诞生早期,开源技术栈、开源社区尚未成熟,互联网公司不得不自研专有软件,随着开源软件的成熟,技术栈的选择开始从专有软件逐渐转向开源软件。先来看下,主要 Web 技术和服务端技术的发展时间线:
按编程语言区别,主要流行的互联网产品的创建时间和早期的技术栈选择(也可以参见 wiki):
值得一提的是,PHP 之父 Rasmus Lerdorf,在 2002 年至 2009 年期间为供职于 Yahoo!,2011 年起至今供职于 Etsy。Python 之父 Guido van Rossum,在 2005 年至 2012 年期间供职于 Google,在 2013 年至 2019 年期间供职于 Dropbox。国内最有影响力的 PHP 技术专家是惠新宸,是加入 PHP 语言官方开发组的首位国人,曾先后供职于雅虎中国、百度、新浪微博、链家网等公司。
2000 年前创建的网站,因为开源技术栈尚未成熟,编程语言基本上都是选择 C++ 开发。在开源技术栈成熟后,多数网站会选择拥抱开源。具体选择哪个编程语言,PHP、Ruby、Python、Java 等,主要由技术负责人的技术偏好决定。根据 w3techs 统计,历年网站使用的服务端编程语言统计占比,2012 年至今 10 多年,PHP 占比稳居榜首,每年都是 75% 以上。大型网站通常都是公司内的技术团队研发的,技术栈由技术团队选择,而很多小型网站,很可能会直接使用开源的 CMS 系统搭建。根据 w3techs 统计,前 100 万网站中有 43.0% 使用 WordPress 构建。WordPress 的服务端编程语言就是 PHP,数据库是 MySQL。大型网站选择 PHP 越来越少,因为 PHP 是解释型脚本语言,相对编译型编程语言有性能劣势。另外,PHP 的优势是快速开发 Web 动态网页,但是随着前后端分离开发模式的流行,Web 页面从服务端渲染逐渐转向客户端渲染,PHP 的优势不再,后端工程师只需要向前端提供 REST API 接口,展示层的实现完全由前端工程师实现。
早期部分网站选择 .NET 技术栈,比如京东、携程。但是,Java 平台生态更完善,有非常多的经验可以借鉴。另外,.NET 平台本身虽然不收费,但是 Windows 操作系统是收费的,开发工具也不便宜。于是京东在 2012 年从 .NET 迁移到 Java,携程在 2017 左右从 .NET 迁移到 Java。目前在国内,多数互联网大厂都选择 Java 技术栈,如淘宝、美团、京东、微博、携程等,Java 相对来说是主流选择。
编程语言的另外一个流行趋势是 Go 语言。Go 语言诞生于 Google,在 2009 年 11 月对外公开。在发明 Go 语言前,Google 内部主要使用的语言是 C++、Java 和 Python 等,但是 Go 发明者认为这些语言无法同时满足高效编译、高效执行和易于编程的特性诉求,所以创造了 Go 语言[48]。Go 比 C++ 能更高效编译和易于编程,比 Java 更易于编程,比 Python 能更高效执行。在 GoCon Tokyo 2014 会议上,Go 语言研发团队的 Brad Fitzpatrick 对各种编程语言在编程乐趣和执行速度(Fun vs. Fast)的对比[49],如下图所示:
早期由 Go 语言实现的经典开源项目主要是基础设施软件,比如 YouTube 的 Vitess 数据库分片中间件(2012.02 对外开源)、Docker 容器(2013.03 对外开源)、Red Hat 的 CoreOS 团队的 Etcd 分布式配置服务(2013.07 对外开源,实现 Raft 共识协议)、前 Google 工程师创建的 CockroachDB 分布式数据库(2014.02 对外开源,受 Google Spanner 启发)、Google 的 Kubernetes 容器编排系统(2014.06 对外开源)、SoundCloud 的 Prometheus 监控工具(2015.01 对外开源)等。大规模使用 Go 语言的代表性的国外的互联网公司有 SoundCloud[19][20]、Dropbox[30][31]、Uber[38] 等,国内的有七牛云、字节跳动[40][41]、哔哩哔哩[12]、滴滴[16]、知乎[39]、百度[50][51]、腾讯[52]等,在这些互联网公司 Go 语言通常主要被用于构建基础设施软件(网关、数据存储、监控、视频处理等)或高性能要求的业务服务,部分公司的大量核心业务也从 Python、PHP 等迁移到 Go 语言。使用 Go 语言的公司的更加完整的列表,可以参见官方整理的“GoUsers”。
数据库方面,根据 DB-Engines Ranking 的统计,流行的关系数据库主要是 4 个,开源免费的 MySQL 和 PostgreSQL,专有收费的 Oracle 和 Microsoft SQL Server。多数互联网产品使用的数据库是 MySQL,部分是 PostgreSQL 或 Oracle。一些早期使用 Oracle 数据库的网站选择部分或完全从 Oracle 数据库中迁出,代表性的案例是,Amazon 从 Oracle 完全迁移到 Amazon RDS 和 NoSQL,淘宝从 Oracle 完全迁移到 MySQL。以 PostgreSQL 为主数据库的互联网应用有 Skype、Reddit、Spotify、Disqus、Heroku、Instagram 等[53]。
MySQL 相对 PostgreSQL 更加流行的主要原因是[54][55],在早期 MySQL 入门槛更低。MySQL 就支持在 Windows 下安装,而 PostgreSQL 只能在 Cygwin 下安装,MySQL 对 Windows 平台的支持使得初学者更容易上手,并且 MySQL 更加易于管理,能够快速简单地启动和使用,而且 MySQL 拥有一个非常简洁、易于导航和用户友好的在线文档和支持社区。另外一个重要原因是,MySQL 很早就默认支持复制(replication),而 PostgreSQL 的复制是第三方的,而且极其难用。之后的几年即便 PostgreSQL 完善了不足,但错过了流行的时间窗口,MySQL 成为了主流选择,有更完善的生态。不过,受 MySQL 被 Oracle 公司收购的影响,近几年 PostgreSQL 开始越来越流行,根据 DB-Engines Ranking 的统计,最新的 PostgreSQL 的流行度分数是 10 年前的三倍,流行度与前三名越来越接近。
容易发现多数网站的技术栈的演进模式类似。在创建网站早期通常选择使用 PHP、Ruby、Python 脚本语言和框架来开发,这些脚本语言和框架具有更快的开发效率,能快速交付上线。随着网站流量的增长,面临性能和可扩展性问题,通常会将网站服务化,从单体架构向面向服务的 SOA 和微服务架构演进,一大部分网站在服务化过程中会选择将核心业务改由其他性能更佳的编译型编程语言来实现,如 Java、Scala、C++、Go,原先的脚本语言可能全部废弃,也可能仅用于前端展示层的 Web 动态页面渲染,比如 Facebook、Twitter 等。当然也有一部分网站,演进为 SOA 和微服务架构后,业务逻辑的实现一直以最初的脚本语言为主。
在架构微服务化后,很多网站实现的微服务之间采用基于 HTTP 协议的 REST 方式通信(或者使用的 RPC 框架支持跨语言 RPC 调用),各个微服务的实现在理论上编程语言不需要统一,可以根据该微服务的性能要求或负责该微服务的团队的技术偏好自由选择,所以真实世界的互联网公司内部各个业务子系统的技术栈可能不统一。但是内部技术栈不统一会带来额外的维护成本。另外,考虑技术栈的迁移重构成本,新的业务子系统使用新的技术栈,而有些旧的业务子系统很可能继续使用旧的技术栈。除了业务子系统外,很可能团队内部有自研的中间件、运维工具等,这些组件由中间件团队、运维团队研发,很可能会选择与业务系统不一样的技术栈。
注意,解决网站的可扩展性问题,不一定需要演进为服务化架构。架构服务化意味着将完整的单体服务按业务的功能领域做垂直拆分,而实际上在应用服务层可以通过部署多个相同副本的单体服务的方式实现系统的水平扩展,网站的可扩展性问题主要在数据存储层上。拆分应用服务的好处在于能实现组织团队的规模化。解决数据库的扩展性的策略有,数据复制(数据缓存、数据库读写分离)、数据垂直拆分、数据水平拆分(也叫数据分片,sharding)。数据库被拆分后,如果单个事务内的数据分散在多个节点就要解决分布式事务问题,但是实现分布式事务代价太大,通常的选择是牺牲一致性,仅满足最终一致性(BASE)。
没有拆分应用服务,始终采用单体架构的经典案例是 Instagram,2019 年 Instagram 在技术博客上有这样一段话[37]:
Our server app is a monolith, one big codebase of several million lines and a few thousand Django endpoints, all loaded up and served together. A few services have been split out of the monolith, but we don’t have any plans to aggressively break it up.
为了解决可扩展性问题,Instagram 在数据存储[35][36],对 PostgreSQL 数据库做了主从读写分离、数据垂直拆分和数据分片,并且使用了 NoSQL 数据库 Cassandra,用于存储 Feed 流等数据。类似的,Reddit 也是单体架构,在数据存储层做可扩展性改造,对 PostgreSQL 数据库做了垂直拆分,并且使用 Cassandra 数据库[25]。
Yahoo!,1994 年创立,早期网站操作系统是 FreeBSD,Web 服务器是自研的 Filo Server,数据库是自研的 DBM 文件,Web 动态页面脚本是自研的 yScript,业务逻辑编程语言是 C++。1996 年 Web 服务器改用 Apache HTTP Server,1999 年部分数据库改用 MySQL(同时也使用 Oracle 数据库),2002 年编程语言从 yScript 和 C++ 改为 PHP,操作系统也从 FreeBSD 逐渐转向 Linux[56][57][58]。在 2002.10 的 PHPCon 2002 会议上,Yahoo! 工程师 Michael Radwin 介绍了 Yahoo! 从专有软件向开源软件转向的原因和演进过程,以及选择 PHP 而不选择 ASP、Perl、JSP 等其他技术的原因[56]。Yahoo! 转向开源软件的原因主要是,避免维护专有软件的成本,开源软件从早期的不成熟最终变得成熟,具有更好的性能,更容易与第三方软件集成,以及开源社区逐渐发展壮大。2005 年,Yahoo! 的技术架构如下图所示[57]:
2000 年 ~ 2010 年,Yahoo! 是世界上流量最大的网站,虽然期间被 Google 短暂超越,但随后又反超,一直到到 2010 年后才被 Google 彻底超越。2000 年前后 Yahoo! 转向到 MySQL 和 PHP,并在技术上助力 LAMP 生态的发展壮大,对 LAMP 技术栈的流行起到巨大的推动作用。值得一提的是,知名 MySQL 专家 Jeremy Zawodny,《高性能MySQL》2004 年第 1 版(豆瓣)的作者,在 1999.12 ~ 2008.06 期间为 Yahoo! 工程师;PHP 之父 Rasmus Lerdorf 在 2002.09 ~ 2009.11 期间为 Yahoo! 工程师。
Amazon,1994 年创立,早期是单服务、单数据库的单体架构,使用的编程语言是 C++,2000 年开始从单体架构向 SOA 和微服务架构演进,使用最多的语言变为 Java,C++ 被用在高性能要求的系统和底层基础设施组件。Amazon 架构演进过程如下图所示[59]:
Amazon.com 的技术栈演进过程:
当前 Amazon.com 网站的主要技术栈[59][60][61][62]:
eBay,1995 年创立,早期使用的编程语言是 Perl,1997 年迁移到 C++,2002 年迁移到 Java。eBay 的技术栈演进过程[66][67]:
2016 年,eBay 的技术架构如下图所示[69]:
当前 eBay 的主要技术栈[66][67][69][70]:
淘宝技术架构[75][76][77][78][79],是从 LAMP 架构演变而来的。在 2003 年 5 月最早上线时,淘宝是对购买得到的采用 LAMP 架构网站源码进行二次开发的网站。为了应对网站流量的增长,2003 年底数据库从 MySQL 切换到 Oracle,2004 年初编程语言从 PHP 迁移到 Java,同时硬件演变为 IBM 小型机和 EMC 高端硬件存储,依赖的基础设施被统称为“IOE”(IBM 小型机、Oracle 数据库、EMC 存储设备),这个架构被称为 2.0 架构。
2007 年底开始拆分第一个业务中心是用户中心(UIC,User Information Center),在 2008 年初上线。2008 年初,启动“千岛湖”项目,拆分出了交易中心(TC,Trade Center)和类目属性中心(Forest)。2008 年 10 月,为了打通淘宝网和淘宝商城(后来的天猫)的数据,启动“五彩石”项目,拆分出了店铺中心(SC,Shop Center)、商品中心(IC,Item Center)、评价中心(RC,Rate Center)。到 2009 年初,“五彩石”项目结束,阿里电商架构也从之前的单体架构演进为了 SOA 服务化架构,被称为 3.0 架构,同时淘宝网和淘宝商城也完成了数据整合,并淘宝网和淘宝商城的共享业务沉淀到多个业务中心。在 2009 年,共享业务事业部成立,在组织架构上共享业务事业部和淘宝、天猫平级。在业务中心的上层业务服务有,交易管理(TM,Trade Manager)、商品管理(IM,Item Manager)、店铺系统(ShopSystem)、商品详情(Detail)、评价管理(RateManager)等。2009 年淘宝的服务化拆分如下图所示[77]:
在各个应用服务拆分的同时,数据库也按业务功能做了垂直拆分,2008 年 Oracle 被拆分为商品、交易、用户、评价、收藏夹等 10 来套。当时的淘宝的分布式架构设计,包括 Java + Oracle 技术栈的选择,以及应用服务和数据库的拆分策略,很大程度上参考的是 eBay 的架构[75][78]。对照 eBay 架构师在 2006 年 11 月对外分享的 eBay 架构的 slides[66],容易发现两者大同小异。
因为使用 Oracle 成本太高,2008 年 8 月淘宝数据库设计了异构数据库读写分离架构,写库为集中式的 Oracle,读库使用分库分表的 MySQL,该数据库架构方案基于自研的数据库中间件 TDDL 实现[80]。之后的几年,数据库逐渐向 MySQL 迁移。2008 年 9 月前微软亚洲研究院常务副院长王坚博士加盟阿里巴巴集团,担任首席架构师,2009 年 11 月时任阿里 CTO 的王坚博士决策启动阿里“去IOE”工程。淘宝的“去IOE”工程的关键时点[81]:
值得注意的是,在 2011 年淘宝商品库和交易库“去IOE”的同时,为了满足数据库的性能要求,底层硬件从 HDD 机械硬盘改为 SSD 固态硬盘。而庆幸的是,当时的前几年正好是 SSD 大爆发的时间点[82]。在消费级 SSD 市场,2010 年苹果的 MacBook Air 开始全面改用 SSD,2012 年苹果的 MacBook Pro 开始全面改用 SSD。在数据库服务器层面,因为 SSD 在随机读写的性能具有巨大优势,2010 年开始机械硬盘改用 SSD 成为趋势,当时的 MySQL 新版代码也专门针对 SSD 做了性能优化[83]。
2009 年初淘宝演变为 SOA 架构后,服务拆分粒度越来越细,到 2009 年底拆分出的总服务数达到 187 个,到 2010 年底达到 329 个[77]。因为系统依赖关系越来越复杂,当时最大问题是稳定性问题,系统的稳定性建设成为重点工作。到 2013 年阿里电商系统开始 4.0 架构改造,即异地多活架构改造,内部称为单元化项目。2013 年 8 月完成杭州同城双活,2014 年双 11 前的 10 月完成杭州和上海近距离两个单元的异地双活,2015 年双 11 完成三地四单元的异地多活[76][79],至此也完成了 3.0 到 4.0 架构的升级。在阿里电商系统迁移到阿里云公共云方面,2015 年阿里电商系统开始采用混合云弹性架构,当阿里本地保有云无法支撑时,就快速在公有云上扩建新的单元,当流量过去后,再还资源给公有云。2015 年 10% 的双 11 大促流量使用了阿里云的机器来支撑,2016 年 50% 以上的双 11 大促流量使用了阿里云的机器来支撑[76]。2019 年初,阿里电商开启了全面上公共云的改造,到 2019 年双 11,阿里电商系统实现了全部核心应用上公共云,2021 年双 11,阿里电商系统实现了 100% 上公共云。
当前阿里电商系统(淘宝、天猫等)的主要技术栈[78][79]:
2016 年,阿里产品专家倪超对外介绍的阿里电商技术架构,如下图所示[86]:
类似的,阿里巴巴中间件首席架构师《企业IT架构转型之道》(豆瓣)作者钟华在 2017 年对外介绍的阿里电商技术架构图[87]:
2017 年,阿里中间件技术部专家谢吉宝对外介绍的阿里中间件技术大图[79]:
阿里 HSF 与 Dubbo 的历史演进时间线:
阿里 RocketMQ 的历史演进时间线:
LinkedIn,2003 年创立,采用纯 Java 技术栈,早期是单体架构,到 2008 年演化为 SOA 架构[96]。到 2010 年拆分的服务数超过 150 个,到 2015 年拆分的服务数超过 750 个[97]。
2008 年,LinkedIn 对外介绍的技术架构如下图所示[96]:
2012 年,LinkedIn 对外介绍的关注在数据基础设施上的技术架构图[98]:
Facebook,2004 年创立,早期采用 LAMP 技术栈,为了应对负载增长开始服务化,将核心业务从 LAMP 中移出到新的服务,新的服务改用使用 C++、Java 等编写。为了解决 PHP 进程与非 PHP 进程的 RPC 通信问题,2006 年内部研发了跨语言的 RPC 库 Thrift,2007.04 对外开源。PHP 代码用于实现前端展示层的 Web 动态页面渲染,以及对服务层的数据聚合。
2010 年,Facebook 工程师 Aditya Agarwal 对外介绍的 Facebook 技术架构如下图所示[101]:
Facebook 的技术栈图[102]:
Facebook 的 NewsFeed 服务的架构图[102]:
Facebook 的 Search 服务的架构图[102]:
当前 Facebook 的主要技术栈[101][102][103]:
Twitter,2006 年创立,早期采用 Ruby on Rails 技术栈,数据库是 MySQL,2009 年开始服务化,将核心业务从 Ruby on Rails 中移出到新的服务,新的服务用 Scala、Java 编写[109][110]。
2013 年,Twitter 工程师总结的 Twitter 从单体架构向分布式架构演进的过程,如下图所示[110]:
2007 Jeff Dean: Software Engineering Advice from Building Large-Scale Distributed Systems (Stanford CS295 class lecture, Spring, 2007) https://research.google.com/people/jeff/stanford-295-talk.pdf ↩
2008-11 Google Architecture http://highscalability.com/blog/2008/11/22/google-architecture.html ↩
2008-06 新浪夏清然、徐继哲:自由软件和新浪网. 程序员 2008年第6期54-55 http://lib.cqvip.com/Qikan/Article/Detail?id=27523653 http://www.zeuux.com/blog/content/3620/ ↩
2016-01 微信张文瑞:从无到有:微信后台系统的演进之路 https://www.infoq.cn/article/the-road-of-the-growth-weixin-background ↩
2008-02 Yandex Architecture http://highscalability.com/yandex-architecture ↩
2007-08 Wikimedia architecture http://highscalability.com/wikimedia-architecture ↩
2007-11 Flickr Architecture http://highscalability.com/flickr-architecture ↩
2016-03 What does Etsy's architecture look like today? http://highscalability.com/blog/2016/3/23/what-does-etsys-architecture-look-like-today.html ↩
2011-05 新浪刘晓震:新浪博客应用架构分享 (PHPChina 2011) https://web.archive.org/web/0/http://www.phpchina.com/?action-viewnews-itemid-38418 https://www.modb.pro/doc/121035 ↩
2013-11 百度张东进:百度PHP基础设施构建思路 (QCon上海2013, slides, 30p) https://www.modb.pro/doc/121042 ↩
2013-05 The Tumblr Architecture Yahoo Bought for a Cool Billion Dollars http://highscalability.com/blog/2013/5/20/the-tumblr-architecture-yahoo-bought-for-a-cool-billion-doll.html ↩
2017-06 B站任伟:B站高性能微服务架构 https://zhuanlan.zhihu.com/p/33247332 ↩ ↩
2021-05 微博刘道儒:十年三次重大架构升级,微博应对“极端热点”的进阶之路 https://www.infoq.cn/article/qgwbh0wz5bvw9apjos2a ↩
2012-08 腾讯张松国:腾讯微博架构介绍 (ArchSummit深圳2012, slides, 59p) https://www.slideshare.net/dleyanlin/08-13994311 ↩
2016-02 美团夏华夏:从技术细节看美团架构 (ArchSummit北京2014) https://www.infoq.cn/article/see-meituan-architecture-from-technical-details http://bj2014.archsummit.com/node/596/ https://www.modb.pro/doc/8311 ↩
2019-06 滴滴杜欢:大型微服务框架设计实践 (Gopher China 2019) https://www.infoq.cn/article/EfOlY8_rubh4LfoXzF8B https://www.modb.pro/doc/35485 ↩ ↩
2018-08 E-Commerce at Scale: Inside Shopify's Tech Stack - Stackshare.io https://shopify.engineering/e-commerce-at-scale-inside-shopifys-tech-stack ↩
2013-03 Phil Calçado @ SoundCloud: From a monolithic Ruby on Rails app to the JVM (slides, 75p) https://www.slideshare.net/pcalcado/from-a-monolithic-ruby-on-rails-app-to-the-jvm ↩
2012-07 Go at SoundCloud https://developers.soundcloud.com/blog/go-at-soundcloud ↩ ↩
2014-04 Peter Bourgon @ SoundCloud: Go: Best Practices for Production Environments (GopherCon 2014) http://peter.bourgon.org/go-in-production/ ↩ ↩
2009-04 Heroku - Simultaneously Develop and Deploy Automatically Scalable Rails Applications in the Cloud http://highscalability.com/blog/2009/4/24/heroku-simultaneously-develop-and-deploy-automatically-scala.html ↩
2021-07 GitHub’s Journey from Monolith to Microservices https://www.infoq.com/articles/github-monolith-microservices/ ↩
2017-12 Building Services at Airbnb, Part 1 https://medium.com/airbnb-engineering/c4c1d8fa811b ↩
2020-11 Jessica Tai @ Airbnb: How to Tame Your Service APIs: Evolving Airbnb’s Architecture https://www.infoq.com/presentations/airbnb-api-architecture/ ↩
2013-08 Reddit: Lessons Learned from Mistakes Made Scaling to 1 Billion Pageviews a Month http://highscalability.com/blog/2013/8/26/reddit-lessons-learned-from-mistakes-made-scaling-to-1-billi.html ↩ ↩
2012-03 7 Years of YouTube Scalability Lessons in 30 Minutes http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html ↩
2016-04 豆瓣田忠博:豆瓣的服务化体系改造 (QCon北京2016, slides, 37p) http://2016.qconbeijing.com/presentation/2834/ ↩
2010-09 Disqus: Scaling the World's Largest Django App (DjangoCon 2010, slides) https://www.slideshare.net/zeeg/djangocon-2010-scaling-disqus ↩
2021-05 Dropbox: Atlas: Our journey from a Python monolith to a managed platform https://dropbox.tech/infrastructure/atlas--our-journey-from-a-python-monolith-to-a-managed-platform ↩
2014-07 Dropbox: Open Sourcing Our Go Libraries https://dropbox.tech/infrastructure/open-sourcing-our-go-libraries ↩ ↩
2017-07 Tammy Butow @ Dropbox: Go Reliability and Durability at Dropbox https://about.sourcegraph.com/blog/go/go-reliability-and-durability-at-dropbox-tammy-butow ↩ ↩
2011-02 Adam D'Angelo: Why did Quora choose C++ over C for its high performance services? Does the Quora codebase use a limited subset of C++? https://qr.ae/pKwCE3 ↩
2012-02 A Short on the Pinterest Stack for Handling 3+ Million Users http://highscalability.com/blog/2012/2/16/a-short-on-the-pinterest-stack-for-handling-3-million-users.html ↩
2015-08 Finagle and Java Service Framework at Pinterest (slides) https://www.slideshare.net/yongshengwu/finaglecon2015pinterest ↩
2013-03 Instagram 5位传奇工程师背后的技术揭秘 https://web.archive.org/web/0/http://www.csdn.net/article/2013-03-28/2814698-The-technologie- behind-Instagram ↩ ↩
2017-03 Lisa Guo: Scaling Instagram Infrastructure(QCon London 2017, 87p) https://www.infoq.com/presentations/instagram-scale-infrastructure/ ↩ ↩
2019-08 Static Analysis at Scale: An Instagram Story https://instagram-engineering.com/8f498ab71a0c ↩ ↩
2016-07 The Uber Engineering Tech Stack, Part I: The Foundation https://web.archive.org/web/0/https://eng.uber.com/tech-stack-part-one/ ↩ ↩
2018-11 知乎社区核心业务 Golang 化实践 https://zhuanlan.zhihu.com/p/48039838 ↩ ↩
2022-10 字节马春辉:字节大规模微服务语言发展之路 https://www.infoq.cn/article/n5hkjwfx1gxklkh8iham ↩ ↩
2021-07 字节成国柱:字节跳动微服务架构体系演进 https://mp.weixin.qq.com/s/1dgCQXpeufgMTMq_32YKuQ ↩ ↩
Why does Google use Java instead of Python for Gmail? https://qr.ae/pKkduC ↩
2011-07 揭秘Google+技术架构 http://www.infoq.com/cn/news/2011/07/Google-Plus ↩
2009-12 人人网架构师张洁:人人网使用的开源软件列表 https://web.archive.org/web/0/http://ugc.renren.com/2009/12/13/a-list-of-open-source-software-in-renren ↩
2018-12 Netflix OSS and Spring Boot — Coming Full Circle https://netflixtechblog.com/4855947713a0 ↩
携程为什么突然技术转型从 .NET 转 Java? https://www.zhihu.com/question/56259195 ↩
Golang Frequently Asked Questions: Why did you create a new language? https://go.dev/doc/faq#creating_a_new_language ↩
2014-05 Brad Fitzpatrick: Go: 90% Perfect, 100% of the time: Fun vs. Fast https://go.dev/talks/2014/gocon-tokyo.slide#28 ↩
2021-08 百度Geek说:短视频go研发框架实践 https://my.oschina.net/u/4939618/blog/5191598 ↩
2023-07 百度Geek说:从 php5.6 到 golang1.19 - 文库 App 性能跃迁之路 https://my.oschina.net/u/4939618/blog/10086661 ↩
2022-03 2021年,腾讯研发人员增长41%,Go首次超越C++成为最热门语言 https://mp.weixin.qq.com/s/zj-DhASG4S-3z56GTYjisg ↩
2020-05 Which Major Companies Use PostgreSQL? What Do They Use It for? https://learnsql.com/blog/companies-that-use-postgresql-in-business/ ↩
2009-05 Why is MySQL more popular than PostgreSQL? https://news.ycombinator.com/item?id=619871 ↩
Why is MySQL more popular than PostgreSQL? https://qr.ae/pKPJcE ↩
2002-10 Michael Radwin: Making the Case for PHP at Yahoo! (PHPCon 2002, slides) https://web.archive.org/web/0/http://www.php-con.com/2002/view/session.php?s=1012 https://speakerdeck.com/yulewei/making-the-case-for-php-at-yahoo ↩ ↩
2005-10 Michael Radwin: PHP at Yahoo! (PHP Conference 2005, slides) https://speakerdeck.com/yulewei/php-at-yahoo-zend2005 ↩ ↩
2007-06 Federico Feroldi: PHP in Yahoo! (slides) https://www.slideshare.net/fullo/federico-feroldi-php-in-yahoo ↩
2021-02 AWS re:Invent 2020: Amazon.com’s architecture evolution and AWS strategy https://www.youtube.com/watch?v=HtWKZSLLYTE ↩ ↩
What programming languages are used at Amazon? https://qr.ae/pKFwnw ↩
2011-04 Charlie Cheever: How did Google, Amazon, and the like initially develop and code their websites, databases, etc.? https://qr.ae/pKKyB0 ↩
2016-04 Is Amazon still using Perl Mason to render its content? https://qr.ae/pKFwFm ↩
2019-10 Migration Complete – Amazon’s Consumer Business Just Turned off its Final Oracle Database https://aws.amazon.com/blogs/aws/migration-complete-amazons-consumer-business-just-turned-off-its-final-oracle-database/?nc1=h_ls ↩
Amazon RDS for PostgreSQL customers https://aws.amazon.com/rds/postgresql/customers/?nc1=h_ls ↩
Amazon ElastiCache for Redis customers https://aws.amazon.com/elasticache/redis/customers/?nc1=h_ls ↩
2006-11 Randy Shoup & Dan Pritchett: The eBay Architecture (SDForum2006, slides, 37p) http://www.addsimplicity.com/downloads/eBaySDForum2006-11-29.pdf ↩ ↩ ↩
2007-05 eBay Architecture http://highscalability.com/blog/2008/5/27/ebay-architecture.html ↩ ↩
2011-10 Tony Ng: eBay Architecture (slides, 46p) https://www.slideshare.net/tcng3716/ebay-architecture ↩
2016-11 Ron Murphy: Microservices at eBay (slides, 20p) https://www.modb.pro/doc/120378 ↩ ↩ ↩
2020-09 High Efficiency Tool Platform for Framework Migration https://innovation.ebayinc.com/tech/engineering/high-efficiency-tool-platform-for-framework-migration/ ↩
2023-10 BES2:打造eBay下一代高可靠消息中间件 https://mp.weixin.qq.com/s/ThhkO1WM7ck1WO8RqjTCJA ↩
2013-06 Cassandra at eBay - Cassandra Summit 2013 (slides) https://www.slideshare.net/jaykumarpatel/cassandra-at-ebay-cassandra-summit-2013 ↩
2017-03 Sudeep Kumar: 'Elasticsearch as a Service' at eBay https://www.elastic.co/elasticon/conf/2017/sf/elasticsearch-as-a-service-at-ebay ↩
2016-08 How eBay Uses Apache Software to Reach Its Big Data Goals https://www.linux.com/news/how-ebay-uses-apache-software-reach-its-big-data-goals/ ↩
2011-06 淘宝吴泽明范禹:淘宝业务发展及技术架构 (slides, 43p) https://www.modb.pro/doc/116697 ↩ ↩ ↩
2014-12 阿里云王宇德、张文生:淘宝迁云架构实践 https://web.archive.org/web/1/http://www.csdn.net/article/a/2014-12-09/15821474 ↩ ↩ ↩
2017-07 阿里谢吉宝唐三:阿里电商架构演变之路 (首届阿里巴巴中间件技术峰会, slides, 33p) https://www.modb.pro/doc/121185 ↩ ↩ ↩ ↩
2010-11 淘宝赵林丹臣:淘宝数据库架构演进历程 (iDataForum2010, slides, 38p) https://www.slideshare.net/ssuser1646de/ss-10163048 ↩
2019-10 阿里刘振飞:十年磨一剑:从2009启动“去IOE”工程到2019年OceanBase拿下TPC-C世界第一 https://mp.weixin.qq.com/s/7B6rp17XVhpAWZr1-6DHqQ https://developer.aliyun.com/article/722414 ↩
2016-02 SSD的30年发展史 https://mp.weixin.qq.com/s/JsHKFilB5fvLY9V9z_xsXw ↩
2010-04 Yoshinori Matsunobu: SSD Deployment Strategies for MySQL (slides, 52p) https://www.slideshare.net/matsunobu/ssd-deployment-strategies-for-mysql ↩
2020-04 阿里王剑英、和利:淘宝万亿级交易订单背后的存储引擎 https://mp.weixin.qq.com/s/MkX1Pr8tERrzK29XG9zMUQ https://help.aliyun.com/zh/rds/apsaradb-rds-for-mysql/storage-engine-that-processes-trillions-of-taobao-order-records ↩
2022-03 阿里云罗庆超:阿里巴巴集团上云之 TFS 迁移 OSS 技术白皮书 https://developer.aliyun.com/article/876301 ↩
2016-12 阿里倪超:阿里巴巴Aliware十年微服务架构演进历程中的挑战与实践 https://www.sohu.com/a/121588928_465959 ↩
2017-10 阿里钟华古谦:企业IT架构转型之道 (杭州云栖大会2017, slides, 18p) https://www.modb.pro/doc/121695 ↩
2021-09 阿里郭浩:Dubbo 和 HSF 在阿里巴巴的实践:携手走向下一代云原生微服务 https://mp.weixin.qq.com/s/_Ug3yEh9gz5mLE_ag1DjwA ↩ ↩ ↩
2012-11 阿里巴巴分布式服务框架 Dubbo 团队成员梁飞专访 http://www.iteye.com/magazines/103 ↩
2019-01 Dubbo 作者梁飞亲述:那些辉煌、沉寂与重生的故事 https://www.infoq.cn/article/3F3Giujjo-QwSw2wEz7u ↩ ↩
Dubbo 用户案例:阿里巴巴升级 Dubbo3 全面取代 HSF2 https://cn.dubbo.apache.org/zh-cn/users/alibaba/ https://github.com/apache/dubbo-website/blob/ee727525aa61d68b397cc6ddedb322001f0ca4da/content/zh/users/alibaba.md ↩
2023-01 阿里巴巴升级 Dubbo3 全面取代 HSF2 https://cn.dubbo.apache.org/zh-cn/blog/2023/01/16/阿里巴巴升级-dubbo3-全面取代-hsf2/ ↩
2017-11 阿里林清山隆基:阿里消息中间件架构演进之路:notify和metaq https://zhuanlan.zhihu.com/p/302600352 ↩
2013-07 淘宝张乐伟韩彰:淘宝消息中间件技术演变:MetaQ 1.0、MetaQ 2.0、MetaQ 3.0(sildes, 30p)https://www.modb.pro/doc/109298 ↩
2017-03 阿里冯嘉鼬神:Apache RocketMQ背后的设计思路与最佳实践 https://developer.aliyun.com/article/71889 ↩
2008-05 LinkedIn - A Professional Network built with Java Technologies and Agile Practices (JavaOne2008, slides) https://www.slideshare.net/linkedin/linkedins-communication-architecture ↩ ↩ ↩
2015-07 Josh Clemm: A Brief History of Scaling LinkedIn https://engineering.linkedin.com/architecture/brief-history-scaling-linkedin https://www.slideshare.net/joshclemm/how-linkedin-scaled-a-brief-history ↩ ↩
Aditya Auradkar, Chavdar Botev, etc.: Data Infrastructure at LinkedIn. ICDE 2012: 1370-1381,dblp, semanticscholar, slides ↩ ↩ ↩
2012-06 Sid Anand: LinkedIn Data Infrastructure Slides (Version 2) (slides) https://www.slideshare.net/r39132/linkedin-data-infrastructure-slides-version-2-13394853 ↩ ↩
2021-12 Evolving LinkedIn’s analytics tech stack https://engineering.linkedin.com/blog/2021/evolving-linkedin-s-analytics-tech-stack ↩ ↩
2010-05 Aditya Agarwal: Scale at Facebook (Qcon London 2010) https://www.infoq.com/presentations/Scale-at-Facebook/ ↩ ↩
2008-11 Aditya Agarwal: Facebook architecture (QCon SF 2008, slides, 34p) https://www.slideshare.net/mysqlops/facebook-architecture https://www.infoq.com/presentations/Facebook-Software-Stack/ ↩ ↩ ↩ ↩
2011-04 Michaël Figuière: What is Facebook's architecture? https://qr.ae/pKYg12 ↩
2013-10 Where does Facebook use C++? https://qr.ae/pKCIee ↩
2022-07 Programming languages endorsed for server-side use at Meta https://engineering.fb.com/2022/07/27/developer-tools/programming-languages-endorsed-for-server-side-use-at-meta/ ↩
2015-07 Instagram: Search Architecture https://instagram-engineering.com/eeb34a936d3a ↩
Guoqiang Jerry Chen, Janet L. Wiener, etc.: Realtime Data Processing at Facebook. SIGMOD Conference 2016: 1087-1098,dblp, semanticscholar ↩
2021-10 XStream: stream processing platform at facebook (Flink Forward Global 2021, slides) https://www.slideshare.net/aniketmokashi/xstream-stream-processing-platform-at-facebook ↩
2013-01 Johan Oskarsson: The Twitter stack https://blog.oskarsson.nu/post/40196324612/the-twitter-stack ↩ ↩
2013-10 Chris Aniszczyk: Evolution of The Twitter Stack (slides) https://www.slideshare.net/caniszczyk/twitter-opensourcestacklinuxcon2013 ↩ ↩ ↩
2017-01 The Infrastructure Behind Twitter: Scale https://blog.twitter.com/engineering/en_us/topics/infrastructure/2017/the-infrastructure-behind-twitter-scale ↩
2010-07 Cassandra at Twitter Today https://blog.twitter.com/engineering/en_us/a/2010/cassandra-at-twitter-today ↩
2011-12 How Twitter Stores 250 Million Tweets a Day Using MySQL http://highscalability.com/blog/2011/12/19/how-twitter-stores-250-million-tweets-a-day-using-mysql.html ↩
2013-11 Michael Busch: Search at Twitter (Lucene Revolution 2013, slides) https://www.slideshare.net/lucenerevolution/twitter-search-lucenerevolutioneu2013-copy https://www.youtube.com/watch?v=AguWva8P_DI ↩ ↩
2022-10 Stability and scalability for search https://blog.twitter.com/engineering/en_us/topics/infrastructure/2022/stability-and-scalability-for-search ↩
2021-10 Processing billions of events in real time at Twitter https://blog.twitter.com/engineering/en_us/topics/infrastructure/2021/processing-billions-of-events-in-real-time-at-twitter- ↩