インフラストラクチャ概要

この記事では、Thinvent 公式ウェブサイトを支えるインフラストラクチャについて包括的に概説します。ウェブサーバーからデータベース層までの完全な技術スタックをカバーし、すべてのコンポーネントがどのように連携して、高速で信頼性が高くスケーラブルな e コマース体験を提供しているかを説明します。

ウェブアプリケーションスタック

Flask - 基盤

当社のウェブサイトは、軽量で柔軟な Python ウェブフレームワークである Flask を基盤として構築されています。Flask は、アプリケーションをモジュール化されたコンポーネントに整理する、コアのルーティング、リクエスト/レスポンス処理、およびブループリントシステムを提供します。

当社が使用する Flask の主な機能:

  • ブループリント: アプリケーションを論理的なモジュール(ウェブ、API、カート、製品など)に整理

  • Jinja2 テンプレート: テンプレート継承によるサーバーサイド HTML 生成

  • リクエストコンテキスト: HTTP リクエストとセッションの自動処理

  • Werkzeug: 開発サーバーとユーティリティ関数

Flask アプリケーションは、ウェブモジュールで初期化されます。ここでは以下を行います:

  • ウェブブループリントの作成

  • 国際化のための Babel の初期化

  • Valkey セッションストレージの設定

  • テンプレート変数のためのコンテキストプロセッサのセットアップ

Gunicorn - プロダクションサーバー

プロダクション環境では、Python WSGI HTTP サーバーである Gunicorn (Green Unicorn) を使用しています。Gunicorn は複数のワーカープロセスで Flask アプリケーションを実行します。

Gunicorn は systemd によって管理され、クラッシュ時やサーバー再起動時に自動的に再起動されることが保証されます。これにより、手動介入なしで高可用性を実現しています。

Nginx - リバースプロキシ & ロードバランサー

Nginx はリバースプロキシおよびロードバランサーとして機能します。Gunicorn の前に配置され、以下を処理します:

  • SSL/TLS ターミネーション: HTTPS の暗号化/復号化

  • 静的ファイル配信: CSS、JavaScript、画像(ディスクから直接配信)

  • リバースプロキシ: 動的リクエストを Gunicorn に転送

  • レート制限: 悪用からの保護

  • リクエスト圧縮: 高速な転送のための Gzip 圧縮

Ubuntu - オペレーティングシステム

すべての EC2 インスタンスは、当社が選択した Linux ディストリビューションである Ubuntu を実行しています。利用可能な場合、pip よりも Ubuntu の Python パッケージを使用することを好みます。

典型的なリクエストの流れは以下の通りです:

flowchart LR
    A[クライアントブラウザ] -->|HTTPS リクエスト| B[Nginx]
    B -->|プロキシ| C[Gunicorn]
    C -->|WSGI| D[Flask アプリ]
    D -->|クエリ| E[Valkey キャッシュ]
    E -->|ミス| F[DynamoDB]
    F -->|レスポンス| E
    E -->|ヒット| G[レスポンス]
    G --> B
    B -->|レスポンス| A

CloudFront - コンテンツデリバリーネットワーク

CloudFront は当社の CDN であり、以下を提供します:

  • DDoS 保護: 分散型攻撃に対する組み込みの保護

  • オリジンシールディング: オリジンサーバーをトラフィックスパイクから保護

当社の CloudFront ディストリビューションには 2 つのオリジンがあります:

  • バックエンドサーバー: バックエンド Flask アプリ

  • S3: 静的アセット用の S3 バケット

