2.ウェブアプリケーションのアーキテクチャ

ただ読むだけじゃ理解できない低脳なのでノートとりまーす。

Webアプリケーションにおける階層化アーキテクチャ

  • プレゼンテーション層
    • 飾りつけ
    • CSS
  • マークアップ
    • ユーザに見える形で、下位層へのアクセス手段を提供
    • 受け取ったデータをHTML、XMLに落とし込む
  • インタラクションロジック層
    • データをユーザに向けてどう提示するかを決める、ユーザ側に操作手順を示す
  • ビジネスロジック
    • データへのアクセス、操作→システムの振る舞い→独自性を定義
    • ページロック層以上に依存しない(上の層をまるごと挿げ替えたり、複数置いたりできる)
  • 永続化層

階層化の意義

  • コードの分離
    • インタフェースの変更さえしない限り、他の層を壊してしまう心配なしに、自分の層を書き直せる(他を知らなくても、インタフェースだけ気をつければ良い)
    • ストレージ管理とデータ操作のルール(ビジネスロジック層)と、ユーザがデータを利用するときの方法を規定するルール(ページロジック層)は論理的に異なるため、2つを分離することは重要

インタフェースの設計

  • 各階層がそれぞれ隣の層とリクエストとレスポンスを交換できる機能集合のこと
  • 仕事の依頼」のとりきめ
  • 制御は一方向だけでなく、双方向に流れる可能性がある
    1. テンプレートシステムでテンプレート作成
    2. データと関数をエクスポート(インタラクションロジック層→マークアップ層)
    3. インタラクションロジック層の変数の中にテンプレートの評価結果を出力して電子メールで送信

単一巨大関数型アプリケーションを階層に分離する

  • プレゼンテーション層を分離する
    1. ロジックコードをマークアップコードから分離
      • HTMLのマークアップを生成するコードを分離、他のファイルに分け、実行時にインクルードするように変更
    2. マークアップコードを1ページ(1コンポーネント)につき1ファイルの形に分割
    3. テンプレートシステムに移行
      • 1ページずつテンプレートシステムに変換していく
      • ページの分離により他のページに影響を与えずに作業できる
  • マークアップ層とプレゼンテーション層を分離
    • スタイルをCSSに移行する
  • ページロジックをビジネスロジックから分離
    • 関数のグループ化
      • データを操作している箇所をそれぞれ別個の関数グループに分ける(特定のテーブルにアクセスするコードなどをまとめる等)

ハードウェアプラットフォーム

  • 初期設計の際に注意すべき事柄(小規模な最適化はしないという原則)
    • 一般的な市販ハードウェアを買う
      • 必要なハードウェアの見積もりは一般的に難しく、必要に応じて用意に拡張できるように
      • 失敗しても転用できる可能性が高い
    • ビルド済みのOSを使う
      • 多くの場合、カーネルの設定をチューニングしても労力(エンジニアの人件費)に見合うものではない
      • 多くのサーバを管理するようになって、各々のサーバでの性能向上が大きな効果を持つようになったとき初めて着手する意味が生じる
    • ビルド済みのソフトウェアを使う
      • 多くの開発者によるテストが既に行われている
      • コンパイル時のミスの混入を避ける
  • 共有ハードウェア
    • アプリケーション開発時(ローカマシンの次のステップ)から小規模での運用時まで
  • 専用ハードウェア(レンタル)
    • アプリケーションの規模によるがコストパフォーマンスが高い
    • システム管理者を置く必要が無く、ハードウェアの設定作業に時間をとられない
  • コロケーション(ハウジング)
    • 設備の整ったデータセンターを間借りして自分で保守管理をする
    • サービスの質はまちまち、よく検討すべき(他のプロバイダに変更するのは大変)
  • セルフホスティング(自前のデータセンター)
    • 数千台規模のサーバを持つようになった場合
    • 小規模な専用サーバを自前で、というのは、結局は他のソリューションを選択した方がトラブルが少なくなり、手間の面でよい選択とはいえない

スケーラブルWebサイト

スケーラブルWebサイト