Amazon Web Services ブログ

Woot がお買い得品を拡大するために Amazon DocumentDB (MongoDB 互換) を使用する方法



Woot! は 2004 年に設立され、2010 年にアマゾンが買収した元祖デイリーディールサイトです。Woot は当初、毎日 1 つの製品を売り切れるまで販売していましたが、現在は 7 つのカテゴリーでその日のお買い得品とその他期間限定オファーを提供しています。私のチームは Woot でリテールカタログサービスを担当しており、これは Woot のさまざまなフロントエンドサービスとユーザーインターフェイスにお買い得品を提供します。Woot が年々成長する中で私たちが直面した問題の多くは、スケーリング限界に達した古いレガシーシステムに起因するものでした。

この記事では、Woot でご覧いただける製品カタログとお買い得品の原動力となるセルフホスト型の MongoDB データベースを Amazon DocumentDB (MongoDB 互換) にどのように移行したかについて説明していきます。また、コストを削減しながらパフォーマンス、スケーリング、および俊敏性を向上させる上で Amazon DocumentDB がどのように役立ったかについても説明します。

アプリケーションアーキテクチャ

Woot のリテールカタログサービスは Amazon DocumentDB をそのプライマリデータベースとして使用しています。Amazon DocumentDB 内では、データがアイテム (Woot が販売する製品)、オファー (時間と数量によって制限される販売対象アイテム)、およびイベント (お客様に売り出されるオファーのグループ) のコレクションに分類されます。私たちのバックエンドシステムは、主に C#/.Net (レガシー .Net Framework Windows サービスとサーバーレス .Net Core マイクロサービススタックの組み合わせ) を使用します。現在、Windows IIS API が Amazon DocumentDB クラスターで CRUD オペレーションを提供していますが、以下の図にあるように、私たちはこのサービスを AWS AppSync GraphQL インスタンスに移行している最中です。

Amazon DocumentDB を使用する理由

2019 年の春まで、Woot は Amazon Elastic Compute Cloud (Amazon EC2) で MongoDB クラスターを独自にホストしていました。私たちの移行目標は、完全マネージド型のデータベースソリューションへの移行とコストの削減でした。Amazon DocumentDB は、Woot のデータがドキュメントモデルに自然にマップされること、すでに MongoDB API に投資していたこと、およびアプリケーションを書き換えたくなかったことを理由に選択しました。

移行の主な動機のひとつはコストの削減で、翌年のライセンス料金の請求までに移行するという厳しい時間制限がありました。Amazon DocumentDB は MongoDB API 対応であるため、私たちはアプリケーションをほとんど変更することなく、余裕を持って期限内に移行を完了できました。ダウンタイムなしで移行することができたため、Amazon DocumentDB への移行は安価かつ簡単なソリューションでした。

メリット

インフラストラクチャおよび運用コストでの大幅な節約を実現できたため、Amazon DocumentDB への移行による節約額はかなりのものでした。Amazon DocumentDB を使用することにより、私たちはライセンスコストを含めたデータベースのインフラストラクチャコストを 82% 削減しました。また、毎年ライセンス料金を交渉して再検討する必要がなくなったため、煩わしい手続きや承認も大幅に削減されました。

MongoDB クラスターを独自に管理していた頃は、スケールする必要がある場合に問題が発生し、サービスが中断されることもありました。Amazon DocumentDB では、読み込みスループットのスケーリングが格段に簡単で、信頼性が高いことに気付きました。これまで完了に数日間かかっていたクラスターのスケールアップを 10 分未満で実行することができます。リソースが必要なくなった場合には簡単にスケールダウンする柔軟性もあり、これもコストのためのさらなる最適化に役立ちました。

これに加えて、私たちのセルフホスト型 MongoDB クラスターは十分にバックアップされておらず、ロールバックできる直近のバックアップがないまま重要なコレクションが誤ってドロップされた時に、長期的な障害が発生したことがありました。Amazon DocumentDB にはデフォルトで有効化されたポイントインタイムリカバリ (PITR) があり、Woot では PITR を 35 日に延長していることから、このような状況が再発生しても素早くロールバックできるという安心感があります。

パフォーマンスも優れており、レイテンシーとスケーラビリティの向上が見られました。レガシー MongoDB クラスターでは、コードの変更と新機能がデータベースのロードに与える影響に注意する必要があり、データベースレイヤーの変更を避けるためにハック的なソリューションに頼ることが多々ありました。Amazon DocumentDB では、より優れたパフォーマンスの達成、全体的なデータベース使用状況の最適化、および新機能のより迅速な開発とデプロイメントが可能であるため、お客様のためにより素早く革新することができます。

移行で学んだ教訓

移行の準備に当たって、私たちは安全を期すために Amazon DocumentDB クラスターを過剰にスケールしました。移行後の適切なサイズへのスケールバックが容易であると理解していたので、必要以上に大きいインスタンスを選択したのです。移行を実行するために、ソース MongoDB データベースとターゲット Amazon DocumentDB クラスターの両方に二重書き込みを実行するようアプリケーションを変更しました。そうすることによって、移行を検証するために両方の環境を長期間 (数週間) 並行して実行することができました。移行はダウンタイムなしで正常に行うことができました。

もう一度移行を行うとしたら、代わりに Amazon Database Migration Service (AWS DMS) を利用するでしょう。移行時に問題はまったく発生しませんでしたが、AWS DMS はデータの継続的なレプリケーション (私たちこれを手動でコードしました) をサポートしていることから、必要な開発工数が減ったであろうと思われます。

まとめ

セルフマネージド MongoDB データベースを Amazon DocumentDB に移行することによって、Woot はコストを 82% 削減し、パフォーマンスとスケーラビリティを向上させて、運用業務を減らしました。Amazon DocumentDB では、より迅速にイテレーションを行い、お客様により多くの価値を提供することができます。

 


著者について

Sam Giagtzoglou は Woot! のソフトウェアエンジニアです。 AWS のサーバーレスサービスでの可用性に優れた低メンテナンスのリテールソリューションの設計、構築、および指標デザインにおける経験を持つ Sam は、現在 Woot のカタログバックエンドシステムの大幅な再設計を先導しています。Sam はウェズリアン大学でコンピューターサイエンスの学士号を取得しました。