From b71ca401f30e3e6de4c2632688e68ac80dcc41a3 Mon Sep 17 00:00:00 2001 From: yulewei Date: Thu, 21 Dec 2023 15:36:47 +0800 Subject: [PATCH] Site updated: 2023-12-21 15:36:46 --- .../amazon-architecture-evolution/index.html | 4 +++- atom.xml | 4 +++- posts/amazon-architecture-evolution.md | 2 +- search.xml | 1 + sitemap.txt | 2 +- sitemap.xml | 6 +++--- tags/index.html | 2 +- .../index.html" | 20 +++++++++++++++++++ 8 files changed, 33 insertions(+), 8 deletions(-) diff --git a/2023/11/amazon-architecture-evolution/index.html b/2023/11/amazon-architecture-evolution/index.html index f78c7f24..a6a1bab5 100644 --- a/2023/11/amazon-architecture-evolution/index.html +++ b/2023/11/amazon-architecture-evolution/index.html @@ -37,13 +37,14 @@ - + + @@ -469,6 +470,7 @@

参考资料

+ diff --git a/atom.xml b/atom.xml index bf906b41..aee4e712 100644 --- a/atom.xml +++ b/atom.xml @@ -56,7 +56,7 @@ https://nullwy.me/2023/11/amazon-architecture-evolution/ 2023-11-04T04:45:00.000Z - 2023-12-21T07:31:42.170Z + 2023-12-21T07:36:37.115Z SOA 与微服务

Amazon,1994 年创立,早期网站是单服务、单数据库的单体架构的系统[1][2][3],全部代码由 C++ 编写,编译成单个二进制文件,整个代码仓库被命名为 Obidos。Obidos 是底层是一个 Web 页面渲染引擎,是一个框架,业务逻辑基于这个框架开发,Obidos 渲染引擎和业务逻辑共同组成整个代码仓库。随着时间的推移,Obidos 变得越来越复杂,编译 Obidos 整个代码库耗时 12 小时,开发调试效率低下[2:1]。另外,全部业务逻辑在单个二进制文件中,导致紧耦合,新功能特性无法快速发布上线。1995 年,Amazon 网站的技术架构,如下图所示[3:1]

Amazon 网站技术架构(1995)

到 2000 年,为了应对流量增长,解决网站的可扩展性问题,开始拆分 Obidos,向可扩展的 SOA 架构演进。拆分出的服务有,用户服务(customer service)、订单服务(order service)、商品服务(item service)等,并且每个服务都拥有各自独立的数据库。2005 年 1 月,Amazon 网站开始从 Obidos 引擎迁移到 Gurupa 引擎。Gurupa 是一个 Web 页面渲染引擎,同时也是一个 SOA 框架,Gurupa 被用于集成背后的数百个服务,使用 Perl 的 Mason 模板将各个服务响应的数据渲染成 Web 页面。到 2006 年完成了到 Gurupa 的全部迁移[4]

Amazon 网站技术架构演进过程,如下图所示[2:2]

Amazon 网站技术架构演进

需要注意的是,图中认为从 2006 年开始 Amazon 网站架构从 SOA 演进为微服务,但是事实上,“微服务”这个术语诞生的时间是 2012 年。2006 年的架构实现与之前的 SOA 架构实现的不同点是,开始更细粒度的服务拆分。

本质上来看,微服务架构是一种特殊的 SOA 架构,在“微服务”术语诞生之前,亚马逊的 SOA 架构实现被认为是“SOA done right”(正确实现的 SOA)[5]。Netflix 的 SOA 架构实现也在“微服务”术语诞生之前,Netflix 认为自己实现架构的是“fine-grained SOA”(细粒度的 SOA)[6]。James Lewis 和 Martin Fowler 等人是“微服务”概念的早期提倡者,他们将亚马逊和 Netflix 的 SOA 架构实现归类为微服务的经典案例[7]。所以,SOA 和微服务的关系可以简单理解为,微服务是“fine-grained SOA”或“SOA done right”。

根据 Martin Fowler 的解释[7:1][8],SOA 与微服务的关系,如下图所示:

SOA 与微服务的关系

在 SOA 架构的具体实践上,根据前亚马逊工程师 Steve Yegge 的 2011 年的文章[9][10],在 2002 年左右,亚马逊创始人兼 CEO Jeff Bezos 向全公司发布了一道指令(这个指令被外界称为“API Mandate”),具体内容如下:

  1. 从今天起,所有的团队都要以服务接口的方式提供数据和各种功能。
  2. 团队之间必须通过接口来通信。
  3. 不允许任何其他形式的互操作:不允许直接链接,不允许直接读其他团队的数据,不允许共享内存,不允许任何形式的后门。唯一许可的通信方式就是通过网络调用服务。
  4. 至于具体的技术则不做规定。HTTP、Corba、Pubsub、自定义协议都可以。贝索斯不关心这个。
  5. 所有的服务接口,必须从一开始就要以可以公开为设计导向,没有例外。这就是说,团队必须在设计的时候就计划好,接口要可以对外面的开发人员开放。没有讨价还价的余地。
  6. 不听话的人会被炒鱿鱼。