設定されたキャッシュ動作:

  • /s/* - 静的アセット(CSS、JS、画像)、24 時間 TTL

  • /ds/*.pdf - データシート、24 時間 TTL

  • /api/* - API エンドポイント、キャッシュなし

  • /cart - カート、24 時間 TTL

  • /set-language - キャッシュなし(動的)

データ層

DynamoDB - プライマリデータベース

プライマリデータベースとして Amazon DynamoDB を使用しています。DynamoDB は NoSQL データベースです。

当社の DynamoDB テーブルには以下が含まれます:

  • Recommendations: AI 生成の製品推奨

  • Product descriptions: 複数言語の製品説明

  • Query pages: SEO 用に解析されたクエリページ

DynamoDB 用の Pythonic ORM である PynamoDB を使用しており、以下を提供します:

  • モデル定義: データベーステーブルのための Python クラス

Valkey - インメモリキャッシュ

Valkey (Redis のフォーク) は当社のインメモリキャッシュ層であり、以下を提供します:

  • セッションストレージ: 30 日間のスライディング有効期限付きユーザーセッション

  • 頻繁にアクセスされるデータ: 製品数、人気クエリ

  • オートコンプリートキャッシュ: 検索候補

  • 画像マニフェスト: 製品画像の場所

Valkey は以下のような重要なパフォーマンス上の利点を提供します:

  • 読み取り操作において DynamoDB よりも 100 倍高速

  • データベース負荷の軽減: キャッシュヒットにより DynamoDB クエリを回避

  • セッション永続性: リクエスト間での Valkey バックアップセッション

Valkey は以下に使用されます:

  • セッション: ユーザーログイン状態、カートデータ

  • キャッシュ: 人気クエリ、オートコンプリート候補

  • カウンター: 製品在庫数(パフォーマンスのためにキャッシュ)

  • キュー: バックグラウンドジョブ処理

S3 - オブジェクトストレージ

Amazon S3 は当社のオブジェクトストレージサービスです。

S3 は以下に使用されます:

  • 製品画像: 高解像度の製品写真

  • データシート: PDF 製品仕様書

  • 静的アセット: CSS、JS、画像

DNS & ルーティング

Route53 - ドメイン管理

Route53 が当社の DNS 管理を処理します:

  • ドメイン登録: thinvent.in および関連ドメイン

Nginx ルーティング

Nginx は URL パターンに基づいてリクエストをルーティングします:

  • / → Flask アプリ(ホーム、製品、カート、チェックアウト)

  • /q/ → Flask アプリ(クエリページ、検索結果)

  • /api/ → Flask アプリ(API エンドポイント)

  • /static/ → CloudFront/S3(静的アセット)

検索 & AI インフラストラクチャ

検索サービス

検索機能用にスタンドアロンの Flask アプリケーションを実行しています。このサービスは以下を提供します:

  • ベクトル検索: 関連クエリのための意味的類似性

  • オートコンプリート: プレフィックスベースの検索候補

  • 人気クエリ: 最も検索された用語

  • フィルター抽出: ファセットのための検索クエリの解析

検索サービスは以下を使用します:

  • Valkey RediSearch: ベクトル類似性検索

  • SentenceTransformer: 埋め込み生成

  • フレーズマッピング: 部分文字列マッチングによるフィルター抽出

AI プロバイダー

異なるタスクに複数の AI プロバイダーを使用しています:

DeepSeek

  • モデル: deepseek-chat

  • ユースケース: 製品説明、クエリページコンテンツ、翻訳

  • API: Together.ai フォールバック付き DeepSeek API

  • キャッシュ: プロンプトキャッシュ効率のためのシステムプロンプト

Gemini

  • モデル: Gemini (特定のモデル)

  • ユースケース: コンテンツ生成

  • 統合: 直接 API 呼び出し

Amazon Bedrock

  • モデル: Nova Pro

  • ユースケース: 内部チャット

  • 統合: boto3 SDK

Amazon Bedrock

  • モデル: Nova Lite

  • ユースケース: カスタマーチャットボット

  • 統合: boto3 SDK

完全なリクエストフロー

典型的なリクエストが当社のインフラストラクチャをどのように流れるかを以下に示します:

flowchart TD
    A[クライアントブラウザ] -->|DNS クエリ| B[Route53]
    B -->|IP アドレス| C[CloudFront]
    C -->|キャッシュチェック| D{キャッシュヒット?}
    D -->|はい| E[キャッシュされたコンテンツを返す]
    D -->|いいえ| F[Nginx]
    F -->|プロキシ| G[Gunicorn]
    G -->|WSGI| H[Flask アプリ]
    H -->|キャッシュチェック| I[Valkey]
    I -->|ヒット| J[キャッシュされたデータを返す]
    I -->|ミス| K[DynamoDB]
    K -->|クエリ| L[データを返す]
    L --> I
    J --> M[レスポンスを構築]
    E --> M
    M --> N[クライアントに送信]

モニタリング & ヘルス

UptimeRobot - 外部モニタリング

すべての公開エンドポイントの外部モニタリングに UptimeRobot を使用しています:

  • バックエンドサーバー: バックエンドウェブサイト

  • www.thinvent.in: 公開ウェブサイト

ヘルスチェック

  • Gunicorn: systemd が再起動を管理

  • Flask: /health エンドポイントがステータスを返す

  • Valkey: 接続ヘルスを監視

  • DynamoDB: レイテンシーとスループットを監視

ロギング

  • アプリケーションログ: Gunicorn error.log

  • アクセスログ: Gunicorn access.log

  • メール: 重大なイベントに対する Python トレースバック付きリアルタイム通知

まとめ

当社のインフラストラクチャは以下を目的として設計されています:

  • パフォーマンス: 複数のキャッシュ層、CDN、最適化されたクエリ

  • スケーラビリティ: 自動スケーリングデータベース、ロードバランシング

  • コスト効率: 使用量に応じた課金、データベース負荷を軽減するためのキャッシュ

Flask、Gunicorn、Nginx、Ubuntu、DynamoDB、Valkey、CloudFront、UptimeRobot の組み合わせにより、当社の e コマースプラットフォームのための堅牢でスケーラブルな基盤が提供されています。

関連記事