2024年5月30日

コネクションプーリングでブラックフライデーを乗り切る

コネクションプーリングは、データ駆動型アプリが障害なく大規模な負荷を処理するために不可欠です。本ブログでは、Accelerateのコネクションプーリングが、ブラックフライデーのピークトラフィック時にサーバーレス環境にデプロイされたオンラインEコマースプラットフォームをどのように救うかを探ります。

Chart displaying peak load on servers during Black Friday

あなたの会社「メガエレクトロニクス」が、Next.jsとPrisma ORM、PostgreSQLを使用して電子機器を販売するEコマースアプリを構築していると想像してください。メガエレクトロニクスは従来のサーバーにデプロイされており、世界中から安定したトラフィックがあります。

高い販売シーズンが近づくにつれて、製品の需要増加によりトラフィックの急増が予想されます。準備として、チームはバックエンドサーバーに100GBのストレージと4GBのRAMを追加してアップグレードします。しかし、サーバーリソースを手動で増やすこのプロセスは、時間がかかり面倒であることが判明しました。運用を効率化するため、チームはインフラストラクチャが需要に応じて自動的にスケールできれば、より効率的であると判断しました。

Mega Electronics's tech stack and technical upgradation plan

サーバーレスとエッジへの移行

サーバーレス環境は、リアルタイムの需要に基づいてサーバーをスケーリングするための完璧なソリューションを提供します。トラフィックが少ない期間には動的にスケールダウンし、ピーク時にはスケールアップすることでコストを最適化します。しかし、各サーバーレス関数はAPIリクエストごとに個別のデータベース接続を開始するため、本ブログで議論する問題を引き起こす可能性があります。

アプリがスケーリングのニーズを自動的に満たすようにするため、チームはアプリをサーバーレス環境に移行することを決定しました。世界中のユーザーのページ読み込み時間をさらに短縮するため、チームは一部のAPIにエッジランタイムを使用し、ユーザーの場所に最も近いサーバーからデータが提供されるようにすることを決定しました。Prisma ORMとNext.jsがエッジランタイムをサポートしているため、一部のAPIの移行は簡単です。

しかし、週末や小規模なセールシーズン中にトラフィックが増加すると、チームはデータベースから「申し訳ありません!クライアントが多すぎます。」というエラーメッセージを目にするようになりました。

Database connection limit getting maxed out

このエラーは、各サーバーレス関数がデータベースへの新しい接続を生成し、その接続制限を超過させることで、データベースが過負荷になるために発生します。この問題に対処するため、チームはデータベースをアップグレードしてより多くの接続を処理できるようにし、高負荷下でのパフォーマンス向上を期待しました。チームは、頻繁な更新がより多くの費用とリソースを費やしていることに気づきました。幸いなことに、より多くの接続を受け入れる能力を持つ大規模なインスタンスが接続の増加に対応できるようになったため、アップグレードは効果的であることが証明されました。

ブラックフライデーの未曾有のトラフィック

ブラックフライデーを迎え、メガエレクトロニクスには膨大な数の買い物客が押し寄せました。ホリデーシーズンが始まるやいなや、災害が発生しました。メガエレクトロニクスがダウンしたのです。

原因は?データベースのコネクションプールが再び過負荷になり、データベースのアップグレードにもかかわらず、「申し訳ありません!クライアントが多すぎます」というエラーメッセージが、特にエッジランタイムを使用する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

チームは、スタックに外部コネクションプーラーを導入するための3つの選択肢を検討しました

  • 接続を管理するためのスタンドアロンサーバーの実装: このアプローチは、チームにとってより多くの課題をもたらします。独自のコネクションプーリングインフラストラクチャを管理することは、メンテナンスと開発者の運用に高いオーバーヘッドをもたらします。
  • 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

主要なポイント

メガエレクトロニクスの話から、教訓は明らかです。コネクションプーリングは、ピークトラフィックの急増を処理し、サーバーレスおよびエッジアプリをスケールするために不可欠です。Prisma Accelerateはこれを容易にし、異常なトラフィックに直面しても、アプリが高速で信頼性の高い状態を維持することを保証します。

Prisma Accelerateは継続的な手動介入の必要性を減らし、チームがイノベーションとビジネスの成長に集中するための貴重な時間を確保します。信頼性の向上と優れたDXにより、Prisma Accelerateの採用は単なる技術的なアップグレードではなく、オンラインビジネスの成功への戦略的な投資です。これにより、ビジネスのダウンタイムが減り、顧客満足度を維持し、潜在的な売上を確保できます。


今すぐPrisma Accelerateを始める

次の投稿をお見逃しなく!

Prismaニュースレターに登録する

© . All rights reserved.