作者 | Farhan Thawar,Shopify 副总裁,工程部门负责人
译者 | 赵晓磊
策划 | Tina
本文是 Shopify 副总裁及工程部门负责人 Farhan Thawar 对 2023 年 Shopify 在优化基础设施方面所做工作的总结。包括但不限于将研发效率提升了 20 倍,为简化系统复杂度删除了超过 300 万行僵尸代码,对系统性能进行的优化以提高系统响应速度及处理效率,以及在黑色星期五期间系统出色的性能表现等。而这所有成就,都与公司文化息息相关。
在 Shopify,我们始终坚持追求卓越的技术。即使效果并非立竿见影,我们仍然在基础设施上投入了大量的时间。
这项基础任务经常会涉及简化我们的系统这项工作。持续进行这项工作是创新的必要条件。为什么呢?并非所有高效的软件都是优秀的,但所有优秀的软件都是高效的。对于我们的商家来说,每一毫秒都至关重要。这意味着我们的软件需要在保证易扩展的同时,不应当被复杂的架构拖慢运行速度。
正如我们的 CEO 兼创始人 Tobi Lütke 所说,软件中一些最棒的长期回报就是来自于这些简化工作的。以下是我们在 2023 年发布的一些重要更新,它们致力于消除复杂性并提升性能。
效率为王
商业领域,效率为王。高效可以带来愉悦、无缝的用户体验。系统的效率将会影响转化率,进而直接为我们的商家带来利润的增长。因此,在 2023 年(以及每一年),效率提升都是我们关注的重点。我们:
- 针对特定商家,优化了 Shopify 客户管理和订单页面的长尾部分的加载时间——其中一个包含 8 万个列表的页面,加载时间从 20 秒左右缩短到 400 毫秒左右。
- 显著提升了跨境订单关税的计算速度。我们的 p99 从 500ms 左右下降到了 80ms 左右。(这表示 99% 的请求能够达到这样的完成速度。)简而言之:支付很关键,商业是全球化的,而我们注重细节。
- Shopify 管理后台搜索结果的响应速度提高了 7 倍以上。这只是我们为商家提高效率,节省时间的众多方法之一。
- 对于具有多个变种的产品(不同的版本、型号、尺寸、颜色、配置等),现在对它们进行序列化(即为每个变种分配一个唯一 ID)的速度提高了 200 倍。一个包含 2000 个变种的产品现在只需要一秒钟就能完成序列化。这一提升是因为我们发现了一个导致速度变慢的缓存问题。
- GraphQL Storefront API 查询的响应速度提高了 3 倍。我们将这些查询从 Shopify 核心代码逻辑中提取到了 Storefront Renderer。这是一件好事,因为过去一年里,Storefront API 的流量显著增加。这是我们在 2023 年进行的许多针对 GraphQL 的改进之一。
- 我们将用于跟踪 Shopify 性能的仪表板的核心组件 Observe 的查询性能提升了 5 倍。我们通过创建一个新的分布式查询引擎,使得查询性能提高了 80%。现在仪表盘的加载变得更加流畅和迅速。
(图:使用 GitHub Copilot,每个工作日接收 23000 行代码;Shopify 管理后台搜索结果快了 7 倍;在 2023 年大约 300 万行代码被删除)
清理与减法
我们喜欢通过减法来做加法。
杂乱会拖慢事情的进展,给我们的商家增加不必要的复杂性。因此,我们对我们的系统进行了精简。
以下是 2023 年的一些简化复杂性的亮点:
- 删除了近 300 万行代码。真实的数字可能会比这个更多;这是我们内部讨论分享我们的“清理为王”时的粗略统计。我敢打赌真实的数字要远远超过这个。
- 将 Shopify 后台开发人员的反馈机制提速了 20 倍,包括在计算机资源减少了 35% 的情况下,将持续集成的速度提高了 50%。
- 归档了大约 6800 个未使用或者不必要的 GitHub 仓库,远远超过之前的年份。
- 合并了 702 条由机器生成,用于清理僵尸代码的 PR。
- 将一个用于在线购物网站的后台进程的内存使用量从 3GB 左右减少到了 400MB 左右。这是一个针对开发者体验的重大优化,这对我们来说很重要,因为我们致力于使 Shopify 成为最佳的构建平台。
- 大幅改进了 Storefront Renderer 对 Ruby 垃圾回收机制的使用效率,这是一种内存管理系统。我们的优化使得平均 GC 时间减少了 56%,GC 的 P99 时间减少了 80%。这是一个极佳的例子,表明我们是如何专注在那些让整个技术栈表现更好的服务业务上。 工程中的 AI
借助 AI,使我们能够更迅速地给我们的商家交付更多的能力,因此我们不断寻找在我们的工作流程中利用 AI 的方法。我们的工程团队与 AI 紧密合作来提升我们的工作效率。
GitHub Copilot 是我们实现这一目标的工具之一——我们是他们在 2022 年 1 月的首个客户。以下是 Copilot 改变我们工作的一些方式:
- Shopify 工程团队中约 70% 的成员日常使用 Copilot
- 根据编程语言的不同,建议的平均接受率在 21%-34% 之间。
- 我们预估每个工作日接受超过 20000 行代码
- 总共接受了 67 万 5 千次建议
- 总共接受了 97 万 5 千行代码
这些效率提升帮助 Shopify 完成了每周超过 2 万 5 千次提交,以及每天 1300-1400 次的 PR。我们还创建了一个内部工具,叫做 VaultBot,它是一个基于人工智能的聊天机器人,Shopify 团队成员可以向它提出与 Shopify 相关的问题。目前,VaultBot 解决了所有工程问题中的 32% 左右。
BFCM 期间的表现
黑色星期五和网络星期一(BFCM)购物周末是我们许多商家一年中最重要的事件。由此产生的所有流量,对我们平台来说是终极的压力测试。我们全年都在努力构建可以扛住 BFCM 的峰值流量的平台——之后,这个流量水平将会变成我们来年的常态。
我们为今年 BFCM 的表现感到自豪,因为它使我们数以百万计的商家能够向他们的客户提供快速流畅的购物体验,帮助他们在他们的 Shopoify 应用中促成了许多交易。下面是一些惊人的数字,反映了 Shopify 在 2023 年 BFCM 期间的表现,首先是我们的 CEO Tobi Lütke’s 最喜欢的统计数据:
- 我们达到了 99.999 % 的可用率,我们的基础设施总共处理了 29.7PB 的数据——也就是说每分钟处理超过 5TB 的数据。
- 在波峰时,我们的核心应用每秒钟处理 96.7 万次请求,相当于 5800 万次请求 / 分钟。
- 在 BFCM 高峰期,我们的 MySQL 集群(包括 MySQL5.7 和 MySQL8)每秒处理了超过 1900 万的查询请求(QPS)。
- 在高峰时期,我们每秒索引 22GB 的日志以及 51.4GB 的监控指标数据!除此之外,我们每秒导入了超过 900 万个 span 的追踪数据。我们实现了对生产系统性能的秒级监控。
- 我们的 Apache Kafka 流处理平台在高峰时期每秒处理 2900 万条消息。这相比 2022 年增长了 45%——而且我们今年更加高效,使用的 brokers 数量减少了 14%。
所有这些表现,使我们的商家在整个 BFCM 期间实现了 93 亿美元的全球销售额,其中在黑色星期五达到每分钟 420 美元的峰值。
“快速的软件是一种文化现象,由好奇心驱动,而非自我。” — Ian Ker-Seymer(一位 Shopify 产品工程师)
为了持续培养这种文化,我们将会继续庆祝并分享这些成就。基础决定上层建筑,我们的文化有助于让这一基础一直做到坚实、敏捷和令人愉悦。
为什么这些事情如此重要?因为这使我们能够以最好的方式服务我们的商家,满足他们的需求,让他们可以持续发展他们的业务,并向世界展示一个依托高性能商业平台的创业精神的真正力量。
原文链接:
Performance