连接池对于确保您的数据驱动应用程序能够处理大量负载而不会失败至关重要。在这篇博客中,我们将探讨使用 Accelerate 的连接池如何在黑色星期五高峰流量期间拯救部署在无服务器环境中的在线电子商务平台。
假设您的公司 Mega Electronics 拥有一个使用 Next.js 和 Prisma ORM 与 PostgreSQL 构建的电子商务应用程序,销售电子设备。Mega Electronics 部署在传统服务器上,并体验来自全球各地的一致流量。
随着销售旺季临近,您的团队预计流量将因对您产品的需求增加而激增。为了做好准备,您的团队通过增加 100GB 存储空间和 4GB RAM 来升级后端服务器。然而,这种手动增加服务器资源的过程被证明是耗时且乏味的。为了简化操作,您的团队认为如果基础设施能够根据需求自动扩展,效率会更高。
迁移到无服务器和边缘
无服务器环境为根据实时需求扩展服务器提供了完美的解决方案。它们通过在低流量期间动态缩减以及在高峰期扩展来优化成本。然而,每个无服务器函数都会为 API 请求启动单独的数据库连接,这可能会导致我们将在本博客中讨论的问题。
为了确保您的应用程序自动满足扩展需求,您的团队决定将您的应用程序迁移到无服务器环境。为了进一步减少全球用户的页面加载时间,您的团队决定对某些 API 使用边缘运行时,以便从离用户位置最近的服务器向用户提供数据。由于 Prisma ORM 和 Next.js 支持边缘运行时,因此迁移某些 API 非常简单。
然而,在周末或小型销售季,当流量增加时,您的团队开始看到来自数据库的错误消息,内容为“抱歉!客户端过多。”
此错误是由于数据库过载而发生的,因为每个无服务器函数都会生成与数据库的新连接,从而超出其连接限制。为了解决此问题,您的团队升级了数据库以处理更多连接,预计在高负载下性能会得到提高。您的团队意识到频繁更新会花费更多的金钱和资源。值得庆幸的是,升级证明是有效的,因为具有接受更多连接能力的更大实例现在可以管理增加的连接涌入。
黑色星期五前所未有的流量
今天是黑色星期五,为 Mega Electronics 带来了巨大的购物者浪潮。就在假期开始时,灾难降临:Mega Electronics 宕机了。
罪魁祸首?数据库连接池再次不堪重负,尽管数据库已升级,但错误消息“抱歉!客户端过多”再次出现,尤其是来自使用边缘运行时的 API 端点。来自这些路由的数据库连接池再次不堪重负,因为数据库连接根本没有被重用,并且流量远高于预期。您的团队认为,再次升级数据库以处理更多连接将变得非常昂贵,而且不是一个实际的解决方案。该事件的后果导致客户不满意和潜在销售额的损失。
假设停机期间有 10,000 个请求失败。如果我们假设每个请求代表一个潜在客户,他们平均会花费 2 美元,那么总销售额损失将为 10,000 个请求 x 每个请求 2 美元,等于 20,000 美元。
为什么数据库会成为无服务器或边缘环境中的瓶颈
无服务器和边缘应用程序通常没有状态并且可以大规模扩展。另一方面,数据库连接是有状态的,需要重用,并且通常具有有限的可扩展性。
当调用新函数时,会创建与数据库的连接。数据库只能有有限数量的连接,并且建立或关闭连接通常在时间方面非常昂贵。因此,即使您的团队升级了数据库实例以接受更多连接,性能也不会显着提高。您的团队最终决定从根本上解决问题,并决定引入外部连接池。
连接池的力量
连接池对于在无服务器和边缘应用程序中高效重用和管理数据库连接至关重要。它可以防止您的数据库连接轻易耗尽,从而为您节省频繁数据库升级的成本。
您的团队考虑了将外部连接池引入堆栈的三个选项
- 实施独立的服务器来管理连接:这种方法为您的团队带来了更多挑战。管理您自己的连接池基础设施将导致维护和开发运营方面的高开销。
- 使用流行的可靠开源选项,如 PgBouncer:虽然功能强大,但此解决方案需要您的团队部署和维护它,从而导致高运营和管理开销。
- 使用 Prisma Accelerate,一种托管连接池解决方案:鉴于您的团队已经使用 Prisma ORM,此选项与您的设置无缝集成。它通过消除额外的培训并减少维护和运营开销来简化流程。
您的团队认为 Prisma Accelerate 是解决连接池问题的最佳解决方案,并且维护成本最低。它可以在高峰流量期间可靠地扩展数据库连接,确保平稳运行。
Accelerate — 即开即用的连接池
Prisma Accelerate 在 16 个区域提供连接池,并提供可选的全局缓存。它可以帮助您确保数据库连接不易耗尽,并使您的应用程序在高负载期间平稳运行。要将 Prisma Accelerate 添加到项目中,请按照入门指南并安装所有必需的依赖项。然后,将使用 Prisma Accelerate 的连接池添加到您的 Prisma ORM 项目将如下所示
您还可以通过观看下面的视频,了解 Prisma Accelerate 如何在高负载下提高无服务器函数的性能
奖励:使用 Accelerate 缓存您的查询
除了连接池之外,Prisma Accelerate 的全局缓存还大大提高了您的无服务器和边缘应用程序的性能。每当您使用 Prisma Accelerate 缓存查询结果时,它都会将结果存储在边缘,即靠近用户的数据中心。这允许在不到 ~5 到 10 毫秒的时间内将数据交付给您的用户,从而使应用程序响应更快。要了解有关缓存如何有益的更多信息,请阅读我们关于缓存的博客。
主要收获
在 Mega Electronics 的故事中,教训很明确:连接池对于处理峰值流量和扩展您的无服务器和边缘应用程序至关重要。Prisma Accelerate 使此过程变得更加容易,即使在面对疯狂的流量时也能确保您的应用程序保持快速和可靠。
Prisma Accelerate 减少了对持续手动干预的需求,从而为您的团队腾出宝贵时间,专注于创新和业务增长。凭借改进的可靠性和出色的 DX,采用 Prisma Accelerate 不仅仅是一项技术升级,它还是对您的在线业务成功的战略投资。这意味着您的业务停机时间更少,从而保持客户满意度和潜在销售额的完整性。
立即开始使用 Prisma Accelerate
不要错过下一篇文章!
注册 Prisma 新闻通讯