From 2d8ebba9eab485c78bf8bda39b7bf0b6598b7d92 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 13 Nov 2021 18:48:20 +0800 Subject: [PATCH] PRF --- .../20200629 Scaling a GraphQL Website.md | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/translated/tech/20200629 Scaling a GraphQL Website.md b/translated/tech/20200629 Scaling a GraphQL Website.md index 661e72abba..6ade63eab9 100644 --- a/translated/tech/20200629 Scaling a GraphQL Website.md +++ b/translated/tech/20200629 Scaling a GraphQL Website.md @@ -1,6 +1,6 @@ [#]: collector: "lujun9972" [#]: translator: "MjSeven" -[#]: reviewer: " " +[#]: reviewer: "wxy" [#]: publisher: " " [#]: url: " " [#]: subject: "Scaling a GraphQL Website" @@ -10,21 +10,21 @@ 扩展一个 GraphQL 网站 ====== -我通常会抽象总结我为他人所做的工作(出于明显的原因),但是直到现在,我才可以谈论一个网站:[Vocal][1] 。我去年为它做了一些 SRE 工作。实际上早在 2 月份,我就在 [GraphQL Sydney 做过一次演讲][2],但这篇博客推迟了一点才发表。 +我通常会抽象地总结我为他人所做的工作(出于显而易见的原因),但是我被允许公开谈论一个网站:[Vocal][1] 。我去年为它做了一些 SRE 工作。实际上早在 2 月份,我就在 [GraphQL 悉尼会议上做过一次演讲][2],不过这篇博客推迟了一点才发表。 -Vocal 是一个基于 GraphQL 的站点,它获得了关注,然后遇到了可扩展性问题,而我是来解决这个问题的。这篇文章会讲述我的做法。显然,如果你正在扩展一个 GraphQL 站点,你会发现这篇文章很有用,但其中大部分内容都是当一个站点获得了足够的流量而出现的技术问题,这些问题必须解决。如果你对站点可扩展性有兴趣,你可能想先阅读[最近我发表的一系列关于可扩展性的文章][3]。 +Vocal 是一个基于 GraphQL 的网站,它获得了人们的关注,然后就遇到了可扩展性问题,而我是来解决这个问题的。这篇文章会讲述我的工作。显然,如果你正在扩展一个 GraphQL 站点,你会发现这篇文章很有用,但其中大部分内容讲的都是当一个站点获得了足够的流量而出现的必须解决的技术问题。如果你对站点可扩展性有兴趣,你可能想先阅读 [最近我发表的一系列关于可扩展性的文章][3]。 ### Vocal ![][4] -Vocal 是一个博客内容平台,内容包括日记、电影评论、文章评论、食谱、专业或业余摄影、美容和生活小贴士以及诗歌,当然,还有可爱的猫和狗狗照片。 +Vocal 是一个博客平台,内容包括日记、电影评论、文章评论、食谱、专业或业余摄影、美容和生活小贴士以及诗歌,当然,还有可爱的猫猫和狗狗照片。 ![][5] -Vocal 的不同之处在于,它允许人们制作观众感兴趣的作品而获得报酬。作者的页面每次被浏览都可以获得少量资金,也可以获得其他用户的捐赠。有很多专业人士在这个平台上炫耀他们的工作,但对于大多数普通用户来说,他们只是把 Vocal 当作一个有趣的爱好,碰巧还能赚些零花钱作为奖励。 +Vocal 的不同之处在于,它允许人们制作观众感兴趣的作品而获得报酬。作者的页面每次被浏览都可以获得一小笔钱,还能获得其他用户的捐赠。有很多专业人士在这个平台上展示他们的工作,但对于大多数普通用户来说,他们只是把 Vocal 当作一个兴趣爱好,碰巧还能赚些零花钱作为奖励。 -Vocal 是新泽西初创公司 [Jerrick Media][6] 的产品,更新:Jerrick Media 已经更名为 Creatd,在纳斯达克上市。2015 年,他们与 [Thinkmill][7] 合作一起开发,Thinkmill 是一家悉尼中型软件开发咨询公司,擅长 JavaScript、React 和 GraphQL。 +Vocal 是新泽西初创公司 ~~[Jerrick Media][6]~~ 的产品,更新:Jerrick Media 已经更名为 Creatd,在纳斯达克上市。2015 年,他们与 [Thinkmill][7] 合作一起开发,Thinkmill 是一家悉尼中型软件开发咨询公司,擅长 JavaScript、React 和 GraphQL 开发。 ### 剧透 @@ -32,40 +32,40 @@ Vocal 是新泽西初创公司 [Jerrick Media][6] 的产品,更新:Jerrick M ![去年 11 月到今年 2 月 Vocal 的全球排名从 9574 名增长到 5567 名][8] -曲线增长变慢是正常的,因为它需要越来越多的流量来赢得每个位置。Vocal 现在排名 4900 名左右,显然还有很长的路要走,但对于一家初创公司来说,这一点也不寒酸。大多数初创公司很乐意与 Vocal 互换排名。 +曲线增长变慢是正常的,因为它需要越来越多的流量来赢得每个位置。Vocal 现在排名 4900 名左右,显然还有很长的路要走,但对于一家初创公司来说,这一点也不寒酸。大多数初创公司都很乐意与 Vocal 互换排名。 -在网站升级后不久,Creatd 开展了一项营销活动,使流量翻了一番。在技术方面,我们要做的就是观察仪表盘上的上升的数字。自发布以来的 9 个月里,只有两个平台问题需要员工干预:[3 月份每五年一次的 AWS RDS 证书轮换][9],以及一款应用推出时遇到的 Terraform 错误。作为一名 SRE,我很高兴看到 Vocal 不需要太多的平台工作来保持运行。更新:该系统也处理了 2020 年的美国大选,没有任何意外。 +在网站升级后不久,Creatd 开展了一项营销活动,使流量翻了一番。在技术方面,我们要做的就是观察仪表盘上的上升的数字。自发布以来的 9 个月里,只有两个平台问题需要员工干预:[3 月份每五年一次的 AWS RDS 证书轮换][9],以及一款应用推出时遇到的 Terraform 错误。作为一名 SRE,我很高兴看到 Vocal 不需要太多的平台工作来保持运行。更新:该系统也抗过了 2020 年的美国大选,没有任何意外。 以下是本文技术内容的概述: * 技术和历史背景 * 从 MongoDB 迁移到 Postgres - * 部署基础设置改造 - * 应用程序兼容扩展措施 - * HTTP 缓存 + * 部署基础设施的改造 + * 使应用程序兼容扩展措施 + * 让 HTTP 缓存发挥作用 * 其他一些性能调整 -### 背景 +### 一些背景信息 -Thinkmill 使用 [Next.js][10](一个基于 React 的 Web 框架)构建了一个网站,和 [Keystone][11] 提供的 GraphQL API 进行交互。Keystone 是一个基于 GraphQL 的无头 CMS 库:在 JavaScripy 中定义一个模式,将它与一些数据存储挂钩,并获得一个自动生成的 GraphQL API 用于数据访问。这是一个免费的开源软件项目,由 Thinkmill 提供商业支持。 +Thinkmill 使用 [Next.js][10](一个基于 React 的 Web 框架)构建了一个网站,和 [Keystone][11] 在 MongoDB 前面提供的 GraphQL API 进行交互。Keystone 是一个基于 GraphQL 的无头 CMS 库:在 JavaScripy 中定义一个模式,将它与一些数据存储挂钩,并获得一个自动生成的 GraphQL API 用于数据访问。这是一个自由开源软件项目,由 Thinkmill 提供商业支持。 #### Vocal V2 -Vocal 的第一版就受到了关注,它找到了一个喜欢它的用户群,并不断壮大,最终 Creatd 请求 Thinkmill 帮助开发 V2,并于去年 9 月成功推出。Creatd 员工通常基于用户反馈来避免[第二个系统效应][12],他们[主要是 UI 和功能更改,我就不赘述了][13]。相反,我将讨论下我的工作内容:使新站点更加健壮和可扩展。 +Vocal 的第一版就受到了关注,它找到了一个喜欢它的用户群,并不断壮大,最终 Creatd 请求 Thinkmill 帮助开发 V2,并于去年 9 月成功推出。Creatd 员工避免了 [第二个系统效应][12],他们一般都是根据用户的反馈进行改变,所以他们 [主要是 UI 和功能更改,我就不赘述了][13]。相反,我将讨论下我的工作内容:使新站点更加健壮和可扩展。 -声明:我很感谢能与 Creatd 以及 Thinkmill 在 Vocal 中的合作,并且他们允许我发表这个故事,但[我仍然是一名独立顾问][14],我没有报酬,甚至没有被要求写这篇文章,这仍然是我自己的个人博客。 +声明:我很感谢能与 Creatd 以及 Thinkmill 在 Vocal 上的合作,并且他们允许我发表这个故事,但 [我仍然是一名独立顾问][14],我写这篇文章没有报酬,甚至没有被要求写它,这仍然是我自己的个人博客。 ### 迁移数据库 -Thinkmill 在使用 MongoDB 时遇到了几个可扩展性问题,因此决定升级到 Keystone5 以利用其新的 Postgres 支持。 +Thinkmill 在使用 MongoDB 时遇到了几个可扩展性问题,因此决定升级到 Keystone 5 以利用其新的 Postgres 支持。 -如果你从事技术工作的时间足够长,那你可能还记得 00 年代末的 “NOSQL” 营销,这可能听起来很有趣。NoSQL 的一个重要特点是,像 Postgres 这样的关系数据库(SQL)不像 MongoDB 这样网络规模的 NoSQL 数据库那样具有可扩展性。从技术上将,这种说法是正确的,但 NoSQL 数据库的可扩展性来自它可以有效处理各种查询的折衷。简单的非关系数据库(如文档和键值数据库)有其一席之地,但当它们用作应用的通用后端时,应用程序通常会在超出理论扩展限制之前超出数据库的查询限制。Vocal 的大多数数据库查询在 MongoDB 上运行良好,但随着时间推移,越来越多的查询需要特殊技巧才能工作。 +如果你从事技术工作的时间足够长,那你可能还记得 00 年代末的 “NOSQL” 营销,这可能听起来很有趣。NoSQL 的一个重要特点是,像 Postgres 这样的关系数据库(SQL)不像 MongoDB 这样“网站级规模”的 NoSQL 数据库那样具有可扩展性。从技术上将,这种说法是正确的,但 NoSQL 数据库的可扩展性来自它可以有效处理各种查询的折衷。简单的非关系数据库(如文档数据库和键值数据库)有其一席之地,但当它们用作应用的通用后端时,应用程序通常会在超出关系数据库的理论扩展限制之前,就超出了数据库的查询限制。Vocal 的原本的大多数数据库查询在 MongoDB 上运行良好,但随着时间推移,越来越多的查询需要特殊技巧才能工作。 -在技术要求方面,Vocal 与维基百科非常相似。维基百科是世界上最大的网站之一,它在 MySQL(或者说它的分支 MariaDB)上运行。当然,这需要一些重要的工程来完成这项工作,但在可预见的未来,我认为关系数据库不会对 Vocal 的扩展构成严重威胁。 +在技术要求方面,Vocal 与维基百科非常相似。维基百科是世界上最大的网站之一,它运行在 MySQL(或者说它的分支 MariaDB)上。当然,这需要一些重要的工程来实现,但在可预见的未来,我认为关系数据库不会对 Vocal 的扩展构成严重威胁。 -我做过一个比较,托管 AWS RDS Postgres 实例的成本不到旧 MongoDB 实例的五分之一,但 Postgres 实例的 CPU 使用率仍然低于 10%,尽管它提供的流量比旧站点多。这主要是因为一些重要的查询在文档数据库架构下一直效率很低。 +我做过一个比较,托管的 AWS RDS Postgres 实例的成本不到旧 MongoDB 实例的五分之一,但 Postgres 实例的 CPU 使用率仍然低于 10%,尽管它提供的流量比旧站点多。这主要是因为一些重要的查询在文档数据库架构下一直效率很低。 -迁移可以新写一篇博客文章来讲述,但基本上是 Thinkmill 开发人员使用 [MoSQL][16] 构建了一个 [ETL 管道][15] 来完成这项繁重的工作。由于 Keystone 对于 Postgres 支持仍然比较基础,但它是一个 FOSS 项目,所以我能够解决在 SQL 生成性能方面遇到的问题。对于这类事情,我总是推荐 Markys Winand 的 SQL 博客:[使用 Luke 索引][17] 和 [现代 SQL][18]。他的文章很友好,甚至对那些暂时不太关注 SQL 人来说也是容易理解的,但他拥有你大多数需要的理论知识。如果你仍然有问题,一本好的、专注于 DB 性能的书可以帮助你。 +迁移的过程可以新写一篇博客文章来讲述,但基本上是 Thinkmill 开发人员构建了一个 [ETL 管道][15],使用 [MoSQL][16] 来完成这项繁重的工作。由于 Keystone 对于 Postgres 支持仍然比较基础,但它是一个 FOSS 项目,所以我能够解决在 SQL 生成性能方面遇到的问题。对于这类事情,我总是推荐 Markys Winand 的 SQL 博文:[使用 Luke 索引][17] 和 [现代 SQL][18]。他的文章很友好,甚至对那些暂时不太关注 SQL 人来说也是容易理解的,但他拥有你大多数需要的理论知识。如果你仍然有问题,一本好的、专注于即可性能的书可以帮助你。 ### 平台