社内ポータルサイトパッケージ負荷検証結果

阿部 正幸
アイキャッチ

モチヤで開発・販売している社内ポータルサイトパッケージは、組織構造に合わせたアクセス制御を行うシステムです。アクセスするユーザーに応じて、記事の表示・非表示が切り替わるため、Webサーバーの性能もそれなりに求められます。

毎月のサーバー費用は固定費となるため、どの程度の費用がかかるかで、システムを導入するか、しないか変わってくるかと思います。

そこで、特定の負荷に対してWebサーバーおよび、DBサーバーの性能が必要か負荷検証試験を行いました

応答性能に関してはP95(N=100 個のサンプルを最低利用率から最高利用率にソートした場合、95 番目の位置にあるサンプルを選択)に対して、応答速度が2000ms以内を達成できるかを検証しました。

  • 目標: 「認証済みユーザー 200 同時接続でトップページ P95 2000ms 以内」
  • 拡張: 400〜1000 VUs(Virtual Users) までのスケーラビリティとコスト/構成トレードオフ把握

テストデータ数

社内ポータルサイト(Drupal)には、1万人(10,000ユーザー)の社員がいる会社を想定し、以下のテスト用データを事前に登録します。

部署グループ

  • 部署ツリーの深さ: 4
  • 各階層毎の部署数 (全585部署)
    • 第1階層の部署数: 1
    • 第2階層の部署数: 8
    • 第3階層の部署数: 64
    • 第4階層の部署数: 512
  • 部署グループとユーザーのマッピング
    • 第1階層の部署に割り当てるユーザー数: 50
    • 第2階層の部署に割り当てるユーザー数: 300ユーザー
    • 第3階層の部署に割り当てるユーザー数: 1000ユーザー
    • 第4階層の部署に割り当てるユーザー数: 8650ユーザー
  • 属性グループ
    • 役員, 正社員, 契約社員, パートの4つ
    • 属性グループとユーザーのマッピング2
    • 役員に割り当てるユーザー数: 30
    • 正社員に割り当てるユーザー数: 7000
    • 契約社員に割り当てるユーザー数: 1000
    • パートに割り当てるユーザー数: 1970

テスト用記事数

  • コンテンツタイプ1: 5000件
  • コンテンツタイプ2: 5000件
  • 各ノードに登録するアクセス制御の設定3
    • 部署: 1-3個
    • 部署の範囲: 「指定部署のみ」 or 「指定部署以下」
    • 個別ユーザー: 0-3ユーザー

利用ライブラリとサーバー構成

AWS負荷試験環境

負荷検証のAWS環境は下記の通りで、負荷検証時には可用性を高めるため、Multi-AZを採用しています。

試験環境

利用環境

  • Drupal Core 11 + 階層構造によるアクセス権限制御 + Umami
  • DB: Amazon RDS for MySQL (Graviton 世代 m7g 系/X86 m7i 系)
  • 実行環境: AWS ECS Fargate (X86_64 と ARM64(Graviton))
  • キャッシュ: ElastiCache (Valkey/Redis 相当), Drupal 標準キャッシュ
  • データ/サイト: 負荷試験用スクリプトで生成

試験結果

全試験パターン結果は下記の通りです。

No VUs ECS Tasks CPU Arch RDS P95(ms) RPS ボトルネック
1 200 1 x86_64 m7g.large 2836 86.8 ECS CPU
2 200 2 x86_64 m7g.large 1366 174.6 ECS CPU
3 300 2 x86_64 m7g.large 2110 174.5 ECS CPU
4 300 3 x86_64 m7g.large 1301 288.2 ECS CPU
5 400 3 x86_64 m7g.large 1792 288.6 ECS CPU
6 400 4 x86_64 m7g.large 1303 400.1 ECS CPU
8 400 6 x86_64 m7g.large 1063 491.2 RDS CPU
9 600 6 x86_64 m7g.large 1575 481.0 RDS CPU
10 600 6 x86_64 m7g.xlarge 1387 542.9 ECS CPU
11 600 8 x86_64 m7g.xlarge 1045 774.0 ECS CPU
12 800 8 x86_64 m7g.xlarge 1414 776.6 ECS CPU
13 1000 8 x86_64 m7g.xlarge 1743 766.7 ECS CPU
14 800 6 x86_64 m7g.xlarge 1907 563.0 ECS CPU
15 1000 6 x86_64 m7g.xlarge 2441 576.1 ECS CPU
16 200 1 x86_64 m7i.large 2692 93.8 ECS CPU
17 400 4 x86_64 m7i.large 1403 350.8 ECS CPU
18 400 6 x86_64 m7i.large 1224 434.9 RDS CPU
19 600 6 x86_64 m7i.large 1717 428.4 RDS CPU
20 200 1 ARM64 m7g.large 1676 143.9 ECS CPU
21 400 3 ARM64 m7g.large 853 434.5 ECS CPU
22 600 6 ARM64 m7g.xlarge 839 872.2 ECS CPU
23 800 6 ARM64 m7g.xlarge 1131 870.7 ECS CPU
24 1000 6 ARM64 m7g.xlarge 1411 869.9 ECS CPU
24 1000 8 ARM64 m7g.xlarge 1342 940.0 RDS CPU
25 1000 4 ARM64 m7g.xlarge 2131 565.3 ECS CPU
26 1000 5 ARM64 m7g.xlarge 1709 715.3 ECS CPU

