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 Accelerate 与连接池添加到您的 Prisma ORM 项目中将如下所示

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

奖励:使用 Accelerate 缓存您的查询

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

Prisma Accelerate has global cache nodes

主要收获

在 Mega Electronics 的故事中,教训很清楚:连接池对于处理峰值流量和扩展您的无服务器和边缘应用程序至关重要。Prisma Accelerate 使这变得更容易,确保您的应用程序即使面对疯狂的流量也能保持快速和可靠。

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


立即开始使用 Prisma Accelerate

不要错过下一篇文章!

订阅 Prisma 新闻通讯

© . This site is unofficial and not affiliated with Prisma Data, Inc.