2024年5月30日

通过连接池拯救黑色星期五

连接池对于确保您的数据驱动应用程序在高负载下能够无故障运行至关重要。在这篇博客中,我们将探讨 Accelerate 的连接池如何在黑色星期五流量高峰期间,拯救部署在无服务器环境中的在线电商平台。

Chart displaying peak load on servers during Black Friday

想象一下,您的公司 Mega Electronics 拥有一款使用 Next.js 和 Prisma ORM 构建的基于 PostgreSQL 的电商应用程序,用于销售电子设备。Mega Electronics 部署在传统服务器上,并持续接收来自全球各地的流量。

随着销售旺季的临近,您的团队预计产品需求增加将导致流量激增。为应对此情况,您的团队通过增加 100GB 存储和 4GB 内存来升级后端服务器。然而,这种手动增加服务器资源的过程被证明耗时且繁琐。为了简化操作,您的团队认为,如果基础设施能够根据需求自动扩展,效率会更高。

Mega Electronics's tech stack and technical upgradation plan

转向无服务器和边缘计算

无服务器环境为根据实时需求扩展服务器提供了完美的解决方案。它们通过在流量低谷时动态缩减,在高峰时动态扩展来优化成本。然而,每个无服务器函数都会为 API 请求发起一个独立的数据库连接,这可能导致我们将在本博客中讨论的问题。

为确保您的应用程序自动满足扩展需求,您的团队决定将应用程序迁移到无服务器环境。为进一步缩短全球用户的页面加载时间,您的团队决定对某些 API 使用边缘运行时,以便数据从离用户最近的服务器提供给他们。由于 Prisma ORM 和 Next.js 支持边缘运行时,因此迁移部分 API 非常简单。

然而,在周末或小型促销季期间,当流量增加时,您的团队开始从数据库中看到错误消息,显示“抱歉!客户端已过多。

Database connection limit getting maxed out

此错误是由于数据库过载引起的,因为每个无服务器函数都会与数据库建立新的连接,从而超出了其连接限制。为了解决这个问题,您的团队升级了数据库以处理更多连接,期望在更高负载下提高性能。您的团队意识到频繁的升级会花费更多的资金和资源。幸运的是,此次升级证明是有效的,因为具有更多连接能力的大型实例现在可以管理增加的连接流量。

黑色星期五的空前流量

又到黑色星期五了,Mega Electronics 迎来了巨大的购物潮。就在假期开始之际,灾难降临了:Mega Electronics 宕机了。

罪魁祸首是什么?数据库连接池再次不堪重负,尽管数据库已升级,错误消息“抱歉!客户端已过多”再次出现,尤其是在使用边缘运行时的 API 端点。数据库连接池在这些路由中再次过载,因为数据库连接根本没有被重用,而且流量远高于预期。您的团队认为再次升级数据库以处理更多连接将变得非常昂贵,并且不是一个实用的解决方案。事件的后果导致了不满意的客户和潜在销售额的损失。

想象一下,在停机期间有 10,000 个请求失败。如果我们假设每个请求代表一个潜在客户,平均会花费 2 美元,那么总销售损失将是 10,000 个请求 x 每个 2 美元,总计 20,000 美元。

为什么数据库会成为无服务器或边缘计算中的瓶颈

无服务器和边缘应用程序通常不包含状态,并且可以大规模扩展。另一方面,数据库连接是有状态的,需要重用,并且通常可扩展性有限。

Serverless/Edge functions can scale massively but database connections can't scale massively

当调用新函数时,会创建一个到数据库的连接。数据库只能拥有有限数量的连接,并且建立或关闭连接通常在时间上成本很高。因此,即使您的团队升级了数据库实例以接受更多连接,性能也不会显著提高。您的团队最终决定从根本上解决问题,并决定引入一个外部连接池。

连接池的强大功能

连接池对于在无服务器和边缘应用程序中有效重用和管理数据库连接至关重要。它可以防止您的数据库连接轻易耗尽,从而节省频繁数据库升级的成本。

More connections to the database can be made thanks to connection pooling

您的团队考虑了三种将外部连接池引入技术栈的方案

  • 实现一个独立服务器来管理连接: 这种方法会给您的团队带来更多挑战。管理自己的连接池基础设施将导致高昂的维护和开发运营开销。
  • 使用流行的可靠开源方案,例如 PgBouncer: 尽管功能强大,但此解决方案需要您的团队进行部署和维护,从而导致高昂的运营和管理开销。
  • 使用 Prisma Accelerate,一种托管连接池解决方案: 鉴于您的团队已在使用 Prisma ORM,此选项与您的设置无缝集成。它通过消除额外培训并减少维护和运营开销来简化流程。

Comparison between external connection pooling options

您的团队认为 Prisma Accelerate 是以最少维护解决连接池问题的最佳方案。它能在流量高峰期稳健地扩展数据库连接,确保平稳运行。

Accelerate — 即插即用的连接池

Prisma Accelerate 提供跨 16 个区域的连接池和可选的全局缓存。它有助于确保您的数据库连接不易耗尽,并使您的应用程序在高负载期间平稳运行。要将 Prisma Accelerate 添加到项目中,请遵循入门指南并安装所有必需的依赖项。然后,在您的 Prisma ORM 项目中添加 Prisma Accelerate 连接池将如下所示:

您还可以通过观看以下视频,了解 Prisma Accelerate 如何在高负载下提升无服务器函数的性能

额外福利:使用 Accelerate 缓存您的查询

除了连接池,Prisma Accelerate 的全局缓存还大大提升了您的无服务器和边缘应用程序的性能。每当您使用 Prisma Accelerate 缓存查询结果时,它会将结果存储在边缘,即靠近用户的数据中心。这使得数据可以在约 5 到 10 毫秒内传达给用户,从而使应用程序响应更快。要了解有关缓存益处的更多信息,请阅读我们关于缓存的博客

Prisma Accelerate has global cache nodes

主要收获

在 Mega Electronics 的案例中,教训很明确:连接池对于处理流量高峰和扩展您的无服务器及边缘应用程序至关重要。Prisma Accelerate 使这一过程变得更容易,确保您的应用程序即使面对巨大的流量也能保持快速和可靠。

Prisma Accelerate 减少了持续手动干预的需求,为您的团队节省了宝贵时间,使其能够专注于创新和业务增长。凭借更高的可靠性和出色的开发者体验(DX),采用 Prisma Accelerate 不仅仅是一次技术升级,更是对您在线业务成功的一项战略投资。这意味着您的业务停机时间更少,客户满意度更高,潜在销售额得以保持。


立即开始使用 Prisma Accelerate

不要错过下一篇文章!

订阅 Prisma 邮件通讯

© . All rights reserved.