主要な性能結果(閾値: P95 ≤ 2000ms)

  • X86_64 Fargate + RDS m7g.large(初期構成)での達成タスク数:
  • 200 VUs: タスク 1 では 2836ms → タスク 2 で 1366ms (達成)
  • 300 VUs: タスク 2 で 2110ms → タスク 3 で 1301ms (達成)
  • 400 VUs: タスク 3 で 1792ms (達成済) / 4~6 でさらに短縮 (最良 1063ms ただし RDS CPU がボトルネック化)
  • 600 VUs: タスク 6 + RDS m7g.large で 1575ms (RDS ボトルネック) → RDS を m7g.xlarge にすると 1387ms → タスク 8 で 1045ms
  • 800 VUs: タスク 6 で 1907ms (達成) → 8 で 1414ms
  • 1000 VUs: タスク 6 で 2441ms (未達) → 8 で 1743ms (達成)

スケーリング挙動分析

ECS タスク数 vs P95 改善率

  • ボトルネックが ECS 側にある領域では「タスク数増加率」と「P95 改善率」はほぼ正の相関
    例: 1→2 タスク ( +100% ) で P95 2836→1366ms ( +108% 改善換算 )
  • タスクを増やしても RDS が先に飽和すると限界効用逓減 (例: 400 VUs で 3→6 タスクは改善するが途中で RDS CPU が支配的に)

アクセス制御モジュール観点の含意

  • 階層構造による権限コントロールモジュールの 計算(ユーザー所属部署ツリー + 属性グループ展開)は CPU 集約的処理としてスレッド(= PHP FPM 相当プロセス/ワーカ)スケールで水平分散可能
  • 階層クエリで RDS への参照頻度が増える状況では DB CPU 過負荷 → モジュール側キャッシュ (memory + persistent) のヒット率設計が重要
  • 設計上、ユーザー単位の権限 を memory + persistent キャッシュに保存しており、同一リクエスト内 / 以降のリクエストでCPU / DB 負荷を抑制する戦略が機能していると推測

コスト試算

200VUsをP95 2000msを達成するには、1か月あたり、$953で、$1 150円で計算をすると、約14万円です。しかし実運用では夜間や、業務時間中に200VUsのアクセスは来ません。

AWS構成(構成詳細はお問合せいただきましたら開示させていただきます)

 

コスト試算をする上で、下記の通りとアクセス数を仮定します。

 

  • 最もアクセスが集中する時間(業務開始時間など):1日1時間(200VUs)、約 $1.32/日
  • アクセスが集中する時間:1日3時間(100VUs)、約 $2.91/日
  • それ以外(夜間や、実業務が忙しい時間帯):1日20時間(20VUs)、約 $14.74/日

合計:$18.97/日、$569.1/日($1 = 150円、85,365円)

結論、上記条件における1か月のサーバー費用(実費)

※ この負荷検証結果は1万人規模の会社を想定した検証結果のデータです。記事数、ユーザー数、カスタマイズ内容、為替などにより価格は変動いたしますため、参考値としてご参照ください。またモチヤではサーバー利用料を定額で利用することもできます。

85,365円 / 月($1 = 150円換算)

ECSタスク数と、レスポンス速度増加率の相関

以下の表は、次の条件にマッチする負荷試験におけるECSのタスク数の増加率とレスポンス速度の増加率を表にしたものです。

  • 負荷 (VUs) が同一である
  • ボトルネックがECSにある

サンプル数は少ないですが、ECSタスク数の増加率とレスポンス速度の増加率がほぼ正の相関になっていることがわかります。

ECSタスク数の増加割合とレスポンス速度の増加割合の相関

 

負荷 (VUs) 変更前のタスク数 変更後のタスク数 変更前のレスポンス速度 変更後のレスポンス速度 タスク数の増加率 (%) 速度の増加率 (%) 備考
200 1 2 2836 1366 100 107.61347 No.1とNo.2の比較
300 2 3 2110 1311 50 60.94584287 No.3とNo.4の比較
400 3 4 1792 1303 33.33333333 37.52877974 No.5とNo.6の比較
600 6 8 1387 1045 33.33333333 32.72727273 No.10とNo.11の比較
800 6 8 1907 1414 33.33333333 34.86562942 No.12とNo.14の比較
1000 6 8 2441 1743 33.33333333 40.04589788 No.13とNo.15の比較
1000 4 5 2131 1709 25 24.69280281 No.26とNo.27の比較
1000 5 6 1709 1411 20 21.11977321 No.24とNo.26の比較

今回、1000Vus P95 2000msまでの検証を行いましたが、恐らくこれ以上のアクセスにおいても、ECSのタスク数及び、RDSの性能をあげることで負荷に対応することが可能と考えています。

なお、1000Vusの場合は、$1,741.07で、日本円に換算しますと約26万円/月です。(AWS構成例はお問合せいただきましたら開示させていただきます)

社内ポータルサイトパッケージ

モチヤの社内ポータルサイトパッケージのサーバー利用料は、上記のAWS利用料(実費)+ サーバー保守及び/死活監視(40,000円/月)を行っている費用を上乗せしております。

https://www.mochiya.ad.jp/drupal/portal-site

 

阿部 正幸/ 代表取締役

Drupal歴15年、ウェブマーケティング、インフラ構築、AP開発が守備範囲です。
キャッチボール、筋トレ、日本酒、ウイスキーが好きです。天気の良い日に、誰かキャッチボールして、立呑に付き合ってください。
好きなDrupalモジュールはIMCEです。

阿部 正幸 の書いた記事一覧

  • Facebook

最新の関連記事

Contact お問い合わせ

Drupalでの開発・運用、サーバー構築、Webサイト構築全般についてお気軽にご相談ください。専門スタッフによるDrupal無料相談も行なっております。