连接池对于确保您的数据驱动应用能够承受巨大负载而不崩溃至关重要。在这篇博客中,我们将探讨如何在黑色星期五流量高峰期,利用 Accelerate 的连接池功能挽救部署在无服务器环境中的在线电子商务平台。
想象一下,您的公司 Mega Electronics 有一个使用 Next.js 和 Prisma ORM 构建的电子商务应用,数据库使用 PostgreSQL,主要销售电子设备。Mega Electronics 部署在传统服务器上,并经历了来自全球各地的持续流量。
随着销售旺季临近,您的团队预计由于产品需求增加会导致流量激增。为了做好准备,您的团队通过增加100GB存储空间和4GB内存来升级后端服务器。然而,这种手动增加服务器资源的过程耗时且繁琐。为了简化操作,您的团队决定如果基础设施能够根据需求自动扩展将会更高效。
迁移到无服务器和边缘环境
无服务器环境为根据实时需求扩展服务器提供了完美的解决方案。它们通过在低流量期间动态缩减并在高峰期扩展来优化成本。然而,每个无服务器函数都会为 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 新闻简报