アプリケーションのアーキテクチャを学ぶ

このページでは、Swarm をスケールさせるサンプルについて学びます。まず 導入ページ を読み、必要となるスキルや時間を検討ください。

サンプルの背景を学ぶ

あなたの会社はペットフード会社であり、スーパーボウルのコマーシャル枠を購入しようとしています。コマーシャルでは、視聴者に対して調査のために犬か猫かの投票を呼びかけます。あなたはウェブ投票システムを開発します。

この調査では100万人もの人々が投票してもウェブサイトが止まらないようにする必要があります。結果をリアルタイムで知る必要はなく、結果は会社のプレスリリースで公開します。しかし、どれだけ投票されたかは、投票の度に確実に把握する必要があります。

アプリケーションのアーキテクチャを理解

投票アプリケーションは Docker 化されたマイクロサービス・アプリケーションです。並列なウェブ・フロントエンドを使い、ジョブを非同期のバックグラウンド・ワーカに送ります。アプリケーションは任意に大きくスケール可能な設計です。次の図はアプリケーションのハイレベルなアーキテクチャです。

../../_images/app-architecture.png

このアプリケーションは完全に Docker 化(Dockerized)しており、全てのサービスをコンテナ内で実行します。

フロントエンドは interlock ロード・バランサと n 台のフロントエンド・ウェブサーバで構成され、クエリを作成します。ロードバランサは任意の数のウェブ・コンテナを背後で扱えます( frontend01frontendN )。Webコンテナはシンプルな Python Flask アプリケーションです。各コンテナは投票を受け付け、同じノード上の Redis コンテナにキューを渡します。各ウェブ・コンテナと Redis キューのペアは独立して処理されます。

このペアはロードバランサと個別に連係できます。そのため、アプリケーション全体を需要に応じて任意の大きさにスケール可能です。

フロントエンドの背後にはワーカ層があり、別々のノードが動いています。この層は、

  • Redis コンテナをスキャン
  • 投票のキューを回収
  • 重複投票を防ぐために投票結果を複製
  • 別のノードにある PostgreSQL が動いているコンテナに結果をコミットする

フロントエンドと同様に、ワーカー層も任意にスケールできます。

Swarm クラスタのアーキテクチャ

アプリケーションの設計をサポートするのが、1つの Swarm マネージャと4つのノードで構成される Swarm クラスタです。

../../_images/swarm-cluster-arch.png

クラスタの4つのノードすべてで Docker デーモンが動作します。Swarm マネージャと interlock ロードバランサも同様です。Swarm マネージャは Docker ホスト上に存在します。これはクラスタの一部ではなく、アプリケーションの外にあるものと考えます。Interlock ロードバランサはクラスタ内に設置可能ですが、今回のサンプルでは扱いません。

以下の図は Swarm クラスタのアーキテクチャ上に、アプリケーションのアプリケーションを重ねています。このサンプルを終え、アプリケーションをデプロイすると、次のような環境が整います。

../../_images/final-result.png

この図にあるように、クラスタの各ノードでは次のコンテナを実行します。

  • frontend01
    • コンテナ:Python flask ウェブアプリ(frontend01)
    • コンテナ:Redis(redis01)
  • frontend02
    • コンテナ:Python flask ウェブアプリ(frontend02)
    • コンテナ:Redis(redis02)
  • worker01 :投票ワーカーアプリ(worker01)
  • store
    • コンテナ:Postgres(pg)
    • コンテナ:results アプリ(results-app)

アプリケーションをデプロイするとき、ローカル・システムを設定するとローカルのブラウザ上でアプリケーションをテスト可能です。プロダクションでは、もちろんこの手順は不要です。

ネットワーク・インフラ

このサンプルではアプリケーションを Amazon Web Services (AWS) 上の Swarm クラスタにデプロイします。AWS を使うのは単なる例です。このアプリケーションやデプロイに必要なだけです。皆さん自身で、任意のプラットフォーム上で環境設計を再現可能です。例えば、 Digital Ocean のような別のパブリック・クラウド・プラットフォームや、データセンタ内のオンプレミス上や、ノート PC 上のテスト環境にもアプリケーションをデプロイできます。

次のステップ

これでアプリケーションのアーキテクチャを理解しましたの。デプロイするにあたり、どのようなネットワーク設定をサポートする必要があるのか分かったと思います。次のステップでは、このサンプルを使って AWS 上に ネットワーク・インフラをデプロイ します。

参考

Learn the application architecture
https://docs.docker.com/swarm/swarm_at_scale/01-about/