技术栈演进

Amazon 网站的技术栈演进过程[2:3][4:1][11]

当前 Amazon 网站的主要技术栈:

AWS 的诞生

Amazon 网站架构演进的过程,伴随着 AWS 云服务的诞生,促使 AWS 云服务诞生的因素主要有[17][18]

于是,在 2003 年亚马逊团队内部逐渐开始形成销售基础设施服务的设想。2003 年 9 月[22]Andy Jassy 写了 6 页纸的关于 AWS 的愿景文档(vision document)并提交给管理团队,愿景文档中提议了设想的 AWS 业务,并概述了 AWS 提供的初始的基础设施服务集,首批提供的服务包括存储、计算和数据库等。同年,Jassy 组建了由 57 人组成的 AWS 团队,AWS 团队的 CEO 由 Jassy 担任(Jassy 担任 AWS CEO 一直到 2021 年,2021 年 7 月开始任职亚马逊 CEO)。三年之后,2006 年 3 月 AWS 对外发布 S3 云存储,8 月对外发布 EC2 弹性云计算服务器,S3 和 EC2 是行业内最早的云服务产品。S3 发布的刚开始几个月,并没有引起太大的关注。EC2 发布后,大量开发商开始飞速涌入。在没有其他类似云服务产品最初几年,几乎每一家创业公司都在亚马逊的服务器上构建自己的系统。能吸引大量开发商的原因主要是,按需使用和收费的商业模式,以及亚马逊故意压力利润的价格策略[17:2]

迁移到 AWS

2011 年 11 月,Amazon 网站全部都迁移到了 AWS 云服务器上[23]。迁移到 AWS 上最大的动机是能利用 AWS 云服务器的弹性伸缩能力,从而节省成本。如果没有弹性伸缩能力,在淡季时,总体上服务器资源容量的利用率是 61%,无法有效利用的容量是 39%,到购物季的 11 月,无法有效利用的容量高到 76%。引入弹性伸缩技术后,可以按网站的实际流量负载情况,供应恰当的容量,避免资源浪费。Amazon 网站在淡季和购物季时的静态伸缩与弹性伸缩,如下图所示[23:1][24]

Amazon 网站的典型的周流量分布Amazon 网站的静态伸缩Amazon 网站的弹性伸缩

