SA.04:性能・拡張性の設計

SA.04.1 性能見積もりと評価

重要度:☆☆(2)

概要

  • 機能特性や想定アクセスを加味して適切な性能見積もりとリソース選定ができる。
  • プロトタイプなどを用いて初期設計の性能を評価・測定でき、性能未達時のボトルネックを調査できる。

詳細

  • 性能に関わる要件を整理する。
    • 業務特性: ユーザー数、負荷ピーク傾向、サービス提供時間、総データ量、データの増分傾向など
    • 性能要件: アクセス数/秒、同時接続数、許容レスポンスタイム、I/O 速度 (IOPS、スループット、レイテンシ) など
    • 制約条件: 排他制御の必要性、ロックの粒度など
    • アプリケーションの特性: マルチコア活用、キャッシュ特性など
  • 性能の見積もりとサイジングを行う。
    • 業務機能ごとのリソース使用率の分析
    • 性能要件 (許容レスポンスタイムなど) のコンポーネントへの割り振り検討
    • リソースの (仮) 選定: CPU、メモリ、ディスク、ネットワーク
  • 評価方法について理解している。
    • 実機テスト (PoC)
    • ベンチマークとの比較
  • プロトタイプのシステムが意図通りの性能を発揮するかを測定・分析する。
    • 各種リソースやカーネルの状態を調べるユーティリティ・コマンドの出力の解釈
    • 各コンポーネントの性能指標とシステム全体の性能指標の関係分析
  • 性能未達時のボトルネックとその原因を絞り込む。
    • デフォルトの設定値、利用目的別推奨値、最適値
    • タスクを実行するツールのバージョン選択
    • 上限: セッション数、ファイル・ディスクリプタ、ソケット・ポート関連

SA.04.2 性能の改善

重要度:☆☆☆(3)

概要

  • 業務特性に合わせて、処理や通信の方式を選定したり機能優先度やパラメータを調整したりすることで、性能のボトルネックを改善できる。

詳細

  • 性能設計の視点で各種アルゴリズム・プロトコルの特徴や制約を比較できる。
    • HTTP/3、QUIC
  • 機能ごとの優先度調整を行う。
    • 新規プロセスと既存プロセスのプロセス優先度の変更
    • チューニングされたプロファイルを選択して設定
    • cgroup によるシステムリソースの使用量の調整
  • ノード内の CPU、メモリ、ディスク、ネットワーク性能の改善を行う。
    • カーネル: shmmax の調整
    • メモリ: 代替ページサイズ調整
    • ディスク・ファイルシステム: I/O スケジューリングアルゴリズム選択、フィーチャ・オプションの選択、ブロックサイズ調整
    • ネットワーク: バッファサイズの計算・設定
  • ノード間のチューニングを行う。
    • ネットワークホップ数の改善
    • ボンディング (リンクアグリゲーション)
  • リソース枯渇にたどり着きにくくするための設定を行う。
    • ファイル・ディスクリプタ数の適正化
    • ネットワークのソケット、ポート、キュー数の適正化
    • セッション数の適正化: Connection pooling

SA.04.3 性能の拡張

重要度:☆☆☆☆(4)

概要

  • アプリケーション層やデータベース層についての主要なスループット改善手法とその適用条件を理解している。
  • ノードの追加や機能の分割により性能要求に合わせてシステムをバランスよく拡張する設計を導入できる。

詳細

  • リードアクセスの外部化により負荷軽減とレスポンスタイム向上を図る。
    • CDN
    • キャッシュ、インメモリデータベース: redis、memcached
  • ステートレスな設計を導入しアプリケーションサーバーを分散する。
    • データの外部化
    • セッション情報の外部化
    • ログの外部化
  • ロードバランサやメッセージングキューを用いてスケールアウト構成を設計する。
  • 要件に合わせてデータベースを複数ノードに分散しスループットを改善する。
    • 垂直シャーディング
    • 水平シャーディング
    • リードレプリカの導入
  • 分散処理中のロックに関するボトルネックを回避する。
    • 共有資源の制限
    • ロックの分散や期間短縮