参考资料


  1. 2006-05 ACM Queue Interview: A Conversation with Amazon CTO Werner Vogels https://queue.acm.org/detail.cfm?id=1142065 ↩︎

  2. 2021-02 Amazon’s architecture evolution and AWS strategy (AWS re:Invent 2020) https://www.youtube.com/watch?v=HtWKZSLLYTE ↩︎ ↩︎ ↩︎ ↩︎

  3. 2022-11 Reliable scalability: How Amazon scales in the cloud (AWS re:Invent 2022) https://www.youtube.com/watch?v=_AhfV5LZmvo ↩︎ ↩︎

  4. 2011-04 Charlie Cheever: How did Google, Amazon, and the like initially develop and code their websites, databases, etc.? https://qr.ae/pKKyB0 ↩︎ ↩︎ ↩︎

  5. 2007-06 SOA done right: the Amazon strategy https://www.zdnet.com/article/soa-done-right-the-amazon-strategy/ ↩︎

  6. 2011-05 How the cloud helps Netflix (interview Adrian Cockcroft) http://radar.oreilly.com/2011/05/netflix-cloud.html ↩︎

  7. 2014-03 James Lewis & Martin Fowler: Microservices https://martinfowler.com/articles/microservices.html ↩︎ ↩︎

  8. 2014-11 Microservices • Martin Fowler • GOTO 2014 https://youtu.be/wgdBVIX9ifA?t=880 ↩︎

  9. 2011-10 Steve's Google Platform rant https://gist.github.com/chitchcock/1281611 ↩︎

  10. 2016-09 亚马逊如何变成 SOA(面向服务的架构)?(摘录自Steve Yegg的《程序员的呐喊》) https://www.ruanyifeng.com/blog/2016/09/how_amazon_take_soa.html ↩︎

  11. What programming languages are used at Amazon? https://qr.ae/pKFwnw ↩︎ ↩︎

  12. 2001-10 How Linux saved Amazon millions https://web.archive.org/web/0/http://news.com.com/2100-1001-275155.html ↩︎

  13. 2019-10 Migration Complete – Amazon’s Consumer Business Just Turned off its Final Oracle Database https://aws.Amazon/blogs/aws/migration-complete-amazons-consumer-business-just-turned-off-its-final-oracle-database/?nc1=h_ls ↩︎ ↩︎

  14. 2016-04 Is Amazon still using Perl Mason to render its content? https://qr.ae/pKFwFm ↩︎

  15. Amazon RDS for PostgreSQL customers https://aws.Amazon/rds/postgresql/customers/?nc1=h_ls ↩︎

  16. Amazon ElastiCache for Redis customers https://aws.Amazon/elasticache/redis/customers/?nc1=h_ls ↩︎

  17. 一网打尽:贝佐斯与亚马逊时代,Brad Stone,2013,豆瓣:第7章 一家技术公司,而非零售商 ↩︎ ↩︎ ↩︎

  18. 2016-07 AWS CEO Andy Jassy: How AWS came to be https://techcrunch.com/2016/07/02/andy-jassys-brief-history-of-the-genesis-of-aws/ ↩︎

  19. 2011-01 Amazon CTO Werner Vogels: How and why did Amazon get into the cloud computing business? https://qr.ae/pKscWd ↩︎ ↩︎

  20. 2016-07 前亚马逊员工在 Reddit 上对文章“How AWS came to be”的评论 https://www.reddit.com/r/programming/comments/4qxthq/comment/d4wrnk7/ ↩︎

  21. 2021-01 前亚马逊员工 Dan Rose:全球最大云厂商AWS是如何诞生的? https://mp.weixin.qq.com/s/C7Mqeh1hyT6k5BQOzpWL9w ↩︎

  22. 2013-11 Andy Jassy's Book Review of "The Everything Store" https://www.Amazon/review/R1Q4CQQV1ALSN0/ ↩︎

  23. 2011-07 2011 AWS Tour Australia, Closing Keynote: How Amazon migrated to AWS, by Jon Jenkins https://www.slideshare.net/AmazonWebServices/2011-aws-tour-australia-closing-keynote-how-amazoncom-migrated-to-aws-by-jon-jenkins ↩︎ ↩︎

  24. 2017-03 AWS: Elasticity and Management https://www.slideshare.net/AmazonWebServices/elasticity-and-management ↩︎

]]>
@@ -79,6 +79,8 @@ + + diff --git a/posts/amazon-architecture-evolution.md b/posts/amazon-architecture-evolution.md index f3e33c56..90689404 100644 --- a/posts/amazon-architecture-evolution.md +++ b/posts/amazon-architecture-evolution.md @@ -2,7 +2,7 @@ title: 亚马逊网站架构演进 date: 2023-11-04 12:45:00 categories: 架构 -tags: [架构, 可伸缩性, 可扩展性, 技术栈, 微服务, SOA] +tags: [架构, 分布式, 可伸缩性, 可扩展性, 技术栈, 微服务, SOA] --- # SOA 与微服务 diff --git a/search.xml b/search.xml index af943628..660bc939 100644 --- a/search.xml +++ b/search.xml @@ -150,6 +150,7 @@ 技术栈 微服务 SOA + 分布式 可伸缩性 diff --git a/sitemap.txt b/sitemap.txt index cd486fc7..b4120743 100644 --- a/sitemap.txt +++ b/sitemap.txt @@ -1,6 +1,6 @@ +https://nullwy.me/2023/11/amazon-architecture-evolution/ https://nullwy.me/2023/11/reliability-engineering/ https://nullwy.me/2023/12/popular-websites-tech-stack/ -https://nullwy.me/2023/11/amazon-architecture-evolution/ https://nullwy.me/2017/11/zookeeper-note/ https://nullwy.me/2018/01/stack-frame-calling-convention/ https://nullwy.me/2016/12/software-dev-books/ diff --git a/sitemap.xml b/sitemap.xml index 570167ce..5fb17a79 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,7 +2,7 @@ - https://nullwy.me/2023/11/reliability-engineering/ + https://nullwy.me/2023/11/amazon-architecture-evolution/ 2023-12-21 @@ -11,7 +11,7 @@ - https://nullwy.me/2023/12/popular-websites-tech-stack/ + https://nullwy.me/2023/11/reliability-engineering/ 2023-12-21 @@ -20,7 +20,7 @@ - https://nullwy.me/2023/11/amazon-architecture-evolution/ + https://nullwy.me/2023/12/popular-websites-tech-stack/ 2023-12-21 diff --git a/tags/index.html b/tags/index.html index 12751f78..9ae9049d 100644 --- a/tags/index.html +++ b/tags/index.html @@ -241,7 +241,7 @@

tags 目前共计 55 个标签 diff --git "a/tags/\345\210\206\345\270\203\345\274\217/index.html" "b/tags/\345\210\206\345\270\203\345\274\217/index.html" index 2c3bc920..d95c7fbe 100644 --- "a/tags/\345\210\206\345\270\203\345\274\217/index.html" +++ "b/tags/\345\210\206\345\270\203\345\274\217/index.html" @@ -246,6 +246,26 @@

分布式 + +
2017